编程开发 > JSP > 文章内容

JSP过滤器Filter配置过滤类型全部汇总

2017-4-28编辑:ljnbset

JSP过滤器Filter配置过滤类型全部汇总

一、配置方法

1 映射过滤应用程序中所有资源

?

1

2

3

4

5

6

7

8

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

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

filter-mapping>

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

?

1

2

3

4

5

6

7

8

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

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

filter-mapping>

其中*.html要过滤jsp那么就改*.html为*.jsp,但是注意没有“/”斜杠。如果要同时过滤多种类型资源:

方法1 url-pattern 分开写

?

1

2

3

4

5

6

7

8

9

10

11

12

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

  <url-pattern>*.htmlurl-pattern>

filter-mapping>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

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

filter-mapping>

方法2 将url-pattern合并

?

1

2

3

4

5

6

7

8

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

  <url-pattern>*.html;*.jspurl-pattern>

filter-mapping>//*.html;*.jsp两类型之间用分号;间隔

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

?

1

2

3

4

5

6

7

8

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

  <url-pattern>/folder_name/*url-pattern>//访问当前主机,当前应用程序根目录下的folder_name子目录(可是多级子目录)下所有文件

filter-mapping>

4 过滤指定的servlet

?

1

2

3

4

5

6

7

8

9

10

11

12

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

  <servlet-name>loggerservletservlet-name>

filter-mapping>

<servlet>

  <servlet-name>loggerservletservlet-name>

  <servlet-class>myfilter.LoggerServletservlet-class>

servlet>

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

?

1

2

3

4

5

6

7

8

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

  <url-pattern>/simplefilter.htmlurl-pattern>

filter-mapping>

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

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

首先在web.xml中配置过滤指定目录下的所有文件

?

1

2

3

4

5

6

7

8

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

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

filter-mapping>

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

?

1

2

3

4

//获得用户请求的uri

String uri = request.getRequestURI();

if(uri.contains(".jsp")||uri.contains(".html"))

System.out.println("开始过滤"+url);

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

?

1

2

3

4

5

6

7

8

<filter>

  <filter-name>loggerfilterfilter-name>

  <filter-class>myfilter.LoggerFilterfilter-class>

filter>

<filter-mapping>

  <filter-name>loggerfilterfilter-name>

  <url-pattern>/dir_name/index.jspurl-pattern>

filter-mapping>

以上都要注意是否有斜杠“/”

二、实例

不缓存文件

?

1

2

3

4

5

6

7

8

9

<filter>

  <filter-name>NoCachefilter-name>

  <filter-class>com.sys.common.Filters.ResponseHeaderFilter

    filter-class>

  <init-param>

   <param-name>Cache-Controlparam-name>

   <param-value>no-cache, must-revalidateparam-value>

  init-param>

 filter>

缓存文件一周

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<filter>

  <filter-name>CacheForWeekfilter-name>

  <filter-class>com.sys.common.Filters.ResponseHeaderFilter

    filter-class>

  <init-param>

   <param-name>Cache-Controlparam-name>

   <param-value>max-age=604800, publicparam-value>

  init-param>

 filter>

<filter-mapping>

  <filter-name>CacheForWeekfilter-name>

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

 filter-mapping>

 <filter-mapping>

  <filter-name>CacheForWeekfilter-name>

  <url-pattern>*.jsurl-pattern>

 filter-mapping>

 <filter-mapping>

  <filter-name>CacheForWeekfilter-name>

  <url-pattern>*.cssurl-pattern>

 filter-mapping>

自定义的filter:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class ResponseHeaderFilter implements Filter {

  FilterConfig fc;

  public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {

    HttpServletResponse response = (HttpServletResponse) res;

    for (Enumeration e = fc.getInitParameterNames(); e.hasMoreElements();) {

      String headerName = (String) e.nextElement();

      response.addHeader(headerName, fc.getInitParameter(headerName));

    }

    chain.doFilter(req, response);

  }

 

  public void init(FilterConfig filterConfig) {

    this.fc = filterConfig;

  }

 

  public void destroy() {

    this.fc = null;

  }

 

}

jsp中过滤器选择过滤器的写法详解

热点推荐

登录注册
触屏版电脑版网站地图