Servlet过滤器

Servlet过滤器

一、Servlet过滤器简介 :

  Servlet过滤器提供了一种称为过滤器的新对象类型,它可以转换请求或者修改回应。可以将过滤器连接在一起,一边过滤器组可以对指定资源或者资源组的输入和输出执行操作。过滤器通常包括记录过滤器、图像转换过滤器、加密过滤器和多用途Internet邮件扩展(MIME)类型过滤器。

  过滤器可以直接处理请求和响应过程。过滤器可以在资源被获取前对其操作(或者在动态输出中被启动)也可以在获取资源后,或者被执行后立即启动。甚至在资源请求处理的同时也可以使用过滤器(过滤器是一个简单的类,它可以实现javax.servlet.Filter接口)

二、Servlet过滤器工作原理:

  Servlet过滤器接受请求并响应对象,然后过滤器会检查请求对象,决定将该请求转发给下一个组件,或者中止该请求并直接向客户端发回一个响应。如果请求被转发了,它将被传递给下一个资源(其他过滤器、Servlet或者JSP页面)。在这个请求通过过滤器并被处理之后,一个响应将以相反的顺序发送回去。这样就给每个过滤器都提供了根据需要处理相应对象的机会。

三、Servlet过滤器编程接口:

    Servlet过滤器本身不产生请求和响应对象,它只能提供过滤作用。Servlet过滤能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response,修改Response Header和Response内容。要实现这样的操作,首先必须实现Servlet过滤器接口中的方法。Servlet过滤器的编程接口如下:

1.Filter编程接口

Filter编程接口存放在javax.servlet包内,是过滤器必须实现的接口,主要包含以下方法

      Filter(ServletRequest request,ServletResponse response,FilterChain chain)/*过滤器的主要方法*/

      init(FilterConfig filterConfig)/*编译在doFilter()方法前,负责设置FilterConfig对象。FilterConfig对象为过滤器提供参数,并允许访问与之相关的ServletContext*/(在初始化Servlet时,也是用init方法,它   是 Servlet接口提供的init()方法,在Servlet生命周期中,这个方法仅会调用一次。可以用来设置数据库、读取Servlet设置信息它的初始化原型是:public void init(ServletConfig arg0) throws ServletException)

      destroy()  当服务器不需要使用过滤器时,编译器调用destroy()方法。任何实现Filter接口功能的类都可以被看成过滤器,也可以属于Web应用程序组件。

2.FilterChain编程接口:通过这个接口可以把过滤的任务在不同的过滤器之间转移

方法:

   doFilter(ServletRequest request,ServletResponse response)/*该方法是激活下一个相关的过滤器。这个过程一般持续到最后一个过滤器为止。在最后一个过滤器调用其Filterchain对象中的doFilter()时,激活Servlet或者是页面自身*/

3.FilterConfig编程接口:该接口用来建立过滤器的初始化参数、文本名称、或者应用程序运行下的ServletContext。

方法:

getFilterName()方法:获取过滤器的文本名称。

getInitParameter(String paameterName)方法:获取指定初始化参数的字符串值

getInitParameterNamespace()方法:获取由初始化参数名称组成的 java.util.Enumeration (获取所有表单中name的参数)

getServletContext()方法:获取运行该过滤器的ServletContext。

四、Servlet过滤器的配置

 Servlet过滤器是一个web应用组件,与Servlet类似,也需要在web.xml应用配置文件中进行配置部署:1)过滤器的Web应用定义,包含<filter></filter>元素;2)Web应用的过滤器映射配置。

1.过滤器的定义

   在<filter>元素中又包括两个必要子元素<filter-name>和<filter-class>,用来定义过滤器的名称和与过滤器相关的java类的路径,还包含4个子元素<init-param>.  <icon>    <display-name>   <description>   代码如下:
   <filter-name>filterstation</filter-name>

   <filter-class>com.FilterStation</filter-class>

   <init-param>

          <param-name>Name1</param-name>

          <param-value>Value1</param-value>

   </init-param>

   <init-param>

          <param-name>Name2</param-name>

          <param-value>Value2</param-value>

   </init-param>

代码说明如下

在名称为filterstation的过滤器中定义了两个参数Name1和Name2,在实际应用中通过Config类中的getInitParameter()方法获得。

2.过滤器的映射配置

过滤器的映射配置可以利用过滤器映射到一个或多个Servlet和JSP文件中,也可以映射到任意的URL中

             1)映射到一个或多个JSP文件中,代码如下:

                     <filter-mapping>

                         <filter-name>filterstation</filter-name>

                         <url-pattern>/jsp/filename.jsp</url-pattern>

                    </filter-mapping>         代码说明

名称为filterstation的过滤器映射到工作空间下的jsp目录中的filtername.jsp文件。如果将文件名称更改为*.jsp就可以映射到的jsp目录下的所有JSP文件。

             2)映射到一个或多个Servlet中,代码如下:

                     <filter-mapping>

                         <filter-name>FilterName</filter-name>

                         <url-pattern>/FilterName1</url-pattern>

                    </filter-mapping>

                     <filter-mapping>

                         <filter-name>FilterName</filter-name>

                         <url-pattern>/FilterName2</url-pattern>

                    </filter-mapping>     代码说明如下:

与映射到JSP文件的不同之处是其提供的不是路径,而是Servlet名称。其中FilterName1和FilterName2的Servlet都被映射到FilterName过滤器上。

              3)映射到任意URL,代码如下

                     <filter-mapping>

                         <filter-name>FilterName</filter-name>

                         <url-pattern>/*</url-pattern>

                    </filter-mapping>

过滤器不是真正用来完成客户端的请求的,客户端请求操作最终还是要交付给服务器进行相应的处理,过滤器只能做一些辅助性的工作。但是在某些情况下,过滤器是非常有用的,例如安全性检查等。在适合可以使用装饰过滤器模式或者是拦截模式的方法都可以使用过滤器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值