`
newleague
  • 浏览: 1477700 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

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

阅读更多
过滤器(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>元素的一个小例子:
Xml代码 复制代码
  1. <filter>  
  2.  <filter-name>testFitler</filter-name>  
  3.  <filter-class>org.test.TestFiter</filter-class>  
  4.  <init-param>  
  5.   <param-name>word_file</param-name>  
  6.   <param-value>/WEB-INF/word.txt</param-value>  
  7.  </init-param>  
  8. </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
  如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

例子:

Xml代码 复制代码
  1. <filter-mapping>  
  2.  <filter-name>testFilter</filter-name>  
  3.  <url-pattern>/test.jsp</url-pattern>  
  4. </filter-mapping>  



当用户访问test.jsp页面时,容器就会调用testFilter过滤器。

Xml代码 复制代码
  1. <filter-mapping>  
  2.  <filter-name>testFilter</filter-name>  
  3.  <url-pattern>/index.jsp</url-pattern>  
  4.  <dispatcher>REQUEST</dispatcher>  
  5.  <dispatcher>FORWARD</dispatcher>  
  6. </filter-mapping>  


当用户直接访问index.jsp页面,或者通过RequestDispatcher的forward()方法访问时,容器就会调用testFilter过滤器。
=====================================================================================
七.Filter过滤器
1.定义:ServletFilter是Servlet2.3规范中新增加的,它是截取用户从客户端提交的请求,在还没有到达需要访问的资源时欲行的一个类.它的操纵来自客户端的请求,在资源还没有发送到客户端前截取响应,并处理这些还没有发送到客户端的响应.
2.ServletFilter的作用:
权限的校验,日志记录,图片的转换,数据的加密等等.
3.实现:一个ServletFilter可以分为两部分:Java类自身以及在web.xml文件中xml.
要作为 ServletFilter的Java类必须实现Filter接口.该接口由一对自描述的生命周期方法 init(FilterConfig),destroy()和一个行为方法doFilter(ServletRequest, ServletResponse, FilterChain).
4.实现步骤:
a.实现Filter接口
b.实现doFilter方法
c.传递过滤链,放请求通过
d.在web.xml文件中注册过滤器
分享到:
评论

相关推荐

    Web应用与开发作业

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

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

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

    Servlet过滤器小实例

    在一个常规的web应用中,我们...实例说明:假设有一个web应用软件,如果是正常途径登录,我们会在其session中放入一个“user”对象进行标记,在随后的会话中我们都用过滤器进行检查,如果无效则会转向一个出错的页面。

    Java Web基础入门第七十九讲 Filter(过滤器)——Filter(过滤器)常见应用(三):权限管理系统(下)-附件资源

    Java Web基础入门第七十九讲 Filter(过滤器)——Filter(过滤器)常见应用(三):权限管理系统(下)-附件资源

    过滤器实现get请求和POST请求的中文乱码问题

    使用过滤器实现GET请求和POST请求的中文乱码问题,只需在自己的Web应用中的web.xml中配置该filter即可使用。

    ASP.NET过滤器的应用方法介绍

    在J2EE Web开发中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码、判断会话信息,也可以做权限控制,总之这个过滤器是非常有意义的,也...

    预防XSS攻击和SQL注入XssFilter

    XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin...

    PHP Filter过滤器全面解析

    PHP 过滤器用于验证和过滤...通过使用过滤器,您能够确保应有程序获得正确的输入类型。 您应该始终对外部数据进行过滤! 输入过滤是最重要的应用程序安全课题之一。 什么是外部数据? •来自表单的输入数据 •Cook

    过滤器与监听器

    Web页面的过滤与监听 了解Filter基本概念和适用场合 掌握使用Filter的基本步骤 会定义和使用Filter 掌握全局对象监听器的使用和应用 掌握会话对象监听器的使用和应用

    web.xml详细说明

    &lt;filter&gt;&lt;/filter&gt; 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。 &lt;filter-mapping&gt;&lt;/filter-mapping&gt; 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面...

    filterus-masterPHP过滤库.zip

    &lt;?... ... use Filterus\Filter; $filter = Filter::map(array('foo' =&gt; 'string,min:4,default:test'));...通过使用过滤器,您能够确保应有程序获得正确的输入类型。您应该始终对外部数据进行过滤!

    智能网页过滤器「Smart Web Filter」-crx插件

    我们引入了一个Web过滤器,该过滤器将用户不想要的主题作为输入,并使用Wikidata查找相关术语。 应用我们的过滤算法后,不需要的内容将被隐藏起来,如果用户仍然希望看到它,则可以决定取消隐藏它。 我们的系统设法...

    Struts2执行流程

    Struts2执行流程 1. web.xml 部署描述符 2. FilterDispatcher 实现StrutsStatics, Filter接口 (1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet...过滤器的配置在Web应用程序的部署描述符中.

    Web配置详解

    &lt;filter&gt;&lt;/filter&gt; 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。&lt;filter-mapping&gt;&lt;/filter-mapping&gt; 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第20章 filter在web开发中的应用 588 20.1 过滤器概述 588 20.2 filter api 589 20.2.1 filter接口 589 20.2.2 filterconfig接口 590 20.2.3 filterchain接口 590 20.3 过滤器的部署 591 20.4 过滤器的开发 ...

    J2EE中关于web.xml文件的配置

    在 J2EE 中,web.xml 文件扮演着非常重要的角色,它是一个基于 XML 的配置文件,用于描述 Web 应用的各个方面的配置信息。通过 web.xml 文件,我们可以对 Web 应用进行配置,例如设置应用程序的名称、描述、过滤器、...

    dms-filter-master基于标注的PHP过滤库.zip

    &lt;?... namespace DMS\Filter; class Filter implements FilterInterface ...通过使用过滤器,您能够确保应用程序获得正确的输入类型。您应该始终对外部数据进行过滤!输入过滤是最重要的应用程序安全课题之一。

    论文研究-基于Servlet Filter的访问控制过滤器插件 .pdf

    基于Servlet Filter的访问控制过滤器插件,汪克炎,龙毅宏,对于部署在互联网上的J2EE Web应用系统,用户的安全访问是至关重要的。本文介绍使用Servlet Filter技术设计一种可插入的、可扩展的、对��

    《Java-Web应用开发基础》教学课件08课程设计实例.pptx

    能够在MyEclipse IDE中设计简单的Servlet过滤器。 能够综合运用前面7个模块所学的知识进行Java Web项目开发,能够把前端开发技术运用到项目的开发过程中。 《Java-Web应用开发基础》教学课件08课程设计实例全文共73...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第20章 filter在web开发中的应用 588 20.1 过滤器概述 588 20.2 filter api 589 20.2.1 filter接口 589 20.2.2 filterconfig接口 590 20.2.3 filterchain接口 590 20.3 过滤器的部署 591 20.4 过滤器的开发 ...

Global site tag (gtag.js) - Google Analytics