`

Servlet中的Filter技术

阅读更多

 Filter 技术是servlet 2.3 新增加的功能.servlet2.3是sun公司与2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则.由于众多的参与者的共同努力,servlet2.3比以往功能都强大了许多,而且性能也有了大幅提高.
它新增加的功能包括:
1. 应用程序生命周期事件控制;
2. 新的国际化;
3. 澄清了类的装载规则;
4. 新的错误及安全属性;
5. 不赞成使用HttpUtils 类;
6. 各种有用的方法;
7. 阐明并扩展了几个servlet DTD;
8. filter功能.
其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).一个filter 包括:
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查servlet request;
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获.
你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用.几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等.
一个filter必须实现javax.servlet.Filter接口并定义三个方法:
1.void setFilterConfig(FilterConfig config) //设置filter 的配置对象;
2. FilterConfig getFilterConfig() //返回filter的配置对象;
3. void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) //执行filter 的工作.
服务器每次只调用setFilterConfig方法一次准备filter 的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置 FilterConfig为空来指明filter已经终结.
每一个filter从doFilter()方法中得到当前的request及response.在这个方法里,可以进行任何的针对request及 response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个 filter在doFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下一个filter.
一个filter可以包装request 或response以改变几个方法和提供用户定制的属性.Api2.3提供了HttpServletRequestWrapper 和HttpServletResponseWrapper来实现.它们能分派最初的request和response.如果要改变一个方法的特性,必须继承wapper和重写方法.下面是一段简单的日志filter用来记录所有request的持续时间.

 

 

servlet的filter接口的实现类

public class LogFilter implements Filter {
          FilterConfig config;

          public void setFilterConfig(FilterConfig config) {
                    this.config = config;
          }   

           public FilterConfig getFilterConfig() {
                     return config;
           }

            public void doFilter(ServletRequest req,
                      ServletResponse res, FilterChain chain) {
                      ServletContext context = getFilterConfig().getServletContext();
                      long bef = System.currentTimeMillis();

 

                      // no chain parameter needed here 。把控制权交给下一个filter,否则请求不会响应。

                      chain.doFilter(req, res);

 


                      long aft = System.currentTimeMillis();
                      context.log("Request to " + req.getRequestURI()
                      + ": " + (aft-bef));
           }
}

 

web.xml中的配置

<!-- 采用过滤器对已经迁出的纳税户进行过滤 -->
<filter>
      <filter-name>LogFilter</filter-name> <!-- 过滤器名字,随自己定义 -->
      <filter-class>com.common.filter.LogFilter</filter-class> <!--  实现了过滤器接口的类  -->
 </filter>
 <filter-mapping>
      <filter-name>LogFilter</filter-name> <!-- 过滤器名字,与上面定义的保持一致 -->
      <url-pattern>/*</url-pattern> <!-- 过滤的url -->
 </filter-mapping>

分享到:
评论

相关推荐

    servlet+filter+listener 详解

    Filter 为过滤器, WEB 开发中通过 Filter 技术,对 web 服务器管理的所有 web 资源进行拦截,从而实现一些特殊的功能。 实现 Filter 需要: * 实现 Filter 接口,并实现其 doFilter 方法。 * 在 web.xml 文件中...

    简单的servlet+Filter的例子

    Servlet和Filter是Java Web开发中的两个重要概念,它们在构建动态Web应用程序中起着关键作用。Servlet是一种Java类,用于扩展服务器的功能,处理客户端(如浏览器)的请求,并向其发送响应。而Filter则是在Servlet...

    jsp,servlet,filter温故知新

    在Web开发领域,Java技术是不可或缺的一部分,其中JSP(JavaServer Pages)、Servlet和Filter是三个核心概念。本文将深入探讨这些技术,帮助开发者温故知新,理解它们的功能、工作原理以及如何在实际项目中应用。 #...

    Spring 管理filter 和servlet

    ### Spring管理Filter与Servlet详解 在现代Web应用开发中,Spring框架因其强大的依赖...此外,Spring提供的Filter和Servlet代理类,进一步简化了集成过程,使开发者可以专注于业务逻辑的实现,而非底层的技术细节。

    servlet过滤器技术实例,

    在本实例中,我们将深入探讨Servlet过滤器(Filter)的使用和实现,以及它在实际应用中的重要性。 一、Servlet过滤器简介 Servlet过滤器遵循Java Servlet规范,通过实现`javax.servlet.Filter`接口来创建自定义过滤...

    jsp+servlet+filter+javabean 权限实例代码

    在本文中,我们将深入探讨如何使用JSP、Servlet、Filter和JavaBean来实现一个权限管理的实例。这些技术是构建动态Web应用的核心组件,尤其是在处理用户登录和权限控制时。 首先,`JSP (JavaServer Pages)`是一种...

    Servlet与jsp与Filter的使用

    4. **在web.xml中配置Filter**:在部署描述符文件(web.xml)中定义Filter并将其映射到特定的servlet或JSP页面。 5. **禁用默认Servlet**:为了防止用户绕过Filter直接访问资源,需要确保默认Servlet不会暴露未经...

    jsp servlet中的过滤器Filter配置总结

    在Java Web开发中,JSP和Servlet是两个重要的技术,它们常常被用来构建动态Web应用程序。而Filter(过滤器)是Servlet API的一部分,它提供了一种机制,可以在请求到达目标资源之前或之后对请求和响应进行拦截处理。...

    Servlet实验报告.pdf

    2. destory() 方法:在 Servlet 生命周期中最后一个被调用的方法,用于释放 Servlet 占用的资源。 3. doGet() 方法:处理 GET 请求,用于处理客户端的 GET 请求。 4. doPost() 方法:处理 POST 请求,用于处理客户端...

    Servlet Jsp 技术概述

    Servlet和JSP(JavaServer Pages)是Java Web开发中的核心技术,用于构建动态Web应用程序。Servlet是一种Java编程接口,用于扩展服务器的功能,而JSP则是一种基于Java的动态网页技术,它将HTML、XML或其他标记语言与...

    Servlet技术入门教学

    Filter可以在请求到达Servlet之前对其进行拦截和修改,而Listener则可以监听Web应用中的特定事件,如session创建或销毁。 9. **MVC框架与Servlet**: 虽然Servlet可以单独使用,但现代Web开发通常使用MVC(Model-...

    Servlet中文API文档 servlet

    Filter通过实现javax.servlet.Filter接口并配置在web.xml中。 9. **监听器Listener**:Servlet API中的监听器(如ServletRequestListener、ServletContextListener)可以在特定事件(如请求到达、应用启动/停止)...

    学生信息管理系统(jsp,Junit,servlet,filter,sql)

    本系统采用JavaWeb技术栈进行开发,具体包括JSP(JavaServer Pages)、Servlet、JUnit、Filter和SQL等关键组件,下面将对这些技术及其在系统中的作用进行详细阐述。 首先,JSP是JavaWeb开发中的视图层技术,用于...

    servlet_filter_listener

    而`myblog_v2`可能是一个示例项目,展示了如何在实际的博客系统中运用这些技术,比如使用Servlet处理用户请求,Filter实现权限控制,Listener监控用户会话状态。 在实际开发中,`Servlet`通常用于处理业务逻辑,...

    Servlet_Filter

    Servlet和Filter是Java Web开发中的两个重要概念,它们在构建动态Web应用程序中起着至关重要的作用。这篇博客文章“Servlet_Filter”可能详细介绍了如何使用Servlet和Filter进行Web开发,以及它们之间的关系和工作...

    servlet核心技术

    过滤器(Filter)是Servlet技术的另一大特色,它可以在请求到达Servlet之前或Servlet响应之后进行拦截和处理。通过实现`Filter`接口并配置在`web.xml`或使用`@WebFilter`注解,我们可以实现如登录检查、字符编码转换...

    Servlet API中文文档

    Servlet API中文文档是Java Web开发中的重要参考资料,它详尽地解释了Servlet技术的各种接口、类和方法,为开发者提供了全面的理解和使用指南。Servlet API是J2EE平台的一部分,主要用于构建动态Web应用程序,它是...

    servlet与filter实现登录认证

    在Java Web开发中,Servlet和Filter是两种非常重要的组件,它们在构建动态Web应用程序时起着关键作用。本文将详细探讨如何使用Servlet和Filter来实现用户登录认证。 Servlet是一种Java编程语言编写的服务器端程序,...

    Servlet-2.4技术文档 英文

    ### Servlet 2.4 技术知识点解析 #### 核心概念:Servlet 与 Java Servlet 规范 Servlet 是一种服务器端的编程组件,用于扩展Web服务器的能力,处理HTTP请求并生成动态网页内容。Servlet 由 Java 开发,运行在支持...

Global site tag (gtag.js) - Google Analytics