在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Servlet之Filter过滤器

2016-12-20 13:12| 发布者: zhangjf| 查看: 412| 评论: 0

摘要: 过滤器是一个实现了javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法: 1 public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法在每次一个请求/响应 ...

过滤器是一个实现了javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

1 public void doFilter (ServletRequest, ServletResponse, FilterChain)

该方法在每次一个请求/响应对因客户端在链的末端请求资源而通过链传递时由容器调用。

2 public void init(FilterConfig filterConfig)

该方法由 Web 容器调用,指示一个过滤器被放入服务。

3 public void destroy()

该方法由 Web 容器调用,指示一个过滤器被取出服务。

字符编码过滤器

  1. public class CharacterEncodingFilter implements Filter{
  2. private String characterEncoding;
  3. private boolean enabled;
  4. public void init(FilterConfig config)throws ServletException{
  5. characterEncoding = config.getInitParameter(“characterEncoding”);
  6. enabled =
  7. "true".equalsIgnoreCase(config.getInitParameter("enabled").trim());
  8. }
  9. public void doFilter(ServletRequestrequest,ServletResponse response,
  10. FilterChainchain) throws IOException,ServletExceprion{
  11. if(enabled&& characterEncoding !=null){
  12. request.setCharacterEncoding(characterEncoding);
  13. response. setCharacterEncoding(characterEncoding);
  14. }
  15. chain.doFilter(request,response); //不能漏写这一句
  16. }
  17. public void destroy(){
  18. characterEncoding = null; //销毁时清空
  19. }
  20. }
复制代码

配置如下:
  1. <filter>
  2. <filter-name> CharacterEncodingFilter </filter-name>
  3. <filter-class> filter.CharacterEncodingFilter</filter-class>
  4. <init-param>
  5. <param-name> characterEncoding </param-name>
  6. <param-value>UTF-8</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name> enabled </param-name>
  10. <param-value>true</param-value>
  11. </init-param>
  12. </filter>
  13. <filter-mapping>
  14. <filter-name> CharacterEncodingFilter </filter-name>
  15. <url-pattern>/*</url-pattern>
  16. <dispatcher>REQUEST</dispatcher>
  17. </filter-mapping>
复制代码

页面编码方式与Filter的编码方式必须一致,另外,如果表单是GET方式提交的,还需要修改Tomcat的server.xml,指定URIEncoding(默认为ISO-8859-1)

redirectPort = “8443” URIEncoding = "UTF-8"/>

标签一般不用配置,默认为REQUEST,一共有四种

REQUEST:只有直接请求Servlet时才生效

FORWARD:只有当某Servlet通过forward到该Servlet时才生效

INCLUDE:JSP中通过请求某Servlet时才生效

ERROR:JSP通过<%@ pageerrorPage = “error.jsp” %>指定错误页面时才生效

filter的顺序是按照的配置先后来执行的

filter的典型应用还有身份验证过滤器(Authentication Filters)、数据压缩过滤器(Data compression Filters)、加密过滤器(EncryptionFilters)、触发资源访问事件过滤器、图像转换过滤器(Image Conversion Filters)、日志记录和审核过滤器(Loggingand Auditing Filters)、MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)、标记化过滤器(TokenizingFilters)、XSL/T 过滤器(XSL/T Filters)、转换 XML 内容,此外,通过重载HttpServletRequestWrapper类,自定义request还可以实现文件上传的Filter

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 03:51

Copyright 2015-2025 djqfx

返回顶部