web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能,
Filter需要继承java.servlet.Filter, 在请求到达Servlet之前拦截Request,也可以对其进行修改, 在响应到达客户端之前拦截Response,也可以对其进行修改。
一般作用于完成的操作:登录验证、统一编码处理、敏感字符过滤
1、创建Filter处理类
package com.gx.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//@webFilter ("/index.jsp") //1、具体资源路径: /index.jsp 只有访问index.isp资源时,过滤器才会被执行
//@webFilter ("/user.*") //2、拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
//@webFilter ("*.jsp") //3、后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
//@webFilter ("/*") //4、访问所有资源时,过滤器都会被执行
@WebFilter("/*")
public class FilterDemo2 implements Filter {
//在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
public void init(FilterConfig config) throws ServletException {
System.out.println("init.....");
}
//每一次请求被拦截资源时,会执行。执行多次
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("doFilter执行了.....");
//放行
chain.doFilter(req, resp);
System.out.println("doFilter回来了.....");
}
//在服务器关闭后, Filter对象被销毁。如果服务器是正常关闭,则会执行destroy 法。只执行一次。用于释放资源
public void destroy() {
System.out.println("destroy.....");
}
}
两种配置方法:
1、注入:
@WebFilter("/*")
2、web.xml里配置
<Filter>
<filter-name>FilterDemo2</filter-name>
<filter-class>com.nh.filter.FilterDemo2</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo2</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
2、过滤器执行流程
1、执行过滤器
2、执行放行后的资源
3、回来执行过滤器放行代码下边的代码
3、过滤器生命周期方法
1、init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
2、doFilter:每一次请求被拦截资源时,会执行。执行多次
3、destroy:在服务器关闭后, Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
4、拦截路径
1、具体资源路径: /index.jsp 只有访问index.isp资源时,过滤器才会被执行
2、拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
3、后缀名拦截: .jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
4、拦截所有资源: / 访问所有资源时,过滤器都会被执行
5、注解中设置dispatcherTypes属性
1、REQUEST:默认值。浏览器直接请求资源
2、FORWARD:转发访问资源
3、INCLUDE:包含访问资源
4、ERROR:错误跳转访问资源
5、ASYNC:异步访问资源
Web.xml里配置
设置dispatcher标签即可
6、过滤器链(配置多个过滤器)
1、执行顺序:如果有两个过滤器:过滤器1和过滤器2
过滤器1—过滤器2—资源执行—过滤器2—过滤器1
2、过滤器先后顺序
1、注解配置:按照类名的字符串比较规则比较,值小的先执行
如:AFilter和BFilter,AFilter就先执行。
2、web.xml配置:
谁定义在上边,谁就先执行