Servlet过滤器能动态拦截请求与响应,对其中的信息进行处理或利用。
1、 Servlet过滤器的处理方法
2、 过滤器是实现 javax.servlet.Filter 接口的 Java 类,该接口共定义了三个方法,用于在请求到达目标资源前进行预处理、拦截或修改,以及在响应返回客户端前进行后续操作,从而实现对 Web 请求和响应的统一控制与管理。
3、 配置过滤器参数
4、 在 Filter 的初始化方法中,会传入一个 FilterConfig 对象用于配置参数。
5、 web.xml 文件的配置内容如下所示
6、 在初始化方法中通过 FilterConfig 对象来获取配置参数。
7、 Servlet过滤器应用实例
8、 以下是一个 Servlet 过滤器的示例,用于输出网站名称和网址。通过该实例可初步掌握过滤器的基本用法,您可基于此思路开发更复杂的过滤器应用。
9、 以之前提到的 DisplayHeader.java 为例进行说明。
10、 在 web.xml 中配置 Servlet 过滤器映射,用于指定过滤器拦截的请求路径或目标资源,实现对特定 URL 请求的预处理与响应处理。
11、 配置过滤器时,需在 web.xml 部署描述文件中定义 filter 标签,并将其映射到指定的 URL 或 Servlet。该过程与配置 Servlet 并将其关联到 URL 模式的操作类似,通过在配置文件中添加相应条目,实现对请求的预处理或拦截功能。
12、 该过滤器默认作用于所有 Servlet,因其配置路径为 /*。若仅需对部分 Servlet 生效,可将映射路径调整为具体的 Servlet 路径,从而实现精准控制,避免对无关请求产生影响。
13、 尝试以常规方式调用任意 Servlet,即可在 Web 服务器中查看生成的日志信息。此外,也可通过 Log4J 记录器将这些日志输出至独立的文件,便于后续分析与管理。
14、 访问地址 http://localhost:8080/TomcatTest/DisplayHeader,随后查看控制台输出信息,结果如下所示。
15、 多滤并用
16、 Web应用程序可依据具体需求设置多个独立的过滤器。例如,定义了AuthenFilter和LogFilter两个过滤器后,需建立相应的映射关系,其后续处理流程与前述方式基本一致,各过滤器按配置顺序执行,实现请求的逐层拦截与处理,确保功能逻辑的清晰与分离。
17、 过滤器执行先后次序
18、 在 web.xml 文件中,filter-mapping 元素的排列顺序决定了过滤器应用到 Servlet 的执行次序。若需调整过滤器的执行顺序,只需修改这些元素在文件中的先后位置。通过重新排列 filter-mapping 的顺序,即可实现过滤器调用流程的改变,从而满足不同的处理需求。
19、 例如,上述示例会先执行 LogFilter 再执行 AuthenFilter,而下方示例则会调换这两个过滤器的执行顺序。
20、 web.xml配置文件各节点功能解析
21、 用于设定筛选条件的过滤器。
22、 filter-name 用于定义过滤器名称,内容不可为空。
23、 元素用来定义过滤器的完整类名。
24、 元素用来设置过滤器的初始化参数,其中定义参数名称,定义参数的具体数值。
25、 通过FilterConfig接口对象,可在过滤器中获取并访问初始化参数信息。
26、 元素用于配置过滤器所拦截的资源。可通过两种方式指定被拦截资源:一是关联具体的Servlet名称,二是设置请求路径,从而精确控制哪些资源需要经过该过滤器处理。
27、 子元素用于指定过滤器的注册名称,其值必须与元素中已声明的过滤器名称保持一致。
28、 配置过滤器所拦截的请求路径,定义其关联的URL匹配模式。
29、 用于定义过滤器所要拦截的Servlet的名称。
30、 用于定义过滤器拦截资源时,Servlet 容器调用该资源的方式,可选值包括 REQUEST、INCLUDE、FORWARD 和 ERROR,默认为 REQUEST。可通过配置多个 子元素,实现对同一资源在不同调用方式下的拦截,从而让过滤器在多种场景下生效,增强控制的灵活性和适用范围。
31、 可设置的子元素值及其对应含义
32、 当用户直接请求页面时,Web容器会触发过滤器执行。但若目标资源是通过RequestDispatcher的include()或forward()方法进行访问,则该过滤器不会被调用,即仅在直接请求时生效,转发或包含方式访问时不参与处理流程。
33、 当目标资源通过RequestDispatcher的include()方法被访问时,该过滤器会被触发执行;在其他访问方式下,该过滤器均不会被调用。
34、 当目标资源通过RequestDispatcher的forward()方法进行访问时,该过滤器会被触发执行;在其他访问方式下,该过滤器则不会被调用。
35、 当目标资源通过声明式异常处理机制触发时,该过滤器会被执行;其他情况下则不会被调用。
评论
更多评论