部署描述文件web.xml解析(五) 声明过滤器

来源:互联网 发布:unity3d awake 编辑:程序博客网 时间:2024/06/05 05:21

简介

过滤器的基本概念是拦截和修改servlet或JSP页面的输入请求和输出响应。本文将介绍如何在web.xml中配置过滤器。

过滤器实例

在一个servlet或JSP页面执行之前,第一个关联的过滤器的doFilter方法率先执行。该过滤器调用FilterChain对象doFilter方法之后,下一个过滤器将被执行。如果没有其它过滤器,就执行servlet或JSP页面。过滤器已经完全访问进入ServletRequest对象,所以他们可以查找客户端的主机名,查找进入的cookie等。为访问servlet或者JSP页面的输出,过滤器可以将响应对象封装到一个替代的对象中,如将内容输出集中到缓存中。在调用FilterChain对象的doFilter方法之后,这个过滤器可以检查缓存,并在必要时修改,然后将输出到客户端。

package coreservlets;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;/** * Simple filter that prints a report on the standard output whenever the * associated servlet or JSP page is accessed. */public class ReportFilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws ServletException, IOException {HttpServletRequest req = (HttpServletRequest) request;System.out.println(req.getRemoteHost() + " tried to access "+ req.getRequestURL() + " on " + new Date() + ".");chain.doFilter(request, response);}public void init(FilterConfig config) throws ServletException {}public void destroy() {}}

声明过滤器

一旦创建好了过滤器,就需要在web.xml文件中使用filter元素和filter-name(任意名)、filter-class(完全限定类名)、可选的init-param子元素来声明过滤器。
<!-- Register the name "Reporter" for ReportFilter. --><filter><filter-name>Reporter</filter-name><filter-class>coreservlets.ReportFilter</filter-class></filter>
一旦为过滤器命名,就可以通过filter-mapping元素将它与一个或多个servlet或JSP页面相关联。此时有两个选择:
第一种,可以使用filter-name和servlet-name子元素将过滤器与一个指定的servlet名(必须在同一个web.xml文件中使用servlet元素声明)相关联。

<!-- Apply the Reporter filter to the servlet named "PageName".       --><filter-mapping><filter-name>Reporter</filter-name><servlet-name>SomeServletName</servlet-name></filter-mapping>
第二种,可以使用filter-name和url-pattern子元素与一组servlet,JSP页面或静态内容相管理。
<!-- Apply the Reporter filter to the servlet named "PageName".       --><filter-mapping><filter-name>Reporter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

参考资料

1.  Servlet与JSP核心编程 卷2

原创粉丝点击