`
wade6
  • 浏览: 274208 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet学习整理(五)—— filter

 
阅读更多

Filter

Filter是可以重复使用的,用于变换HTTP请求和响应以及头信息中的内容。

 

Filter应用举例

授权Filter

登陆,审核Filter

图像处理Filter

数据压缩Filter

加密Filter

XSL/T Filter

缓存filter

......

 

Filter的创建

实现接口javax.servlet.Filter,并提供一个无参的构造函数即可创建一个filter。

 

Filter的生命周期

在web工程发布后,在请求使引擎访问一个web资源之前,引擎必须定位Filter列表;引擎必须确保为列表中的每一个Filter建立了一个实例,并调用了他们的init(FilterConfig config)方法。

 

部署描述文件中定义的所有filter,仅会在每个JVM容器中产生一个实例。

 

引擎为filter提供了一个FilterConfig类,该类中有ServletContext和一个带有初始化参数的set。

 

当引擎接受一个请求时,引擎就会调用filter列表中第一个filter的doFilter方法,把ServletRequest,ServletResponse和FilterChain作为参数传给它。

 

filter中doFilter方法典型的处理步骤是:

 

1)检查请求头信息

 

2)创建一个实现了ServletRequest或HttpServletRequest的类,去包装request对象,以

便修改请求的头信息或体数据。

 

3)创建一个实现了ServletResponse或HttpServletResponse的类,去包装response对

象,以便修改响应的头信息或体数据。

 

4)filter可以调用链中的下一个实体,下一个实体是另一个filter,如果该filter是列表中最后的一个,则它的下一个实体就是一个目标web资源。如果要调用下一个filter的doFilter方法,把request,和response对象传给FilterChain对象的doFilter方法中就可以了。Filterchain 的doFilter方法是由引擎提供的,引擎在该方法中会定位filter列表中的下一个filter。

filter也可以阻止request继续传递并由自己来完成response。

 

5)在调用chain.doFilter之后,filter可以检测响应的头信息。

 

6)在这些过程中,filter可以抛出异常。当在调用doFilter过程中抛出UnavailableException异常时,引擎重复尝试处理下面的filter chain的方法,如过时后还没请求到filter chain 就会关闭对filter chain的请求。

 

7)当filter是列表中最后一个filter时,它的下一个实体是描述配置文件中filter后面的servlet或其它资源。

 

8)在引擎删除一个Filter之前,引擎必须调用Filter的destroy方法,来释放资源。

 

包装Requests 和Responses

过滤的中心观念是对request或response的包装,在这种模式下,开发者不仅可以改写存在的方法,还可以创建自己的新方法,用于特殊的过滤任务,例如:开发者希望扩展response对象,希望有个更高层次的输出流对象(writer)。

 

为了支持包装模式,引擎不需要保证在整个过滤链中,传递的request和response对象都是同一个对象。

 

 

Filter的环境

Filter的初始参数可以在描述配置文件中用init-params元素来配置,在运行时中,用FilterConfig的getInitParameter和getInitParamesterNames方法得到配置参数。

 

在web应用中配置filters

在部署描述文件中,可以使用<filter>元素来定义一个filter。

  • filter-name:filter名称
  • filter-class:filter类路径
  • init-params:用于初始化参数

如果开发者在部署描述中为一个filter类描述了两个定义,则引擎会创建这个filter类的两个实例。

 

使用<filter-mapping>来定义filter关联的servlet或静态资源,可以使用<servlet-name>来关联一个servlet。

 

例如:

 

<filter-mapping>

<filter-name>Image Filter</filter-name>

<servlet-name>ImageServlet</servlet-name>

</filter-mapping>

 

还可以使用<utl-pattern>;

 

高性能的web容器会缓存filter链,防止每次请求都要重新生成。

 

Filter和RequestDispatcher

2.4的规范中对filter新增了功能,通过配置使filter可以在request dispatcher的forward()及include()之下被调用的能力。

 

Filter的实例

网上非常多,这里就不写了。

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Servlet 3.0新特性——文件上传接口

    Servlet 3.0是Java EE 6规范的一...如果你想要深入了解Servlet 3.0的文件上传功能,可以通过阅读指定的博文链接(已提供但此处未显示)或者查阅相关的Java EE 6文档,进一步学习如何在实际项目中有效利用这些新特性。

    web服务器三大组件servlet、Filter、Listener——浅浅笔记

    Web服务器中的三大组件,即Servlet、Filter和Listener,是构建动态Web应用程序的关键元素。这些组件都是基于Java的,主要用于增强和扩展Web服务器的功能。 Servlet是Java中用于处理HTTP请求的核心组件,它是动态...

    基于JSP+Servlet+JavaBean+Dao开发模式——学生体质管理系统{2018.2的IDEA加8.0的MySQL和9.0.11的Tomcat实现}

    总的来说,这个项目提供了从用户交互到数据库操作的完整流程,展示了Java Web开发的基本技术和实践,对于学习和理解Web应用开发具有很高的参考价值。通过这个案例,开发者可以深入理解JSP、Servlet、JavaBean和DAO...

    Servlet Filter 的单元测试

    Servlet Filter 是Java Servlet API中的一个重要组件,主要用于在Servlet处理请求之前或之后进行拦截处理,例如权限检查、日志记录、内容转换等。进行Servlet Filter的单元测试是确保Filter功能正确性和健壮性的重要...

    Servlet学习笔记(java的Servlet)

    Servlet学习笔记(java的Servlet)。 jsp的学习基础。此笔记可让你5天内学会使用Servlet,可快速入门,也可当手册使用。 更多:http://download.csdn.net/user/daillo/all

    简单的web开发——servlet案例

    总之,"简单的web开发——servlet案例"为初学者提供了一个很好的起点,通过学习和实践,你可以掌握如何使用Servlet构建动态Web应用程序,并逐步熟悉Java Web开发的整体流程。随着经验的增长,你将能够运用更复杂的...

    JSP Servlet 学习笔记 第2版 林信良 随书光盘 共三卷

    JSP Servlet 学习笔记 第2版 林信良 随书光盘 第3卷

    Java_Servlet_API说明文档——中文

    #### 五、Servlet生命周期 - **生命周期定义**:一个Java Servlet的生命周期包括几个关键阶段: - **加载与初始化**:当Servlet第一次被请求时,由Servlet引擎负责加载并初始化。 - **处理请求**:接收到客户端的...

    servlet之Filter使用范例--登陆验证

    在压缩包文件"ServletLearningChapter2_2"中,可能包含了关于Servlet和Filter的更多学习材料,包括代码示例、练习项目等,这将有助于你更深入地理解和掌握这些概念。建议结合这些资源进行实践操作,以巩固理论知识。

    简单的servlet+Filter的例子

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

    Servlet--2.filter

    通过深入学习"Servlet--2.filter",你将能更好地控制和优化Web应用的流程,提高系统的可维护性和安全性。在实际项目中,结合实际需求灵活运用Filter,可以解决许多复杂的问题,如性能优化、安全防护等。

    servlet+filter+listener 详解

    Servlet、Filter、Listener 详解 Servlet 是运行在服务器上的小程序,它可以使任何 Java 应用程序、浏览器或任何设备。Servlet 的客户端可以提出请求并获得该请求的响应。Servlet 在初始化后即驻留内存中,因此每次...

    servlet_filter.rar_Servlet filter_重写filter

    在这个压缩包“servlet_filter.rar”中,我们聚焦于Servlet Filter的重写以及如何利用它来解决乱码问题和过滤敏感字符。 首先,让我们深入理解Servlet Filter的工作原理。Servlet Filter是一个实现了`javax.servlet...

    Spring 管理filter 和servlet

    ### Spring管理Filter与Servlet详解 在现代Web应用开发中,Spring框架因其强大的依赖注入和面向切面编程功能而被广泛采用。特别是在Java EE环境中,如何有效地整合Spring与Servlet、Filter等核心组件,对于构建高...

    JSP&Servlet学习笔记.pdf

    在学习JSP和Servlet时,经常会涉及到一些重要的概念和知识点,例如:会话管理(session管理)、请求分发(request dispatcher)、过滤器(filter)、监听器(listener)、JSP标准标签库(JSTL)以及表达式语言(EL)...

    servlet学习资料大全(教程)

    在Servlet学习中,Filter和Listener也是重要的部分。Filter可以在请求到达Servlet之前对其进行预处理,或者在响应返回客户端之后进行后处理。Listener则监听Web应用中的特定事件,如会话创建、销毁等,提供额外的...

    Servlet中的Filter

    Servlet中的Filter是Java Web开发中的一个重要组件,它主要用于在Servlet处理请求之前或之后对请求和响应进行拦截和处理。Filter不直接处理用户请求,而是通过Filter链的方式串联多个Filter,形成一个处理流程。 1....

    Servlet之Filter深入讲解及实例研究

    Servlet之Filter是Java Web开发中的一个重要概念,它在Servlet规范中扮演着不可或缺的角色。Filter(过滤器)允许开发者在请求到达目标Servlet之前或之后对请求和响应进行处理,提供了诸如数据验证、日志记录、字符...

    Servlet与jsp与Filter的使用

    ### Servlet与JSP与Filter的使用详解 #### 一、Servlet与JSP的基本概念 Servlet是一种Java技术,用于创建动态Web应用程序。它本质上是一个Java类,由Web服务器或应用服务器加载,以响应客户端请求。Servlet可以...

Global site tag (gtag.js) - Google Analytics