java 多个过滤器 javaee 过滤器_java 多个过滤器

1、概念

过滤器(filter)是一种代码重用的技术,它可以改变HTTP请求的内容,响应,及Header信息。过滤器通常不产生响应或像Servlet那样对请求作出响应,而是修改或调整到资源的请求,以及来自资源的响应。过滤器可以作用于所有Web资源,即动态或静态内容。

过滤器是指拦截请求,并对传给被请求资源的ServletRequest 或 ServletResponse 进行处理的一个对象。过滤器可以用于登录、加密和解密、会话检查等等。过滤器可以配置为拦截一个或多个资源。如果同一个资源或同一组资源中应用了多个过滤器,则调用顺序有显示显得比较重要,这时候就需要部署描述符(web.xml)来控制其先后顺序。

2、Filter 相关的API

2.1 Filter接口

方法:

  • init(FilterConfig filterConfig)
    该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。参数FilterConfig可以获得filter的初始化参数(初始化参数参见下面章节)。
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资
  • destroy()
    该方法在容器销毁过滤器对象前被调用。

2.2 FilterChain接口

该接口类型作为Filter接口中doFilter方法的参数使用。

方法:

  • doFilter(ServletRequest request,ServletResponse response)
    该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能是下一个过滤器,也可能是目标资源。

2.3 FilterConfig接口

该接口类型作为Filter接口中的init方法的参数使用。

方法

  • getInitParameter(String name)
    该方法用来获得过滤器的初始化参数值。在web.xml中,可以为每一个filter配置需要的初始化参数,与Servlet的类似。过滤器的初始化参数即可通过FilterConfig中的getInitParameter方法获取。

代码案例:

解决中文乱码过滤器:

package


3、 XML配置过滤器

配置项说明

<filter>中配置项:
    <filter-name>:过滤器的名称
    <filter-class>:该过滤器对应的配置类
    <init-param>:初始化参数
    <param-name>:参数名称
    <param-value>:参数值 
<filter-mapping>中配置项:
    <filter-name>:过滤器名称,和<filter>中的<filter-name>相同
    <url-pattern>:过滤器过滤的资源路径
    <dispatcher>:指定过滤器过滤的资源的调用方式,默认为REQUEST

dispatcher取值和意义

  • REQUEST:如果资源的调用方式是RequestDispatcher的forward()或include(),那么该资源路径即使匹配,过滤器也不会起作用
  • FORWARD:调用方式是RequestDispatcher的forward()起作用
  • INCLUDE:调用方式是RequestDispatcher的include()起作用
  • ERROR:如果该资源适配异常处理机制调用,则该过滤器起作用
<!-- 配置过滤器对象名称,过滤器类的路径,初始化参数 -->


获取过滤器初始化参数:

package


4. 网页错误处理页面

我们的web通常404,500等错误,可能会暴露我们的源码,这是我们不希望让用户看见的,我们可以利用web.xml中配置错误页面来捕捉和处理这种错误页面,让用户看见和谐的页面。


java 多个过滤器 javaee 过滤器_java 多个过滤器_02


java 多个过滤器 javaee 过滤器_配置项_03


处理方案:

在web.xml文件中配置错误页面,在<web-app></web-app>中间加上如下代码。还需要在location相关的页面的前面加上指令元素<%@page{iserrorPage="true"} %>

<error-page>