JSP过滤器Filter配置过滤类型全部汇总
程序员文章站
2023-11-29 18:38:16
一、配置方法
1 映射过滤应用程序中所有资源
loggerfilter
一、配置方法
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,但是注意没有“/”斜杠。如果要同时过滤多种类型资源:
方法1 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>
方法2 将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中配置过滤指定目录下的所有文件
<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> <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; 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过滤器filter配置过滤类型全部汇总就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。