`
jguangyou
  • 浏览: 368976 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet过滤器工作原理

 
阅读更多

Servlet过滤器是J2EE Web应用程序级的Java代码组件,是一种类似于Servlet,由容器管理的对象,它能够以声明的方式插人到HTTP请求响应的过程中。它们拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。它是通常封装了一些功能的类,实现了对Web应用程序中的预处理和后期处理逻辑。

过滤器提供一种面向对象的模块化机制,用以将公共任务封装到可插入的组件中。这些组件通过Web部署描述符(web.xml)配置文件来声明,可以方便地添加和删除过滤器,无需改动任何应用程序代码或JSP页面,并由Servlet容器进行动态调用。通过在请求/响应链中使用过滤器,可以对应用程序(而不是以任何方式替代)的Servlet或JSP页面提供的核心处理进行补充,而不会破坏Servlet或JSP页面的功能。由于是纯Java实现,所以Servlet过滤器是跨平台和跨容器可移植的,从而进一步支持了Servler过滤器的模块化和可重用性,使得它们很容易地被部署到任何相容的J2EE环境中。

1 Servlet过滤器体系结构

1.1过滤器工作原理

 



 


 

 

当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户机发回一个响应。

当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。如图1所示:在Servlet2.4规范中,对2.3规范进行了扩展,使得Servlet过滤器可以应用在客户机和Servlet之间,Servlet和Servlet或JSP页面之间,以及各个JSP页面之间。

1.2 Servlet过滤器API

Servlet过滤器API包含了3个接口,它们都在javax.servlet包中,分别是Filter接口、FilterChain接口和FilterConfig接口。

1.2.1 public Interface Filter

所有的过滤器都必须实现Filter接口。该接口定义了init(),doFilter(),destory()三个方法:

⑴public void init(FilterConfig filterConfig)throwsServletException.

当开始使用servlet过滤器服务时,Web容器调用此方法一次,为服务准备过滤器;然后在需要使用过滤器的时候调用doFilter(),传送给此方法的FilterConfig对象,包含servlet过滤器的初始化参数。

⑵public void doFilter(ServletRequest request,ServletRe-sponse response,FilterChain chain)throws java.io.IOException,ServletException.

每个过滤器都接受当前的请求和响应,而FilterChain包含的过滤器则仍然必须被处理。doFilter()方法中,过滤器可以对请求和响应做它想做的一切,通过调用他们的方法收集数据,或者给对象添加新的行为。过滤器通过传送至此方法的FilterChain参数,调用chain.doFilter()将控制权传送给下一个过滤器。当这个调用返回后,过滤器可以在它的doFilter()方法的最后对响应做些其他的工作。如果过滤器想要终止请求的处理或得到对响应的完全控制,则可以不调用下一个过滤器,而将其重定向至其它一些页面。当链中的最后一个过滤器调用chain.doFilter()方法时,将运行最初请求的Servlet。

⑶public void destroy()

一旦doFilter()方法里的所有线程退出或已超时,容器调用此方法。服务器调用destory()以指出过滤器已结束服务,用于释放过滤器占用的资源。

1.2.2 public interface FilterChain

方法public void doFilter(ServletRequest request,Servle-tResponse response)throws java.io.IOException,ServletException是由Servlet容器提供给开发者的,用于对资源请求过滤链的依次调用,通过FilterChain调用过滤链中的下一个过滤器,如果是最后一个过滤器,则下一个就调用目标资源。

1.2.3 public interface FilterConfigFilterConfig接口检索过滤器名、初始化参数以及活动的Servlet上下文。该接口提供了以下4个方法:

⑴public java.lang.String getFilterName()返回web.xml部署文件中定义的该过滤器的名称。

⑵public ServletContext getServletContext()返回调用者所处的servlet上下文。

⑶public java.lang.String getInitParameter(java.lang.Stringname)返回过滤器初始化参数值的字符串形式,当参数不存在时,返回null.name初始化参数名。

⑷public java.util.Enumeration getInitParameterNames()以Enumeration形式返回过滤器所有初始化参数值,如果没有初始化参数,返回为空。

1.3过滤器相关接口工作流程

从编程的角度看,过滤器类将实现Filter接口,然后使用这个过滤器类中的FilterChain和FilterConfig接口。该过滤器类的一个引用将传递给FilterChain对象,以允许过滤器把控制权传递给链中的下一个资源。FilterConfig对象将由容器提供给过滤器,以允许访问该过滤器的初始化数据。详细流程如图2所示。

 


1.4过滤器配置

过滤器通过Web应用程序中的配置描述符web.xml文件中的XML标签来声明,包括两个部分:第一部分是过滤器定义,由元素表示,主要包括和两个必需的子元素和、、、这4个可选的子元素。子元素定义了一个过滤器的名字,指定了由容器载入的实际类,子元素为过滤器实例提供初始化参数。另一部分是对过滤器过滤规则的配置,由元素表示,主要由、和子元素组成。将过滤器映射到一个或多个Servlet,将过滤器映射到一个或多个任意特征的URL的JSP页面。

2 应用实例

从上面分析可知,实现Servlet过滤器,需要两步:第一步开发过滤器,设计一个实现Filter接口的类;第二步通过web.xml配置过滤器,实现过滤器和Servlet、JSP页面之间的映射。以下设计一个简单的IP地址过滤器,根据用户的IP地址进行对网站的访问控制。

⑴过滤器类的设计ipfilter.java

 


注意:chain.doFilter()语句以前的代码用于对客户请求的处理;以后的代码用于对响应进行处理。

⑵配置过滤器

在应用程序Web-INF目录下的web.xml描述符文件中添加以下代码:


3 结束语

Servlet过滤器功能强大,应用广泛,除支持Servlet和JSP页面的基本功能,比如日志记录、性能、安全、会话处理、XSLT转换等外,在J2EE应用程序中使用Java Servlet过滤器转换其输出,以便兼容任何类型客户端也表现出了很好的前景。Servlet过滤器能够侦测到来自使用WAP协议(无线应用协议)的移动客户端的呼叫,并且将答复内容转换成WML(无线标记语言)格式。Servlet过滤器也能检测到来自iMode无线客户的呼叫,并将其转变成cHTML(紧凑HTML)格式等等。因而,深刻理解Servlet过滤器的工作机制,熟练掌握编程技术,在实际的开发过程中,可以不断地发现新的用途,增强组件的可重用性,提高Web应用程序的可维护性。


  • 大小: 19.2 KB
  • 大小: 8 KB
  • 大小: 18.5 KB
  • 大小: 38.5 KB
  • 大小: 18.5 KB
分享到:
评论

相关推荐

    tomcat、struts2、servlet Filter(过滤器) 工作原理

    tomcat、struts2、servlet Filter(过滤器) 工作原理 学习servlet的好资料,懂得工作原理,更容易理解问题.

    第13章使用Servlet过滤器和监听器

    第13章使用Servlet过滤器和监听器,基础知识

    深入解析Java的Servlet过滤器的原理及其应用

    主要介绍了深入解析Java的Servlet过滤器的原理及应用,Java编写的Servlet通常是一个与网页一起作用于浏览器客户端的程序,需要的朋友可以参考下

    Servlet过滤器

    Servlet过滤器的原理,以及具体使用方法,具体实例

    Filter(过滤器)简介和工作原理

    Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。

    过滤器实验

    过滤器的工作原理是:当servlet容器接收到对某个资源的请求,它要检查是否有过滤器与之关联。如果有过滤器与该资源关联,servlet容器将把该请求发送给过滤器。

    JDBC及Servlet实验

    Javaee实习包含详细代码,实验步骤,学习Servlet的编写、使用JDBC访问数据库;Servlet及过滤器,包含配置截图

    Struts2的工作原理和流程

    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,...

    《Java Web开发与实战--Eclipse+Tomcat+Servlet+JSP整合应用》.(刘伟,张利国).[PDF].zip

    主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...

    Java Web开发与实战:Eclipse+Tomcat+Servlet+JSP整合应用(含光盘源代码)

    主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...

    Spring攻略(第二版 中文高清版).part2

    6.2 在你的Servlet和过滤器中使用Spring 214 6.2.1 问题 214 6.2.2 解决方案 215 6.2.3 工作原理 215 6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4...

    Spring攻略(第二版 中文高清版).part1

    6.2 在你的Servlet和过滤器中使用Spring 214 6.2.1 问题 214 6.2.2 解决方案 215 6.2.3 工作原理 215 6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4...

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...

    JavaWeb全套设计培训PPT及练习

    JavaWeb设计培训PPT及练习,很基础,很实用的资料!从基础、servlet模型、web部署、servlet过滤器、存储管理、jsp应用到设计模式,全套课程PPT,适合您快速学习javaweb开发原理。

    SSH的jar包.rar

    2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3、接着FilterDispatcher被调用,...

    struts2开发文档

    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做 ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框 架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,...

    JSP网络编程学习笔记源代码 part2

    第六篇为“Web应用高级专题”,主要讲述Servlet过滤器、JSP异常处理、JSP日志、认证和安全、部署等内容;第七篇为“Web应用开发实例”,围绕一个电子商务网站,从需求分析、架构选取、数据存储、开发、测试及部署等...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.2.2. 工作原理........................................................................................................................................................... 26 1.3. Seam 中的可点击列表:...

    JAVA WEB编程

    书上总共分为:Web工作原理、HTTP协议、Web容器Tomcat的使用、Servlet规范、Servlet处理HTTP响应和请求、Web应用程序状态管理、对象作用域、Servlet事件监听器、过滤器、JSP基础、Java Web开发模式以及如何编写无...

Global site tag (gtag.js) - Google Analytics