-
过滤器的作用
(1) 当用户对Web应用的请求到达之前,过滤器进行拦截和处理,然后再交给被请求的部分
(2) 在Web应用将数据返回到用户之前,过滤器进行拦截和处理,然后再交给用户
过滤器可以有 0个或多个,顺序按照web.xml中声明的先后顺序进行处理(可以理解为多面墙,请求到来时先通过A墙,再通过B墙;响应发送时,先通过B墙,再通过A墙)
-
所有过滤器都要实现 javax.servlet.Filter接口,这个接口中包括3个方法
(1) init()
生成过滤器对象时调用,主要完成初始化工作
(2) destroy()
过滤器对象被销毁时调用,释放过滤器对象所占用的资源
(3) doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
完成过滤功能。 处理request可以完成作用1, 处理response可以完成作用2, 调用FilterChain的doFilter()方法可以调用下一个过滤器的doFilter()方法,直到无过滤器可调用,处理请求的Servlet或JSP
-
配置过滤器
(1) 示例
<filter> <filter-name>AFilter</filter-name> <filter-class>filter.AFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>AFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
(2) 说明
<url-pattern>代表需要过滤资源的路径匹配,/*代表/路径下的所有资源
<init-param>代表filter初始化参数,可以通过filterConfig.getInitParameter()方法读到
-
对于中文字符的输出乱码问题,可以配置一个过滤器来解决,而且这个过滤器要放在 web.xml的最前面
EncodingFilter.java
public class EncodingFilter implements Filter { private String characterEncoding; private String contentType; public void init(FilterConfig filterConfig) throws ServletException { this.characterEncoding = filterConfig.getInitParameter("characterEncoding"); this.contentType = filterConfig.getInitParameter("contentType"); } public void destroy() { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding(this.characterEncoding); servletResponse.setCharacterEncoding(this.characterEncoding); servletResponse.setContentType(this.contentType); filterChain.doFilter(servletRequest, servletResponse); } }
web.xml中的配置(注意要放在所有filter的最前面)
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>filter.EncodingFilter</filter-class> <init-param> <param-name>characterEncoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>contentType</param-name> <param-value>text/html;charset=utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Servlet过滤器
最新推荐文章于 2022-05-12 17:29:31 发布