Java中Servlet过滤器的实现



简介

Servlet过滤器能够在调用请求的Servlet之前检查Request对象,修改Request Header和Request对象本身的内容;在Servlet调用之后检查Response对象,修改Response Header和Response内容。Servlet过滤器可以过滤的资源可以是Servlet、JSP和HTML。其工作过程如下图:


过滤器的应用

权限检查:根据请求过滤非法用户。

记录日志:记录指定的日志信息。

解码:对非标准的请求解码。

解析XML:和XSLT结合生成的HTML。

设置字符集:解决正文乱码问题。


过滤器的实现

一、实现接口

javax.servlet.Filter;

二、实现3个方法

1、public void init(FilterConfig config);初始化方法,由容器调用进行初始化,它在第一次被访问时执行且只执行一次。通过该方法可以获得在web.xml中指定的初始化参数。

2、public void doFilter(ServletRequest,request,ServletResponse response,FilterChain chain);过滤函数,表示过滤器过滤时的动作,其中FilterChain对象提供了后续过滤器所要调用的信息。

3、public void destroy();消亡方法,在停止使用过滤器前,由容器调用过滤器的该方法,完成必要的清除和释放资源的工作。


实例:解决中文乱码

1、设计一个测试页面,从表单输入正文信息提交给一个Servlet。文件名:filterForm.jsp

2、创建接受数据的Servlet。文件名:DealWithServlet.java

3、建立过滤器。文件名:EncodingFilter.java

4、在web.xml中注册配置过滤器

说明:<filter>定义过滤器,有两个子元素<filter-name>,<filter-class>分别用来设定过滤器的名字和类路径。<filter-mapping>配置过滤器的映射,其中的<filter-name>设定过滤器名字,<url-pattern>用于指定过滤模式。如:过滤所有资源<url-pattern>/*</url-pattern>。