`
huinet
  • 浏览: 83571 次
  • 性别: Icon_minigender_1
  • 来自: 郑州市
社区版块
存档分类
最新评论

过滤器(filter)在web 中的应用

    博客分类:
  • J2EE
阅读更多

 过滤器(Filter)在Web开发中的应用:

 

Filter是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强。以下是

Filter在Web开发中的应用。

 

过滤器概述:

过滤器就是在源数据和目的数据之间起过滤作用的中间组件。对Web应用来说,过滤器

是一个驻留在服务器端的Web组件,它可以截取客户端和资源之间的请求与响应信息,

并对这些信息进行过滤。

 

当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联。如

果有,那么容器将把请求交给过滤器进行处理。在过滤器中,你可以改变请求的内容,

或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出

响应时候,容器同样会将响应先转发给过滤器,再过滤器中,你可以对响应的内容进行

转换,然后再将响应发送到客户端。

 

过滤器在Web开发中的一些主要应用:

 

·对用户请求进行统一认证。

 

·对用户的访问请求进行记录和审核。

 

·对用户发送的数据进行过滤或替换。

 

·转换图象格式。

 

·对响应内容进行压缩,减少传输量。

 

·对请求或响应进行加解密处理

 

·触发资源访问是事件。

 

·对XML的输出应用XSLT。

 

Filter API :

 

与过滤器开发相关的接口与类都包含在javax.serlvet和javax.servlet.http包中,主

要有下面的接口和类。

 

·javax.servlet.Filter接口

 

·javax.servlet.FilterConfig接口

 

·javax.servlet.FilterChain接口

 

·javax.servlet.ServletRequestWrapper类

 

·javax.servlet.ServletResponseWrapper类

 

·javax.servlet.http.HttpServletRequestWrapper类

 

·javax.servlet.http.HttpServletResponseWrapper类

 

Filter接口:

 

开发过滤器要实现javax.servlet.Filter接口,与开发servlet要实现

javax.servlet.Servlet接口类似。提供了一个公开的不带参数的构造方法。在Filter

接口中,定义了下面的三个方法:

 

·public void init(FilterConfig filterConfig)throws ServletException

 

Web容器调用该方法该方法来初始化过滤器。容器在调用该方法时,向过滤器传递

FIlterConfig对象,FilterConfig的用法和ServletConfig(参见以前相关内容)类似

。利用FilterConfig对象可以得到ServletContext对象,以及部署描述符中配置的过滤

器的初始化参数。在这个方法中,可以抛出ServletException异常,通知容器该过滤器

不能正常工作。

 

·public void doFilter(ServletRequest request,ServletResponse

response,FilterChain chain)throws java.io.IOException,ServletException

 

doFilter()方法类似于Servlet接口的service()方法。当客户端请求目标资源的时候,

容器就会调用与这个目标资源相关联的过滤器的doFilter()方法。在特定的操作完成后

,可以调用chain.doFilter(request,response)将请求传给下一个过滤器(或目标资源

),也可以直接向客户端返回响应信息,或者利用RequestDispatcher的forward()和

include()方法,以及HttpServletResponse的sendRedirect()方法将请求转向到其他资

源。需要注意的是,这个方法的请求和响应参数的类型是ServletRequest和

ServletResponse,也就是说,过滤器的使用并不依赖于具体的协议。

 

·public void destroy()

 

Web容器调用该方法指示过滤器的生命周期结束。在这个方法中,可以释放过滤器使用

的资源。

与开发Servlet不同的是,Filter接口并没有相应的实现类可供继承,要开发过滤器,

只能直接实现Filter接口。

 


FilterConfig接口:

javax.servlet.FilterConfig接口类似于javax.servlet.ServletConfig接口,用于在

过滤器初始化时,向其传递信息。FilterConfig接口有容器实现,容器将其作为参数传

入过滤器对象的init()方法中。在FilterConfig接口,定义了4个方法:

 

·public java.lang.String getFilterName()

 

得到描述符中指定的过滤器的名字。

 

·public java.lang.String getInitParameter(java.lang.String name)


  返回在部署描述中指定的名字为name的初始化参数的值。如果不存在返回null.

 

·public java.util.Enumeration getInitParameterNames()


  返回过滤器的所有初始化参数的名字的枚举集合。

 

·public ServletContext getServletContext()


  返回Servlet上下文对象的引用。

 

 

 

FilterChain接口:

 

FilterChain接口由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方

法中。过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器,如果该过滤

器是链中最后一个过滤器,那么将调用目标资源。FilterChain接口只有一个方法,如

下:

 

·public void doFilter(ServletRequest request,ServletResponse response)

throws java.io.IOException

 

调用该方法将使过滤器链中的下一个过滤器被调用。如果是最后一个过滤器,会调用目

标资源。

 


过滤器的部署:

 

在实现一个过滤器后,需要在部署描述符中对过滤器进行配置,这是通过<filter>和

<filter-mapping>元素来完成的。

<filter>元素用于在Web应用程序中声明一个过滤器。


在<filter>元素内,<description>、<display-name>、<icon>元素和以往servlet的配

置中的相同。<filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。

<filter-class>元素用于指定过滤器的完整的限定类名。<init-param>元素用于为过滤

器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参

数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。

 

 

 

下面是<filte>元素的一个小例子:

<filter>
 <filter-name>testFitler</filter-name>
 <filter-class>org.test.TestFiter</filter-class>
 <init-param>
  <param-name>word_file</param-name>
  <param-value>/WEB-INF/word.txt</param-value>
 </init-param>
</filter>

 

Servlet容器对部署描述符中声明的每一个过滤器,只创建一个实例。与Servlet类似,

容器将在同一个过滤器实例上运行多个线程来同时为多个请求服务,因此,开发过滤器

时,也要注意线程安全的问题。

 

<filter-mapping>元素用于指定过滤器关联的url样式或者Servlet。

其中<filter-name>子元素的值必须是在<filter>元素中声明过的过滤器的名字。<url-pattern>元素和<servlet-name>元素可以选择一个;<url-pattern>元素指定过滤器关联的URL样式;<servlet-name>元素指定过滤器对应的Servlet。用户在访问<url-pattern>元素指定的URL上的资源或<servlet-name>元素指定的Servlet时,该过滤器才会被容器调用。<filter-mapping>元素还可以包含0到4个<dispatcher>,指定过滤器对应的请求方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST.

 

·REQUEST
  当用户直接访问也面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。

 

·INCLUDE
  如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

 

·FORWARD
  如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

 

·ERROR
  如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。


例子:

<filter-mapping>
 <filter-name>testFilter</filter-name>
 <url-pattern>/test.jsp</url-pattern>
</filter-mapping>
当用户访问test.jsp页面时,容器就会调用testFilter过滤器。

<filter-mapping>
 <filter-name>testFilter</filter-name>
 <url-pattern>/index.jsp</url-pattern>
 <dispatcher>REQUEST</dispatcher>
 <dispatcher>FORWARD</dispatcher>
</filter-mapping>

当用户直接访问index.jsp页面,或者通过RequestDispatcher的forward()方法访问时,容器就会调用testFilter过滤器。

 

 

5
0
分享到:
评论
7 楼 gdljg0460 2008-06-28  
[color=orange][/color]lkkk
6 楼 jasongreen 2008-01-15  
我一直用它,好东西
5 楼 love_y 2008-01-15  
强烈支持~!
4 楼 love_y 2008-01-15  
强烈支持~!
3 楼 love_y 2008-01-15  
强烈支持~!
2 楼 love_y 2008-01-15  
强烈支持~!
1 楼 zhijie435 2008-01-14  
[code="java"]

    [*]

    [*]
[img][/img][url][/url][       url][/url][flash=200,20[b]
[/b][b][b[/b]][/b][/b][b][b][/b]0][/flash]

相关推荐

    过滤器在Java Web开发中的应用研究.pdf

    总结来说,过滤器在Java Web开发中扮演着重要的角色,它不仅扩展了Servlet技术的功能,还提高了Web应用的灵活性和可维护性。开发者在掌握了过滤器的创建、配置及使用后,可以有效地解决实际开发过程中遇到的各种问题...

    JAVA Web中过滤器

    在JAVA Web开发中,过滤器(Filter)是一个至关重要的组件,它主要负责在请求被Servlet处理之前或之后执行一些预处理或后处理操作。过滤器是JAVA Servlet API的一部分,通过实现javax.servlet.Filter接口来创建...

    Java Web中的过滤器(Filter):工作原理与应用实践

    在实际开发中,过滤器的使用可以大幅度提高Web应用的性能,增强用户体验,并确保应用的安全性。通过合理利用过滤器,开发者可以在不修改业务逻辑代码的情况下,实现对请求和响应的预处理和后处理,这对于Web应用的...

    过滤器(Filter)

    在实际开发中,过滤器的使用可以大大提高代码的可维护性和复用性,减少重复代码,同时提供了一种灵活的方式来增强Web应用程序的功能。 总之,过滤器是Web开发中的一个重要组件,它能够帮助我们实现各种功能,包括但...

    JAVA WEB中的Servlet过滤器

    在实际应用中,Servlet过滤器常常被用来实现以下功能: 1. **字符编码转换**:统一处理请求和响应的编码,防止乱码问题。 2. **登录验证**:拦截未登录用户的请求,引导用户进行登录操作。 3. **日志记录**:记录...

    过滤器Filter的全面解析

    在一个Web应用中,可以定义多个过滤器,它们会形成一个过滤器链。当请求匹配到某个过滤器时,过滤器链中的所有过滤器都会按照它们在web.xml中的顺序依次执行doFilter方法。如果一个过滤器没有调用`chain.doFilter...

    如何配置Filter过滤器处理JSP中文乱码

    在开发Java Web应用时,尤其是在处理包含中文字符的请求时,可能会遇到中文乱码的问题。解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP中文乱码的详细步骤: 1. **配置web.xml文件*...

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

    1. init():在 Web 应用程序启动时,Web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中。Web 容器创建 Filter 对象实例后,将立即调用该 Filter 对象的 init...

    java 中如何使用filter过滤器

    在web应用的`web.xml`配置文件中,我们定义Filter并指定其作用范围: ```xml &lt;filter&gt; &lt;filter-name&gt;myFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.example.MyFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; ...

    JAVA web过滤器Filter学习资料

    第四,对相应的 servlet 和 JSP 页面注册过滤器,在部署描述符文件(web.xml)中使用 filter 和 filter-mapping 元素。最后,禁用激活器 servlet,防止用户利用缺省 servlet URL 绕过过滤器设置。 在建立过滤器时,...

    2021-05-28-WebAPI高级应用三--过滤器Filter.rar

    1. "WebAPI高级应用三--过滤器Filter.md" 这个Markdown文件很可能包含了关于Web API过滤器的详细教程,包括定义、分类、使用场景、如何创建自定义过滤器以及如何在Web API配置中应用它们。 2. "YDT.Project....

    过滤器filter和监听器listener的应用总结

    在Java Web开发中,过滤器...在阅读《过滤器filter和监听器listener的应用总结》这篇博客后,相信你对这两个概念会有更深入的认识。在实际工作中,根据具体需求灵活运用它们,可以大大提升应用的健壮性和用户体验。

    java Web项目中过滤器使用方法

    在Java Web开发中,过滤器(Filter)是一个强大的工具,它允许开发者在数据处理的前后进行拦截和修改。本文将详细讲解Java Web项目中过滤器的使用方法,以及如何配置和实现过滤器。 1. **过滤器的概念** 过滤器是...

    Web应用与开发作业

    实现一个禁止缓存的过滤器。 要求和提示: (1)禁止浏览器缓存所有动态页面; (2)有3个http响应头字段可以禁止浏览器缓存当前页面,它们在Servlet中的示例代码如下。 response.setDateHeader("Expires",-1); ...

    Filter过滤器的代码及其web.xml配置代码

    在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,比如防止跨站脚本攻击(XSS)、处理字符编码问题、实现权限控制等。在这个主题中,我们将深入理解Filter的...

    web过滤器 c#

    在IT行业中,Web过滤器(Web Filter)是一种用于在Web应用程序中执行特定任务的机制,主要目的是为了增强或改变HTTP请求和响应的处理过程。在C#编程环境下,我们可以使用ASP.NET框架来实现Web过滤器,它对于构建安全...

    JavaWeb 过滤器Filter

    JavaWeb 过滤器Filter是...JavaWeb 过滤器Filter是构建高效、可维护和安全的Web应用不可或缺的一部分。通过合理使用过滤器,开发者可以减少代码的冗余,提高代码的复用性,并且能够更灵活地控制请求与响应的处理流程。

    过滤器在Java Web开发中的应用研究.zip

    Java Web开发中的过滤器(Filter)是Servlet技术的一部分,它在Web应用程序中扮演着至关重要的角色。过滤器允许开发者在请求被发送到目标资源(如Servlet、JSP页面)之前和响应被返回给客户端之后对请求和响应进行...

    Servlet过滤器机制分析及应用

    Servlet过滤器是Java Web应用程序中的一个重要组成部分,它提供了一种灵活的方式来对客户端的请求和服务器的响应进行预处理和后处理。这种机制允许开发者在不改变核心业务逻辑的情况下增强应用程序的功能。 #### 二...

    过滤器(filter) 例子源码

    在Java Web应用中,过滤器的配置通常在`web.xml`文件中完成。以下是一个简单的过滤器配置示例: ```xml &lt;filter&gt; &lt;filter-name&gt;MyFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.example.MyFilterClass&lt;/filter-class&gt; ...

Global site tag (gtag.js) - Google Analytics