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

简介

过滤器的基本概念是拦截和修改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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值