`
ahwoniu7
  • 浏览: 24569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Servlet中的doFilter方法

 
阅读更多
本文介绍Servlet中的doFilter方法,以及介绍过滤器 API 包含 3 个简单的接口,它们整洁地嵌套在 javax.servlet 包中。
编写实现类的程序
过滤器 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()方法,以便能够执行任何必需的清理代码。[size=large][/size]
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Servlet中的Filter

    在doFilter()方法中,通过调用FilterChain的doFilter()方法,继续执行下一个Filter或传递请求给Servlet。 6. **web.xml配置示例** - 例子中设置了两个Filter:一个用于设置字符编码(setCharacterEncoding),另一...

    dofilter过滤器

    在Java Web开发中,`doFilter`方法是Servlet过滤器的核心,它负责处理所有通过过滤器的请求和响应。过滤器(Filter)是Java Servlet技术中的一项重要功能,允许开发者在请求到达目标资源(如Servlet或JSP页面)之前...

    Servlet过滤器使用

    Servlet过滤器,主要配置了中文乱码及未登陆验证过滤器。 代码简单明了,易学。 过滤器实现类 1、Filter接口:所有的... Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源。

    Servlet中文API文档

    `doFilter()`方法是Filter的核心,用于拦截请求和响应。 8. **监听器Listener**:Servlet API提供了一系列的事件监听器接口,如`ServletRequestListener`,`SessionListener`等,它们可以在特定的Servlet事件(如...

    Servlet API 中文参考 chm版.rar

    它们通过`<filter>`和`<filter-mapping>`元素在`web.xml`中配置,并使用`doFilter()`方法执行过滤逻辑。 7. **监听器(Listener)**: 监听器是实现特定Servlet接口的类,可以监听Web应用中的各种事件,例如会话创建...

    简单使用Filter模拟Servlet中的过滤器

    并覆盖doFilter方法,这个方法是Filter的核心,它接受ServletRequest和ServletResponse对象作为参数,以及FilterChain对象,通过调用FilterChain的doFilter方法来传递请求到下一个过滤器或目标Servlet。 在Filter的...

    servlet与jsp中文乱码处理

    - **处理乱码**:在`doFilter`方法中,对请求和响应进行编码设置。 ```java chain.doFilter(request, new HttpServletResponseWrapper(response) { @Override public ServletOutputStream getOutputStream() ...

    servlet+filter+listener 详解

    Servlet 的生命周期通过 javax.servlet.Servlet 接口中的 init()、service() 和 destroy() 方法来表示。 * 加载和实例化 * 初始化,调用 init() * 请求处理,调用 service() * 结束,销毁实例,调用 destroy() ...

    javaEE servlet-api

    `javax.servlet.Filter`接口定义了`doFilter()`方法,这使得我们可以实现如认证、日志记录、数据过滤等功能。 在描述中提到的`servlet-api.jar`文件是Servlet API的实现库,包含了所有Servlet API的类和接口。开发...

    Servlet基础知识总结

    初始化参数可以在`web.xml`中通过`<init-param>`元素配置,它们会被传递给Servlet实例中的`init()`方法。这些参数通常用于配置Servlet的行为,例如设置数据库连接信息等。 ```xml <servlet> <servlet-name>...

    超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题(转)

    自定义的Filter需要实现`javax.servlet.Filter`接口,并重写`doFilter`方法。在这个方法中,首先检查请求的编码,如果没有设定或者不是预期的编码(如UTF-8),则设定正确的编码。这样,无论请求是GET还是POST,...

    Java Servlet中文说明文档

    通过`doFilter()`方法实现过滤逻辑,并在web.xml中配置过滤器链。 六、监听器(Listener) 监听器用于监听Servlet容器中的特定事件,如Session的创建、销毁,或者Context的初始化、销毁等。常见的监听器接口有`...

    解决servlet中文乱码问题1

    在部分内容中,解决servlet中文乱码问题1的方法可以分为两个方面: ① 在页面输入中文,请求页面后不出现乱码的方法是,确保contentType和pageEncoding保持一致为UTF-8,并且浏览器显示的字符编码也为UTF-8。这样...

    Struts2中Servlet的配置

    在`doFilter()`方法中,如果没有匹配到预设的Servlet,`FilterChain`对象的`doFilter()`方法会被调用,这使得请求能按照过滤器链的顺序继续传递,直到到达最终的目标资源。 综上所述,Struts2提供了多种方式来与...

    Servlet过滤器的简单使用源码+文档

    2. `doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`:这是过滤器的主要工作方法。`request`和`response`对象分别代表了HTTP请求和响应,`chain`对象则代表了过滤链。在调用`chain...

    servlet过滤器Filter入门

    doFilter 方法的参数包括 ServletRequest 对象、ServletResponse 对象和 FilterChain 对象。 * ServletRequest 对象提供了对进入的信息(包括表单数据、cookie 和 HTTP 请求头)的完全访问。 * ServletResponse ...

    javax.servlet源码

    10. **FilterChain接口**:在过滤器链中,代表后续过滤器和最终的目标Servlet,调用`doFilter()`方法可以按顺序执行过滤器链。 11. **FilterConfig接口**:类似于ServletConfig,提供了过滤器的配置信息。 通过...

    servlet-ppt java web相关servlet课件

    - 通过实现`Filter`接口,定义`doFilter()`方法,并在`web.xml`中配置过滤规则。 8. **监听器(Listener)**: - 监听器可以监听Web应用程序中的特定事件,如会话创建、销毁等。 - 实现如`HttpSessionListener`...

    基于servlet的过滤器

    2. 在`doFilter()`方法中,获取当前的计数值,如果不存在则初始化为0。 3. 增加计数值,然后将更新后的计数存储回去。 4. 通过`chain.doFilter(request, response);`将请求传递给下一个过滤器或目标Servlet,保证...

Global site tag (gtag.js) - Google Analytics