Servlet之Filter过滤器--Java学习网

时间:2016-12-5 8:12:05

  核心提示:过滤器是一个实现了javax.servlet.Filter接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:1 public voiddoFilter(Servlet...

过滤器是一个实现了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

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号