当前位置: 首页 > 编程笔记 >

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

葛念
2023-03-14
本文向大家介绍JSP过滤器Filter配置过滤类型全部汇总,包括了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,但是注意没有“/”斜杠。如果要同时过滤多种类型资源:

方法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配置过滤类型全部汇总就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文阐述Apache中过滤器的用法。 Apache 2 中的过滤器 相关模块 相关指令 mod_filter mod_deflate mod_ext_filter mod_include mod_charset_lite FilterChain FilterDeclare FilterProtocol FilterProvider AddInputFilter AddOutputFilter Re

  • 过滤器用于修改特定文件,Hexo 将这些文件依序传给过滤器,而过滤器可以针对文件进行修改,这个概念借鉴自 WordPress。 概要 hexo.extend.filter.register(type, function() { // User configuration const { config } = this; if (config.external_link.enable)

  • JSP 和 Servlet 中的过滤器都是 Java 类。 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。 可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet。过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之

  • 本文向大家介绍spring boot 配置Filter过滤器的方法,包括了spring boot 配置Filter过滤器的方法的使用技巧和注意事项,需要的朋友参考一下 Filter 过滤器是web开发中很重要的一个组件,下面以一个session登陆的例子介绍下spring boot中如何使用Filter 首先要准备一个实现了Filter的接口的类 SessionFilter: 实际开发中往往有很多

  • 从本章开始,我们学习SVG的一些高级功能,包括过滤器(Filter)、渐变(Gradient)。SVG还支持动画特性,但我们推荐使用CSS3的动画,所以这里不做讲解。 SVG 过滤器元素 SVG过滤器(也称为滤镜)用来给SVG图形添加特效,和PS软件中的滤镜效果类似。SVG中可用的过滤器元素包括: <feBlend> - 图片混合 <feColorMatrix> - 颜色变换 <feCompone

  • 丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能。在本章我们就会重点介绍几个插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!

  • 本文向大家介绍详解Angularjs filter过滤器,包括了详解Angularjs filter过滤器的使用技巧和注意事项,需要的朋友参考一下 系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点。这篇简单说一下angularjs的filter功能,a

  • Filter 只发射通过了谓词测试的数据项 Filter操作符使用你指定的一个谓词函数测试数据项,只有通过测试的数据才会被发射。 RxJava将这个操作符实现为filter函数。 示例代码 Observable.just(1, 2, 3, 4, 5) .filter(new Func1<Integer, Boolean>() { @Override