`
spring0303
  • 浏览: 26855 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

servlet2.3的过滤器

阅读更多
什么是过滤器, 过滤器不是servlet, 它是一个可以 传送请求 或者 修改响应 的对象, 它是请求到达Servlet前的预处理程序, 以及响应离开Servlet后的后处理程序.

稍微具体点儿说, 过滤器可以:
1. 在一个servlet被调用前 截获 该调用
2. 在一个servlet被调用前 检查 请求
3. 修改 在实际请求中 提供的 请求对象的 请求头 和 请求数据
4. 修改 在实际响应中 提供的 响应对象的 响应头 和 响应数据
5. 在一个servlet被调用之后 截获该调用

一个过滤器 必须实现 java.servlet.filter 接口, 并定义它的三个方法:
1. void init(FilterConfig config) throws ServletException; 在过滤器执行过滤前调用, 设置过滤器的配置对象。

2. void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException; 执行实际的过滤工作。

3. void destroy(); 在过滤器执行过滤后调用。

服务器先调用一次 init 方法为服务准备过滤器, 然后在请求需要使用过滤器的任何时候调用doFilter 方法。 FilterConfig接口检索过滤器名,初始化参数 以及Servlet上下文。

服务器调用 destroy 来指示过滤器已经完成过滤 。

在 doFilter 方法中,过滤器可以对请求对象和响应对象做它想做的一切 。过滤器调用 chain.doFilter() 方法就将控制权传递给下一个过滤器了。不过还没完,精彩的来咯,在这个调用返回后(整个过滤链的执行有点类似算法里面的先递推再回归),在 doFilter 方法的最后可以对 响应对象 做一些其他的事情。如果过滤器想终止请求的处理,或者想获得对响应的完全控制,就可以不调用下一个过滤器!

好啦,结合例子来加深理解吧:

[例1]记录请求的持续时间:(原代码取自Tomcat4.0)

public class TimeFilter implements Filter {
  //保存在初始化时才能得到的FilterConfig对象的引用
  //利用它可以检索过滤器名,配置参数,还有所处的Servlet上下文
  private FilterConfig config = null;
  public void init(FilterConfig config)throws ServletException{
    this.config = config;
  }

  public void destroy() {
    config = null; //释放对FilterConfig的引用,以便能被垃圾回收
  }

  public void doFilter(ServetRequest req,ServletResponse rep,FilterChain chain)throws IOException,ServletException {
    long begin = System.currentTimeMillis();//请求到达的时间
    chain.doFilter();
    long end = System.currentTimeMillis();//响应离开Servlet的时间
    String name = "";
    if (req instanceof HttpServletRequest) {
      name = ((HttpServletRequest)req).getRequestURI();
    }
    //私有的FilterConfig引用要派上用场了    
    config.getServletContext.log(name + " : " + (end - begin) + "ms");
  }
}


然后在web.xml文件里面这样配置一下:
<filter>
  <filter-name>timeFilter</filter>
  <filter-class>TimeFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>timeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

上面的配置使过滤器应用于所有对服务器的请求(静态和动态),正是我们需要的“计时过滤器”!如果我们连接一个简单的页面,可能的输出:
2006-10-21 11:53:00 /sprapp/index.html : 10ms







分享到:
评论

相关推荐

    servlet2.3规范中文版.rar

    Servlet 2.3 规范是Java服务器端编程的重要指南,它定义了Servlet API的版本,这个API使得开发者...通过阅读“servlet2.3规范中文版”这本书,开发者可以深入理解Servlet的工作原理和最佳实践,提升Web应用开发能力。

    servlet 2.3 规范

    2. **过滤器(Filter)**:Servlet 2.3引入了Filter接口,允许开发者在请求到达Servlet之前或之后对请求和响应进行拦截和处理。这在URL重写、登录检查、字符编码转换等方面非常有用,增强了应用程序的灵活性和模块化...

    JavaServlet2.3帮助文档

    2. **过滤器(Filter)**:Servlet2.3引入了过滤器概念,这是一个预处理或后处理请求和响应的强大工具。开发者可以定义多个过滤器链,根据需求对请求进行拦截、修改或转发,实现如登录验证、内容编码转换等功能。 3...

    JavaServlet2.3英文帮助文档

    Servlet2.3规范添加了过滤器(Filter)功能,允许开发者在请求到达Servlet之前或之后对请求和响应进行拦截和处理。通过实现`javax.servlet.Filter`接口,开发者可以创建自定义过滤器,实现如数据验证、日志记录、URL...

    servlet 2.3中文规范

    7. **过滤器**:过滤器(Filter)是Servlet 2.3引入的重要特性,可以在请求到达目标Servlet之前或之后进行预处理和后处理,例如实现登录检查、字符编码转换等。 8. **监听器**:监听器(Listener)用于监听特定的...

    servlet2.3 class包

    2. **过滤器(Filter)**:过滤器是一种强大的机制,可以在请求到达Servlet之前或Servlet生成响应之后对请求和响应进行拦截、修改。这使得开发者可以实现如登录验证、内容编码转换等预处理和后处理功能。 3. **监听...

    servlet2.3规范中文版

    - **过滤器(Filter)**:Servlet 2.3引入了过滤器,允许在请求到达Servlet之前或之后进行拦截处理。过滤器可以用于数据验证、登录检查、内容编码转换等多种任务,提高了代码复用和解耦。 - **监听器(Listener)*...

    Java Servlet 帮助文档.chm

    3. **过滤器(Filter)**:Servlet 2.3引入了过滤器接口,允许在请求到达Servlet之前或之后进行预处理和后处理。过滤器可以用于数据转换、安全检查、日志记录等多种用途,增强了Web应用程序的功能和灵活性。 4. **...

    servlet-2-3.jar

    2. **过滤器(Filter)**:过滤器是一个强大的工具,允许在请求到达Servlet之前或响应离开Servlet之后对请求和响应进行拦截和处理。过滤器可以用于内容转换、登录检查、日志记录等多种用途,极大地增强了Web应用的...

    myeclipse5,tomcat5,struts1.2,servlet2.3,jsp2.0网上购物系统

    【标题】"myeclipse5,tomcat5,struts1.2,servlet2.3,jsp2.0网上购物系统" 提供了关于一个基于Java技术的电子商务平台开发的环境和框架信息。这个系统利用了MyEclipse 5作为集成开发环境(IDE),Tomcat 5作为应用...

    web.xml配置汇总(servlet2.3)

    `filter`元素用于注册过滤器,`filter-mapping`则用于将过滤器与URL模式关联起来。 ```xml &lt;!ELEMENT filter (filter-name, filter-class, init-param*)&gt; &lt;!ELEMENT filter-name (#PCDATA)&gt; &lt;!ELEMENT filter-class...

    servlet过滤器详解

    Servlet过滤器,作为Java Servlet规范中的一个重要组成部分,自2.3版本起被引入,主要用于在Servlet容器中对请求和响应进行预处理和后处理。它不直接生成请求或响应,而是作为一个中间件存在,能够在请求到达目标...

    servlet帮助文档 API 英文版(2.3-3.0)

    1. **过滤器(Filter)**:Servlet 2.3引入了过滤器概念,允许开发者在请求到达Servlet之前或之后对请求和响应进行拦截和处理。这在内容编码、登录检查、日志记录等场景中非常有用。 2. **监听器(Listener)**:...

    servlet过滤器Filter入门

    过滤器只在与 servlet 规范 2.3 版兼容的服务器上有作用。如果你的 Web 应用需要支持旧版服务器,就不能使用过滤器。 通过本文,我们可以了解到 Servlet 过滤器 Filter 是一个非常强大且标准的机制,能够提供一种...

    ServletKit2.3帮助文档

    根据Servlet 2.3规范,ServletKit2.3可能包含过滤器功能,允许在请求到达目标Servlet之前对其进行拦截和修改。过滤器可以用于登录检查、内容转换、日志记录等多种用途。 6. **监听器(Listener)** 监听器是自动...

    Servlet过滤器机制分析及应用

    ##### 2.3 Servlet过滤器的生命周期 Servlet过滤器具有自己的生命周期,包括初始化、执行和销毁三个阶段: - **初始化阶段**:当Web容器启动时,会调用过滤器的`init()`方法进行初始化。该方法接收一个`...

    servlet 过滤器及登录页面

    Filter 技术是servlet 2.3 新增加的功能.servlet2.3是sun公司与2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则.由于众多的参与者的共同努力,servlet2.3比以往功能都...

    Servlet过滤器与监听器.doc

    Servlet过滤器在Servlet 2.3规范中被引入,主要用于处理通用任务,如请求预处理、响应后处理,以及诸如编码转换、权限验证、性能监控等。过滤器能够在一个请求到达目标Servlet或JSP页面之前对其进行拦截,并在响应...

Global site tag (gtag.js) - Google Analytics