在书上看到总结很好,和大家分享一下,很多朋友问
一个过滤器是一个可以传送请求或者修改相应的对象。
过滤器并不是Servlet,它们并不实际创建一个请求。它们是请求到达一个Servlet前的预处理程序,在相应离开Servlet后的后处理程序。
一个过滤器能够做如下的工作:
(1)在一个servlet被调用前截获该调用
(2)在一个servlet被调用前检查请求
(3)修改在实际请求中提供了可定制请求对象的请求头和请求数据
(4)修改在实际响应中提供了可定制响应对象的响应头和响应数据
(5)在一个servlet被调用之后截获该调用
一个过滤器实现java.servlet.Filter接口
init: 在过滤器执行service前被调用,以设置过滤器的配置对象
destroy: 在过滤器执行service后被调用
doFilter: 执行实际的过滤工作
下面给个例子,使用这个过滤器来计算执行某个servlet所用时间并记录在日志内:
import java.io.*; import javax.servlet.*; import.servlet.http.*; //实现一个过滤器 public class TimerFilter implements Filter{ private FilterConfig config = null; public void init(FilterConfig config) throws ServletException{ this.config = config; } public void destroy(){ config = null; } public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException{ long before = System.currentTimeMillis(); chain.doFilter(request,response); long after = System.currentTimeMillis(); String name = ""; if(request instanceof HttpServletRequset){ name = ((HttpServletRequest)request).getRequestURI(); } //记录时间 config.getServletContext().log(name+": "+(after-before) + "ms"); } }
使用此过滤器,还需要在web.xml文件中用<filter>标签部署它
<filter> <filter-name>timerFilter</filter-name> <filter-class>TimerFilter</filter-class> </filter>
大家参考一下
本文介绍了Servlet过滤器的基本概念及其作用,包括预处理请求和后处理响应等。通过一个具体示例——时间记录过滤器,展示了如何实现过滤器,并在web.xml中进行配置。
284

被折叠的 条评论
为什么被折叠?



