过滤器(Filter)

本文介绍了Servlet过滤器的基本概念及其作用,包括预处理请求和后处理响应等。通过一个具体示例——时间记录过滤器,展示了如何实现过滤器,并在web.xml中进行配置。

在书上看到总结很好,和大家分享一下,很多朋友问

一个过滤器是一个可以传送请求或者修改相应的对象。

过滤器并不是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>

大家参考一下

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值