共计 2592 个字符,预计需要花费 7 分钟才能阅读完成。
过滤器
1、概念
- 过滤器是可能对 web 申请和 web 响应的头属性和内容体进行操作的一种非凡 web 组件
- 过滤器的非凡之处在于自身并不间接生成 web 响应,而是拦挡 web 申请和响应,以便查看、提取或以某种形式操作客户机和服务器之间替换的数据
2、过滤器的性能
- 剖析 web 申请,对输出数据进行预处理
- 阻止 web 申请和响应的进行
- 依据性能改变申请的头信息和数据体
- 与其余 web 资源合作
3、过滤器的基本原理
4、用法
- 配置 web.xml
<?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>filter</filter-name>
<filter-class>com.syf.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>FilterServlet</servlet-name>
<servlet-class>com.syf.FilterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FilterServlet</servlet-name>
<url-pattern>/filter</url-pattern>
</servlet-mapping>
</web-app>
- 定义过滤器
package com.syf.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* 自定义过滤器,实现申请拦挡及资源对立治理性能
* 实现形式及生命周期:* 定义 java 类实现 Filter 接口
* 重写接口办法
* init:初始化 tomcat 启动的时候执行一次
* doFilter: 进行拦挡解决 每次申请都会执行
* destroy:销毁 Tomcat 敞开的时候执行
*/
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {System.out.println("第一个过滤器初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("第一个过滤器执行开始");
// 调用对应的 Servlet
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("第一个过滤器执行完结");
}
@Override
public void destroy() {System.out.println("第一个过滤器销毁");
}
}
- 过滤器链
FilterChain 接口用于调用过滤器链中的一系列过滤器
减少一个过滤器 MyFilter2
public class MyFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {System.out.println("第二个过滤器初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("第二个过滤器执行开始");
// 调用对应的 Servlet
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("第二个过滤器执行完结");
}
@Override
public void destroy() {System.out.println("第二个过滤器销毁");
}
}
配置 web.xml
<filter>
<filter-name>filter2</filter-name>
<filter-class>com.syf.filter.MyFilter2</filter-class>
</filter>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 在我的项目中能够定义多个过滤器,开始执行的时候,依据用户的申请,把合乎规定的过滤器挨个执行。
- 最好每个过滤器齐全独立的过滤性能,不要将多个逻辑解决搁置到同一个过滤器中,耦合度高,不利于保护
- 在 web.xml 配置文件中,能够配置过滤器过滤哪些申请
/*: 匹配所有申请
/*.xx: 匹配后缀为 xx 的申请
/xx.xx:匹配申请为 xx.xx 的申请
监听器
1、作用
监听作用域对象的创立与销毁及属性的相干配置,能够增加一些公共的属性配置,做逻辑判断等
次要监听三种作用域:ServletContext、session、request
正文完