Jsp过滤器Filter配置过滤类型汇总

1。如果要映射过滤应用程序中所有资源:

<filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>/*</url-pattern>//访问当前主机,当前应用程序根下的所有文件包括多级子目录下的所有文件,注意这里*前有“/”
</filter-mapping>

2.过滤指定的类型文件资源


  <filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>

   <url-pattern>*.html</url-pattern>
//访问当前主机,当前应用程序根目录下的所有html文件注意:*.html前没有“/”,否则错误

</filter-mapping>

其中*.html要过滤jsp那么就改*.html为*.jsp,但是注意没有“/”斜杠

   如果要同时过滤多种类型资源:

    方法一:url-pattern 分开写

<filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>*.html</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
//访问当前主机,当前应用程序根目录以所有及子目录下的所有jsp文件

  </filter-mapping>

  方法二、将url-pattern 合并

   <filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>*.html;*.jsp</url-pattern>
</filter-mapping>
//*.html;*.jsp两类型之间用分号“;”间隔

3.过滤指定的目录下的所有文件


   <filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>/folder_name/*</url-pattern>
//访问当前主机,当前应用程序根目录下的folder_name子目录(可以是多级子目录)下所有文件

</filter-mapping>

4.过滤指定的servlet


   <filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <servlet-name>loggerservlet</servlet-name>
</filter-mapping>
<servlet>
    <servlet-name>loggerservlet</servlet-name>
    <servlet-class>myfilter.LoggerServlet</servlet-class>
</servlet>

5.过滤指定文件(即单一文件)


   <filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>/simplefilter.html</url-pattern>
</filter-mapping>

 

6、过滤指定目录下的指定类型的所有文件

  这种情况下,在web.xml中无法一次性配置完成,需要结合filter的实现类

  首先,在web.xml中配置过滤指定目录下的所有文件(如上3)

<filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>/dir_name/*</url-pattern>
</filter-mapping>

 然后,在filter的实现类中的doFilter方法中获取请求的uri或者url,判断uri或者url中是否包含指定文件类型的字符串,决定是否过滤

  //获得用户请求的uri
    String uri = request.getRequestURI();

    if(uri.contains(".jsp")||uri.contains(".html"))
        {
            System.out.println("开始过滤"+url);
        }

7、过滤指定目录下指定类型的单一文件


<filter>
    <filter-name>loggerfilter</filter-name>
    <filter-class>myfilter.LoggerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loggerfilter</filter-name>
    <url-pattern>/dir_name/index.jsp</url-pattern>
</filter-mapping>

以上都要注意是否有斜杠“/”
###############使用filter缓存js、css、图片等文件###############

在web.xml中配置如下信息

<!--不 缓存文件 -->

<filter>
    <filter-name>NoCache</filter-name>
    <filter-class>com.sys.common.Filters.ResponseHeaderFilter
        </filter-class>
    <init-param>
      <param-name>Cache-Control</param-name>
      <param-value>no-cache, must-revalidate</param-value>
    </init-param>
  </filter>

<!-- 缓存文件一周 -->

  <filter>
    <filter-name>CacheForWeek</filter-name>
    <filter-class>com..sys.common.Filters.ResponseHeaderFilter
        </filter-class>
    <init-param>
      <param-name>Cache-Control</param-name>
      <param-value>max-age=604800, public</param-value>
    </init-param>
  </filter>

<filter-mapping>
    <filter-name>CacheForWeek</filter-name>
    <url-pattern>/images/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CacheForWeek</filter-name>
    <url-pattern>*.js</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CacheForWeek</filter-name>
    <url-pattern>*.css</url-pattern>
  </filter-mapping>

自定义的filter如下:

public class ResponseHeaderFilter implements Filter {
    FilterConfig fc;

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        // set the provided HTTP response parameters
        for (Enumeration e = fc.getInitParameterNames(); e.hasMoreElements();) {
            String headerName = (String) e.nextElement();
            response.addHeader(headerName, fc.getInitParameter(headerName));
        }
        // pass the request/response on
        chain.doFilter(req, response);
    }

    public void init(FilterConfig filterConfig) {
        this.fc = filterConfig;
    }

    public void destroy() {
        this.fc = null;
    }

}

原文地址:https://www.cnblogs.com/kabi/p/5182872.html