当前位置:  编程技术>java/j2ee

Servlet 过滤器详细介绍

    来源: 互联网  发布时间:2014-10-29

    本文导语:  1. 建立一个实现Filter接口的类所有过滤器都必须实现javax.servlet.Filter。这个接口包含三个方法,分别为doFilter、init和destroy。 代码如下:public void doFilter(ServletRequset request,                ServletResponse response,          ...

1. 建立一个实现Filter接口的类
所有过滤器都必须实现javax.servlet.Filter。这个接口包含三个方法,分别为doFilter、init和destroy。

代码如下:

public void doFilter(ServletRequset request,               
ServletResponse response,              
FilterChain chain)   
thows ServletException, IOException


每当调用一个过滤器(即,每次请求与此过滤器相关的servlet或JSP页面)时,就执行其doFilter方法。正是这个方法包含了大部分过滤逻辑。 第一个参数为与传入请求有关的ServletRequest。对于简单的过滤器,大多数过滤逻辑是基于这个对象的。如果处理HTTP请求,并且需要访问诸 如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此对象构造成 HttpServletRequest。

第二个参数为ServletResponse。除了在两个情形下要使用它以外,通常忽略这个参数。首先,如果希望完全阻塞对相关servlet或JSP页 面的访问。可调用response.getWriter并直接发送一个响应到客户机。其次,如果希望修改相关的servlet或JSP页面的输出,可把响 应包含在一个收集所有发送到它的输出的对象中。然后,在调用serlvet或JSP页面后,过滤器可检查输出,如果合适就修改它,之后发送到客户机。

DoFilter的最后一个参数为FilterChain对象。对此对象调用doFilter以激活与servlet或JSP页面相关的下一个过滤器。如果没有另一个相关的过滤器,则对doFilter的调用激活servlet或JSP本身。

public void init(FilterConfig config)  thows ServletException init方法只在此过滤器第一次初始化时执行,不是每次调用过滤器都执行它。 
对于简单的过滤器,可提供此方法的一个空体, 但有两个原因需要使用init。  1)FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。
因此,普遍的办法是利用init将 FilterConfig对象存放在一个字段中,以便doFilter方法能够访问servlet环境或过滤器名.2) FilterConfig对象具 有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数 。

代码如下:

public void destroy( )   


大多数过滤器简单地为此方法提供一个空体,不过,可利用它来完成诸如关闭过滤器使用的文件或数据库连接池等清除任务。

1.2  将过滤行为放入doFilter方法

doFilter方法为大多数过滤器地关键部分。每当调用一个过滤器时,都要执行doFilter。对于大多数过滤器来说,doFilter执行 的步骤是基于传入的信息的。

因此,可能要利用作为doFilter的第一个参数提供的ServletRequest。这个对象常常构造为 HttpServletRequest类型,以提供对该类的更特殊方法的访问。

1.3  调用FilterChain对象的doFilter方法

   Filter接口的doFilter方法以一个FilterChain对象作为它的第三个参数。
   在调用该对象的doFilter方法时,激活下一 个相关的过滤器。
   这个过程一般持续到链中最后一个过滤器为止。在最后一个过滤器调用其FilterChain对象的doFilter方法时,激活 servlet或页面自身。
   但是,链中的任意过滤器都可以通过不调用其FilterChain的doFilter方法中断这个过程。
   在这样的情况下,不再调用JSP页面的serlvet,
   并且中断此调用过程的过滤器负责将输出提供给客户机也就是说:filter-----选择调用FileterChain的doFilter方法————依次调用,最后激活servlet/jsp    
   |————不调用,选择中断——————当前的filter负责输出
1.4  对适当的servlet和JSP页面注册过滤器

代码如下:

1.filter元素filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。
filter元素具有如下六个可能的子元素:
1、 icon  这是一个可选的元素,它声明IDE能够使用的一个图象文件。
2、filter-name  这是一个必需的元素,它给过滤器分配一个选定的名字。
3、display-name  这是一个可选的元素,它给出IDE使用的短名称。
4、 description  这也是一个可选的元素,它给出IDE的信息,提供文本文档。
5、 filter-class  这是一个必需的元素,它指定过滤器实现类的完全限定名。
6、 init-param  这是一个可选的元素,它定义可利用FilterConfig的getInitParameter方法读取的初始化参数。单个过滤器元素可包含多个init-param元素。

请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3版本。下面介绍一个简单的例子:

2.filter-mapping元素
   filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前。它包含如下三个可能的子元素:

1、 filter-name  这个必需的元素必须与用filter元素声明时给予过滤器的名称相匹配。

2、 url-pattern  此元素声明一个以斜杠(/)开始的模式,它指定过滤器应用的URL。所有filter-mapping元素中必须提供url- pattern或servlet-name。但不能对单个filter-mapping元素提供多个url-pattern元素项。如果希望过滤器适用于 多个模式,可重复整个filter-mapping元素。  即:/后面的东西,是要进行过滤的

3、 servlet-name  此元素给出一个名称,此名称必须与利用servlet元素给予servlet或JSP页面的名称相匹配。不能给单个 filter-mapping元素提供多个servlet-name元素项。如果希望过滤器适合于多个servlet名,可重复这个filter- mapping元素。

1.5  禁用激活器servlet


??? 没懂


    
 
 

您可能感兴趣的文章:

  • java servlet过滤器使用示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JSP与Servlet的介绍说明
  • 请详细介绍一下这几个概念和各自功能用途tomcat, javabean ,servlet(JSP初学者)
  • 谁能介绍点关于JSP和SERVLET的东西呀,最好有个例程啊
  • 一个很菜鸟的问题,Servlet是什么东东。怎么弄,有没专门介绍这方面的东东
  • 有什么书介绍applet与servlet通信比较详细的?
  • 请教各位:一些网站上介绍DBConnectionManager servlet连接池的具体实现方法.
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_context定义参考
  • 请问各位大虾,我在编译SERVLET时,总是找不到javax.servlet.*或者javax.servlet.http.*,需要怎么配一下。
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_response定义参考
  • 关于servlet 的编译问题,怎样设置classpth,把那些java servlet类包含到classpath?而且无法调用servlet!谢谢!
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_request定义参考
  • 写了一个servlet程序,但用javac编译时,发现javax.servlet.*,javax.servlet.http.*不存在,为什么?怎样解决?
  • java Servlet获取和设置cookie实例代码
  • 为什么我在jsp页面用 "/servlet/goto.servlet?setname=中文",如果就这样传过去,在servlet里面得到的将是setname=null,如果传其他则可
  • java Servlet实现Session创建存取以及url重写代码示例
  • 我想apple传object给servlet同时也打开servlet页,显示servlet的内容
  • import javax.servlet.http.*;后,怎么提示package javax.servlet.http does not exist?我的classpath中已添加了tomcat/lib/servlet.jar!
  • 请问为什么我的servlet程序,在编译时总是会出现包javax.servlert和包javax.servlet.http不存在的错误,我在环境变量classpath种已经登记了servlet.jar的位置了。如何解决?
  • 编译 servlet 时,老提示 .....javax.servlet 不存在,为何 ???
  • jsp/servlet配置的小问题,如何添加servlet包
  • 包 javax.servlet ,javax.servlet.http 不存在,原因?解决办法?谢了!
  • servlet快在哪里?(什么时候用servlet好?)
  • 当多个请求同一个servlet时,servlet的生命周期是怎样的?
  • 一个Servlet如何在调用另一个Servlet时将自身的HttpServletRequest传递进去?
  • 急等用,现给分!servlet和servlet之间的通讯如何实现,最好有源代码,谢谢
  • 遍了一个简单的servlet,编译时提示:package javax.servlet does not exist!
  • 谁能解释一下如何使用javax.servlet.Filter 和javax.servlet.FilterChain!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3