首页 > 编程语言 >Java中Servlet Filter配置(web.xml详解)

Java中Servlet Filter配置(web.xml详解)

时间:2023-10-24 12:32:53浏览次数:42  
标签:xml web Java 元素 mapping loggerfilter filter 过滤器 servlet

Java中Servlet Filter在web.xml中配置时有2个用于过滤器的元素,分别是filter和filter-mapping。filter元素向系统注册一个过滤对象,filter-mapping元素指定该过滤对象所应用的URL。

Filter配置过滤器元素

filter元素

filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六个可能的子元素:

1. icon  可选元素,它声明IDE能够使用的一个图象文件。

2. filter-name  必需元素,它给过滤器分配一个选定的名字。

3. display-name  可选元素,它给出IDE使用的短名称。

4. description  可选元素,它给出IDE的信息,提供文本文档。

5. filter-class  必需元素,它指定过滤器实现类的完全限定名。

6. init-param  可选元素,它定义可利用FilterConfig的getInitParameter方法读取的初始化参数。单个过滤器元素可包含多个init-param元素。

<web-app> 
  <filter> 
    <filter-name>MyFilter</filter-name>  
    <filter-class>myPackage.FilterClass</filter-class> 
  </filter>  
  <filter-mapping>...</filter-mapping> 
</web-app>

filter-mapping元素

filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前。它包含如下三个可能的子元素:

1. filter-name  这个必需的元素必须与用filter元素声明时给予过滤器的名称相匹配。

2. url-pattern  此元素声明一个以斜杠(/)开始的模式,它指定过滤器应用的URL。所有filter-mapping元素中必须提供 url-pattern或servlet-name。但不能对单个filter-mapping元素提供多个url-pattern元素项。如果希望过滤 器适用于多个模式,可重复整个filter-mapping元素。

3. servlet-name  此元素给出一个名称,此名称必须与利用servlet元素给予servlet或JSP页面的名称相匹配。不能给单个 filter-mapping元素提供多个servlet-name元素项。如果希望过滤器适合于多个servlet名,可重复这个filter- mapping元素。

<web-app> 
  <filter> 
    <filter-name>MyFilter</filter-name>  
    <filter-class>myPackage.FilterClass</filter-class> 
  </filter>  
  <filter-mapping> 
    <filter-name>MyFilter</filter-name>  
    <url-pattern>/someDirectory/SomePage.jsp</url-pattern> 
  </filter-mapping> 
</web-app>

Filter配置

注册Filter

<web-app>
  <filter> 
    <filter-name>testFitler</filter-name>  
    <filter-class>org.test.TestFiter</filter-class>  
    <init-param> 
      <param-name>word_file</param-name>  
      <param-value>/WEB-INF/word.txt</param-value> 
    </init-param> 
  </filter>
</web-app>

<filter-name> 用于为过滤器指定一个名字,该元素的内容不能为空。

<filter-class> 用于指定过滤器的完整的限定类名。

<init-param> 用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。

映射Filter

<filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径

(1)<filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字

(2)<url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)

(3)<servlet-name>指定过滤器所拦截的Servlet名称。

(4)<dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。

(5)<filter-mapping> 过滤器拦截配置

如果连接目标资源是一个Servlet,可以选择url和servlet名称两种配置方式:

<!-- 拦截/hello是Servlet 路径 -->
<url-pattern>/hello</url-pattern>
<!-- 拦截Servlet 还可以通过Servlet 名称进行拦截 -->
<servlet-name>HelloServlet</servlet-name>

(6)url-pattern 和 Servlet中路径写法一样,有三种 : 完全匹配、目录匹配、扩展名匹配

(7)<dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式

<dispatcher> 子元素可以设置的值及其意义:

REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。

INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。


FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。


ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用

例子

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

<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>

过滤指定的类型文件资源

<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>

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

同时过滤多种类型资源

<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>
</filter-mapping>

过滤指定的目录

<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>
</filter-mapping>

过滤指定的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>

过滤指定文件

<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>

标签:xml,web,Java,元素,mapping,loggerfilter,filter,过滤器,servlet
From: https://blog.51cto.com/u_16248220/8002392

相关文章

  • JAVA架构师具备的技术和能力
    JAVA架构师是一种高级职位,需要具备深厚的技术实力和广泛的能力。以下是JAVA架构师常见的技术和能力要求:1、扎实的编程基础:JAVA架构师需要具备良好的编程能力和深入理解JAVA语言特性和编程范式,熟悉面向对象编程和设计模式。2、深入理解框架和技术栈:JAVA架构师需要熟练掌握常用的JAVA......
  • 记录一次Java编程题(适合所有的新手哦)
    题目:用Java编写以下代码:1)定义一个抽象的商品类Production,包含商品号id、商品名name、商品价格price3个数据成员;2)定义3个分别用来获取商品号、商品名、商品价格的成员方法;3)定义一个抽象的输出数据成员信息的方法abstractvoidshowInfo();注意使用适当的访问控制符对属性和方......
  • nginx unit WebAssembly 试用
    nginxunit已经支持WebAssembly,刚好体验下环境准备基于docker运行unit,对于wasm的开发基于rust,实际上测试直接试用了官方的示例代码docker-composeversion:"3"services:app:image:unit:1.31.1-wasmports:-8080:8080......
  • 华为云耀云服务器L实例 - java环境配置
     Java环境在云服务器上是为了支持Java应用程序的运行、开发和使用Java生态系统中的各种工具和库。它为开发人员提供了一个稳定和可靠的平台,使他们能够利用Java的强大功能来构建高性能、可扩展和安全的应用程序。1. 登录华为云耀云服务器L实例:使用SSH或远程桌面工具登录到您......
  • [WebGL] sampler2DArray demo 多纹理渲染
    背景之前尝试过利用多个纹理单元,再基于传入给shader的vertexBuffer信息决定选1号纹理单元还是2号纹理单元。虽然理论上,这个方式确实行得通,但是一次drawcall绘制多个纹理,本来目的是为了提高绘制性能,而实际上却无法提高性能,甚至还有反作用。因为有说法是shader分支会......
  • Java:自定义实现SpringBoot Starter
    (目录)1、自定义Starter1.1、项目结构$tree.├──pom.xml└──src├──main│├──java││└──com││└──example││└──demo││├──ReadingConfiguration.java......
  • Java医院绩效考核系统源码
    一、系统总体功能作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修......
  • 教你看懂Web 3.0:未来的互联网
    众所周知,互联网已经成为我们日常生活的一部分,我们用它来搜索信息、社交、购物,甚至观看视频和听音乐。但你是否曾经想过,未来的互联网会是什么样子?让我们来谈谈Web3.0,它是互联网的下一个大版本,就像我们的手机升级操作系统一样。Web1.0:互联网的起始首先,让我们回顾一下Web1.0,也就是......
  • Java中将Byte[] 转成封装类型
    今天做一个需求,需要将byte[]类型转换为Double和String,因此整理起来 Doublebyte[]转doublepublicDoublebyteArrayToDouble(byte[]bytes){if(bytes.length!=8){thrownewIllegalArgumentException("数据长度不符");}longlongBits=0;for(inti=0;i<8......
  • JWT Tool:针对 JSON Web Tokens 的测试工具题解JWT cracking
    什么是JWT?JWT是JSONWebToken的缩写,它是一串带有声明信息的字符串,由服务端使用加密算法对信息签名,以保证其完整性和不可伪造性。Token里可以包含所有必要的信息,这样服务端就无需保存任何关于用户或会话的信息了。JWT可用于身份认证,会话状态维持以及信息交换等任务。JWT由三部分......