大数据必学Java基础(一百零九):过滤器的使用
2023-02-18 16:39:21 时间
过滤器的使用
在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。
web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。
使用过滤器链的好处是我们可以将不同的过滤功能分散到多个过滤器中,分工明确,避免一个过滤器做太多的业务处理,降低了代码的耦合度,这体现了单一职责的设计原则,应用了责任链的代码设计模式。
决定过滤器的执行顺序是由filter-mapping标签决定。
一、准备多个Filter
package com.lanson.filter;
import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public class MyFilter1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter1 在过滤请求 ");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("MyFilter1 在过滤响应");
}
@Override
public void destroy() {
}
}
package com.lanson.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public class MyFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter2 在过滤请求 ");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("MyFilter2 在过滤响应");
}
@Override
public void destroy() {
}
}
二、配置Filter
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>filter1</filter-name>
<filter-class>com.lanson.filter.MyFilter1</filter-class>
</filter>
<filter>
<filter-name>filter2</filter-name>
<filter-class>com.lanson.filter.MyFilter2</filter-class>
</filter>
<!--这里的顺序决定了过滤器的顺序-->
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/myServlet1.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/myServlet1.do</url-pattern>
</filter-mapping>
</web-app>
相关文章
- AutoCAD2007软件下载地址及安装教程--cad所有版本!
- Auto CAD2015软件下载地址及安装教程--cad所有版本!
- Windows云服务器,msconfig → 引导 → 高级选项,不要乱调处理器个数,可能导致黄色感叹号网络不通
- AutoCAD2004软件下载地址及安装教程--cad所有版本!
- AutoCAD2008软件下载地址及安装教程--cad所有版本!
- AutoCAD2014软件下载地址及安装教程--cad所有版本!
- 音频处理软件 Adobe Audition 2020 Mac 版安装教程
- PE格式:手写PE结构解析工具
- [软件] - Adobe Audition 2019 直装版 au软件全版本下载
- 人员离岗自动识别系统
- 河道水文标尺识别系统
- Audition 2021软件下载 au软件全版本下载
- Audition 2022软件下载(更新)AU软件全版本下载
- Auto CAD2017软件下载地址及安装教程--cad所有版本!
- Auto CAD2016软件下载地址及安装教程--cad所有版本!
- Auto CAD2019软件下载地址及安装教程--cad所有版本!
- AutoCAD2005软件下载地址及安装教程--cad所有版本!
- Auto CAD2018软件下载地址及安装教程--cad所有版本!
- Au软件概述 AU软件全版本下载
- 【攻防演练】从钓鱼上线到内网漫游