Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29957141
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Java

2009-10-19 11:46:56

通过添加一个或多个过滤器,您可扩展和增强应用程序,且可单独应用过滤器,或以称作过滤器链的系列形式应用过滤器。

从开发人员的角度看,过滤器是一个 Java 类,它实施 中所定义的接口。关键方法是 doFilter,它具有以下特征码:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

下面的图表展示了三个场景中的请求/响应流程:具有一个客户端 (C) 和一个 servlet (S) 但没有过滤器的应用程序,使用一个过滤器 (F) 的同一个应用程序,以及在一个过滤器链中使用两个过滤器(F1 和 F2)的同一个程序。注意,虽然过滤器可以修改请求或响应对象,但是它并不一定要执行该操作。过滤器可以传递对象,而同时保持它未被修改。并且,您在后端无需 servlet 即可使用过滤器 — 您可以通过配置应用程序服务器(或其它容器)将过滤器应用于任何请求。

无过滤器 一个过滤器 两个过滤器链
无过滤器 一个过滤器 (F) 两个过滤器链

除了实施过滤器外,您必须编辑 Web 应用程序部署描述符文件 (web.xml),容器才能找到并调用该过滤器。
我们的WEB容器需要看web.xml才能找到相关的过滤器出来!


FilterAllRequests
mypackage1.FilterOne


FilterAllRequests
/*

跟传统的servlets是一样的配置。指定具体的实施过滤器的类及其映射URL


这里是定义另一个过滤器的 XML 代码。由于在 元素中指定了值,此容器只有在接收到对 /mydocs 目录中的资源的请求时才会应用该过滤器。

...
FilterMyDocs
mypackage1.FilterTwo


FilterMyDocs
/mydocs/*

其中的表示的是 这个过滤器是应用于哪个目录的资源的时候才会有使用到这个过滤器的!


若要定义一个过滤器链,请在配置文件中放置两个或更多个过滤器声明,并为 元素提供合适的值。例如,如以下代码所示,当容器接收到类似于 等资源的请求时,它将应用 FilterAllRequestsFilterMyDocs。如果两个或更多个过滤器应用到同一个资源,则按照它们在配置文件中显示的先后次序调用它们。

...

FilterAllRequests
mypackage1.FilterOne


FilterAllRequests
/*




FilterMyDocs
mypackage1.FilterTwo


FilterMyDocs
/mydocs/*


像这样的话会有两个过滤器处理的!

/* 表示的是全部的URL的。肯定要用到了


...

现在来看几个实例整理一下:



过滤器说白了比如说验证用户是否登录。在ASP中得一个一个页面去验证麻烦。

如果很多页面,这样一个个去判断是很繁琐的一件事啊,想请教下能否向JAVA中实现那样,写个专门的类,然后再在配制文件中进行配制就可以了,在整个程序中都有效啦


阅读(1093) | 评论(0) | 转发(0) |
0

上一篇:GOOGLE站内搜索

下一篇:五个常用的过滤器

给主人留下些什么吧!~~