JAVAEE filter总结
1. 为什么需要filter?
filter相当于客户端和服务器端之间的一扇门,就像保安一样。作用:比如说设置字符集和权限控制等等。
2. 细节;
* . 只能对post请求起作用
* .可以使用多种匹配模式:
*.jsp (*.后面带后缀名) /servlet/* (某个路径下的所有请求) /* (匹配所有)
* 注意:当客户端发出请求到服务器端才会被拦截(假如从servlet转发到另一个jsp页面,这个时候不会被拦截)
3. java代码:
package com.huxin.filter; import java.io.IOException; import javax.servlet.*; public class SetCharacterEncodingFilter implements Filter { private String encoding =""; public void destroy() {} public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding(encoding); filterChain.doFilter(servletRequest, servletResponse); } public void init(FilterConfig filterConfig) throws ServletException { this.encoding = filterConfig.getInitParameter("encoding"); } }
<filter> <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class>com.huxin.filter.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>SetCharacterEncodingFilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
关于filter的生命周期问题:
当tomcat容器启动的时候,会加载这个filter,并且调用init()方法,给encoding赋初值。当生命周期结束,就调用destroy()的方法。
原理猜想:
应该也是一个递归实现的,类似于struts2的拦截器。