C.部署Servlet filter
把过滤器类和其他web组件类包括在一起 并像通常所做的那样把web.xml文件(连同filter定义和filter mapping声明)放进web应用程序结构中即可 servlet container将处理之后的其他所有事情
Servlet2.4中的新特性
< html >
< body >
< jsp:forward page ="/Thank.html" />
</ body >
</ html >
JSP将来自client的request forward到Thank.html
< body >
Thank you for coming Filter worlds < br >
</ body >
</ html >
将这两个程序和上面的过滤器一起打包部署并运行Test.jsp 我们将发现控制台只有一行而不是两行输出:
===============
Total elapsed time is: 0.0 seconds.
===============
因为在Servlet2.3规范中的过滤器只能过滤web客户机和其所访问的指定web资源之间的内容 如果该资源将请求调度给其他web资源(这里是Thank.html) 就不能向幕后委托的任何请求应用过滤器
在2.4规范中消除了这个限制 通过增强filter和request dispatcher的配合 过滤器可以根据请求分发器(request dispatcher)所使用的方法有条件地对web请求请求进行过滤:
只有当request直接来自客户 过滤器才生效 对应为REQUEST条件
只有当request被一个请求分发器使用forward()方法转到一个web构件时(采用或定义) 对应为FORWARD条件
只有当request被一个请求分发器使用include()方法转到一个web构件时(采用或定义) 对应为INCLUDE条件
只有当request被一个请求分发器使用"错误信息页"机制方法转到一个web构件时 对应为ERROR条件
4种条件的组合使用 web.xml:
< filter-name > Page Timers </ filter-name >
< filter-class > cc.ejb.examples.PageTimerFilter </ filter-class >
</ filter >
< filter-mapping >
< filter-name > Page Timers </ filter-name >
< url-pattern > /* </ url-pattern >
< dispatcher > REQUEST </ dispatcher >
< dispatcher > FORWARD </ dispatcher >
</ filter-mapping >
再次部署运行这个Web Application 结果:
===============
Total elapsed time is: 0.0 seconds.
===============
11:17:51,165 INFO [Engine] StandardContext[/Test]
===============
Total elapsed time is: 10.0 seconds.
===============