Servlet中的doFilter方法
来源:互联网 发布:数据库第四版课后答案 编辑:程序博客网 时间:2024/06/08 11:05
编写实现类的程序
过滤器 API 包含 3 个简单的接口,它们整洁地嵌套在 javax.servlet 包中。那 3 个接口分别是 Filter 、Filter Chain 和 Filter Config。从编程的角度看,过滤器类将实现 Filter 接口,然后使用这个过滤器类中的 Filter Chain 和 Filter Config 接口。该过滤器类的一个引用将传递给 Filter Chain 对象,以允许过滤器把控制权传递给链中的下一个资源。Filter Config 对象将由容器提供给过滤器,以允许访问该过滤器的初始化数据。
为了与我们的三步模式保持一致,过滤器必须运用三个方法,以便完全实现 Filter 接口:
init():这个方法在容器实例化过滤器时被调用,它主要设计用于使过滤器为处理做准备。该方法接受一个 Filter Config 类型的对象作为输入。
doFilter ():与 servlet 拥有一个 service() 方法(这个方法又调用 doPost() 或者 doGet())来处理请求一样,过滤器拥有单个用于处理请求和响应的方法——doFilter方法。这个方法接受三个输入参数:一个 Servlet Request、response 和一个 Filter Chain 对象。
destroy():正如您想像的那样,这个方法执行任何清理操作,这些操作可能需要在自动垃圾收集之前进行。
清单 1 展示了一个非常简单的过滤器,它跟踪满足一个客户机的 Web 请求所花的大致时间。
清单 1. 一个过滤器类实现
- import javax.servlet.*;
- import java.util.*;
- import java.io.*;
- public class TimeTrackFilter implements Filter {
- private FilterConfig filterConfig = null;
- public void init(FilterConfig filterConfig) throws ServletException {
- this.filterConfig = filterConfig;
- }
- public void destroy() {
- this.filterConfig = null;
- }
- public void doFilter( ServletRequest request, ServletResponse 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();
- totalTimetotalTime = 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());
- }
- }
这个过滤器的生命周期很简单,不管怎样,我们还是研究一下它吧:
初始化
当容器第一次加载该过滤器时,init() 方法将被调用。该类在这个方法中包含了一个指向 Filter Config 对象的引用。我们的过滤器实际上并不需要这样做,因为其中没有使用初始化信息,这里只是出于演示的目的。
过滤
过滤器的大多数时间都消耗在这里。doFilter方法被容器调用,同时传入分别指向这个请求/响应链中的 Servlet Request、Servlet Response 和 Filter Chain 对象的引用。然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源(通过调用 Filter Chain 对象引用上的 doFilter方法),之后在处理控制权返回该过滤器时处理响应。
析构
容器紧跟在垃圾收集之前调用 destroy()方法,以便能够执行任何必需的清理代码。
- Servlet中的doFilter方法
- Java中的过滤器doFilter里的chain.doFilter()函数理解
- Java filter中的chain.doFilter详解
- 过滤器中的chain.doFilter(request,response)
- servlet中的init() 方法
- servlet中的配置方法
- servlet中的service方法
- servlet中的三个方法
- Servlet中的service方法
- 在doFilter方法中无法注入set方法 解决办法
- 【Servlet】Servlet中的两种跳转方法
- doFilter的代码和Jsp中的嵌入代码执行顺序
- 浅谈filter中的chain.doFilter(request, response)的作用
- Servlet中的两个init()方法
- 关于servlet生命周期中的方法
- StandardWrapper中的加载servlet方法
- servlet中的service()方法
- servlet中的两个init方法
- Forget to Begin
- Eclipse3.7 配置PHP、Xampp
- WebKit – WebKit Major Objects
- 日志系统log4cplus的配置与使用
- 目标检测的图像特征提取之(三)Haar特征
- Servlet中的doFilter方法
- MATLAB 读取视频帧
- web开发页面调试+firefox
- Nginx+tomcat配置集群负载均衡
- W5100E01-AVR (W5100评估板) 演示手册(一)
- 令人吐血的IE JS兼容性问题。。。
- CSDN是你的电脑桌 云脉网是你的床
- 使用MFC 发送消息模拟按钮按下事件
- 数据库操作语句(sql)