Servlet 中的过滤器 Filter 是实现了 javax.servlet.Filter 接口的服务器端程序,主要的用途是过
滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在 web.xml 文件配置好要拦截
的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统
一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该
页面等等工作。它是随你的 web 应用启动而启动的,只初始化一次,以后就可以拦截相关请
求,只有当你的 web 应用停止或重新部署的时候才销毁,以下通过过滤编码的代码示例来了
解它的使用:
1: MyCharsetFilter.java 编码过滤器
2: package ...;
3: import ...;
4:
5: // 主要目的:过滤字符编码;其次,做一些应用逻辑判断等.
6: // Filter 跟 web 应用一起启动
7: // 当 web 应用重新启动或销毁时,Filter 也被销毁
8: public class MyCharsetFilter implements Filter {
9: private FilterConfig config = null;
10:
11: public void destroy() {
12: System.out.println("MyCharsetFilter 准备销毁...");
13: }
14:
15: public void doFilter(ServletRequest arg0, ServletResponse arg1,
16: FilterChain chain) throws IOException, ServletException {
17: // 强制类型转换
18: HttpServletRequest request = (HttpServletRequest)arg0;
19: HttpServletResponse response = (HttpServletResponse)arg1;
20: // 获取 web.xm 设置的编码集,设置到 Request、Response 中
21: request.setCharacterEncoding(config.getInitParameter("charset"));
22: response.setContentType(config.getInitParameter("contentType"));
23: response.setCharacterEncoding(config.getInitParameter("charset"));
24:
25: // 将请求转发到目的地
26: chain.doFilter(request, response);
27: }
28:
29: public void init(FilterConfig arg0) throws ServletException {
30: this.config = arg0;
31: System.out.println("MyCharsetFilter 初始化...");
32: }
33: }
以下是 MyCharsetFilter.java 在 web.xml 中配置:
1: <filter>
2: <filter-name>filter</filter-name>
3: <filter-class>dc.gz.filters.MyCharsetFilter</filter-class>