顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学。
但是java中的过滤器与生活中的过滤器的作用是相差无几的,即按照制定的一些规则来控制一些对象
过滤器是出于客户端与服务器端之间的一道过滤网,在访问资源之前,通过一系列的过滤器对请求 进行修改,判断等。把不符合规则的请求在中途拦截或修改,拦截或修改响应
1.定义一个类实现接口Filter(java.servlet)
import javax.servlet.*;
import java.io.IOException;
public class Filter1 implements javax.servlet.Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
1.init:在服务器启动后,会创建Filter对象,然后调用init方法,只执行一次用于加载资源 2.doFilter:每一次请求被拦截都会执行 3.destory:在服务器关闭后,Filter对象会被销毁,如何服务器对象正常关闭,destory方法会被执行一次 用于释放资源
2.复写方法 3.设置拦截路径 设置拦截路径有两种方法,一种是注解配置,一种是设置web.xml
注解配置:
即加上一个@WebFilter("")
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class Filter1 implements javax.servlet.Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
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_3_1.xsd"
version="3.1">
<filter>
<filter-name>demo1</filter-name>
<filter-class>Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
//设置拦截路径
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
拦截路径配置的讲解 1.具体的资源路径:/index.jsp 只有在访问index.jsp这个资源的时候过滤器才会被执行 2.拦截目录:/user/* 访问/user下的所有资源的时候过滤器才会被执行 3.后缀名拦截:.jsp 访问后缀名为jsp的资源的时候,过滤器才会被执行 4.拦截所有资源:/ 访问所有资源,都会被拦截
拦截方式的配置: 注解配置:
1.执行过滤器 2.执行放行后的资源 3.执行过滤器放行器代码下边的代码
执行顺序 如果有两个过滤器:过滤器1和过滤器2 1. 过滤器1 2. 过滤器2 3. 资源执行 4. 过滤器2 5. 过滤器1
看图按照从左到右的顺序来看就好理解了
那么有了多个过滤器之后又是怎么来判断那个过滤器先哪个过滤器后的呢? 是随机判断的?
当然不是啦
1. 注解配置: 按照类名的字符串比较规则比较,值小的先执行