原文地址:http://wenku.baidu.com/view/b6f45f65f5335a8102d220db.html
1:Servletf过虑器基础:
Servlet过滤器是Servlet的一种特殊用法,主要用来完成一些通用的操作。比如编码的过滤,
判断用户的登陆状态等等。Servlet过虑的适用场合:
A. 认证过滤
B. 登录和审核过滤
C. 图像转换过滤
D. 数据压缩过滤
E. 加密过滤
F. 令牌过滤
G. 资源访问触发事件过滤
Servlet过滤器接口的构成:
所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:
方法说明
init(FilterConfig cfg)这是Servlet过滤器的初始化方法,性质等同与servlet的init方法。
doFilter(ServletRequest,ServletResponse,FilterChain)完成实际的过滤操作,当请求访问过滤器
关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器
Destroy()Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器
占用的资源。性质等同与servlet的destory()方法。
Servlet过滤器创建步骤:
A. 实现javax.servlet.Filter接口的servlet类
B. 实现init方法,读取过滤器的初始化函数。
C. 实现doFilter方法。完成对请求或过滤的响应
D. 调用FilterChain接口对像的doFilter方法,向后续的过滤器传递请求或响应
E. 在web.xml中配置Filter
2.使用过滤器处理中文问题
3.使用过滤器认证用户:
每个过滤器也可以配置初始化参数,可以将不需要过滤的地址配置到这个Filter的配置参数中,过滤时,如果请求地址在配置参数中,则放行,这样避免了在程序中硬编码。每个Filter中初始化时,都可以得到配置对象,在Filter中配置二个不需要过滤的地址,一个是登陆页面,一个是执行登陆认证的Servlet
示例:
Public class EncodingFilter implements Filter{
Private static String encoding;
Public void destroy(){
System.out.println(“过滤器被销毁!!!!!”);//WEB应用被卸载时,过滤器即被销毁。
}
Public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException{
System.out.println(“step1^^^^^^^^^^^^^);
request.setCharacterEncoding(encoding);
chain.doFilter(request,response);
System.out.println(“step2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^”);
}
Public void init(FilterConfig config)throws ServletException{
System.out.println(“过滤器被加载!!!!!”);//WEB应用被加载时,过滤器即被加载
encoding= config.getInitParameter(“encoding”);
}
}
2.过滤器的配置:在web.xml中
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.test.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-name>gbk</param-name>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>