快速业务通道

J2EE探索者: 使用Java Servlets 2.4来执行过滤 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
onse response, FilterChain chain )     throws IOException, ServletException {     Date startTime, endTime;     double totalTime;     startTime = new Date();     // Forward the request to the next resource in the chain     chain.doFilter(request, wrapper);     // -- Process the response -- \\     // Calculate the difference between the start time and end time     endTime = new Date();     totalTime = endTime.getTime() - startTime.getTime();     totalTime = totalTime / 1000; //Convert from milliseconds to seconds     StringWriter sw = new StringWriter();     PrintWriter writer = new PrintWriter(sw);     writer.println();     writer.println("===============");     writer.println("Total elapsed time is: " + totalTime + " seconds." );     writer.println("===============");     // Log the resulting string     writer.flush();     filterConfig.getServletContext().       log(sw.getBuffer().toString());    } }

这个过滤器的生命周期很简单,不管怎样,我们还是研究一下它吧:

J2EE探索者: 使用Java Servlets 2.4来执行过滤(3)

时间:2011-04-11 IBM Kyle Gabhart

初始化

当容器第一次加载该过滤器时, init() 方法将被调用。该类在这个方法中包含了一个 指向 FilterConfig 对象的引用。我们的过滤器实际上并不需要这样做,因为其中没有使 用初始化信息,这里只是出于演示的目的。

过滤

过滤器的大多数时间都消耗在这里。 doFilter() 方法被容器调用,同时传入分别指向 这个请求/响应链中的 ServletRequest 、 ServletResponse 和 FilterChain 对象的引用 。然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源(通过调用 FilterChain 对象引用上的 doFilter() 方法),之后在处理控制权返回该过滤器时处理 响应。

析构

容器紧跟在垃圾收集之前调用 destroy() 方法,以便能够执行任何必需的清理代码。

2. 配置 Servlet 过滤器

过滤器通过 web.xml 文件中的两个 XML 标签来声明。 <filter> 标签定义过滤 器的名称,并且声明实现类和 init() 参数。 <filter-mapping> 标签将过滤器与 servlet 或 URL 模式相关联。

清单 2 摘自一个 web.xml 文件,它展示了如何声明过滤器的包含关系:

清单 2. 在 web.xml 中声明一个过滤器

<filter>    <filter-name>Page Request Timer</filter-name>    <filter-class>TimeTrackFilter</filter-class> </filter> <filter-mapping>    <filter-name>Page Request Timer</filter-name>    <servlet-name>Main Servlet</servlet-name> </filter-mapping> <servlet>    <servlet-name>Main Servlet</servlet-name>    <servlet-class>MainServlet</servlet-class> </servlet> <servlet-mapping>    <servlet-name>Main Servlet</servlet-name>    <url-pattern>/*</url-pattern> </servlet-mapping>

上面的代码示例声明了一个过滤器("Page Request Timer"),并把它映射 到一个 servlet("Main Servlet")。然后为该 servlet 定义了一个映射,以 便把每个请求(由通配符指定)都发送到该 servlet。这是控制器组件的典型映射声明。 您应该注意这些声明的顺序

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号