Java Filter
概念
当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:
一般用于通用的操作,如:登录验证,统一的编码处理,敏感字符的和谐
快速入门
1.定义一个类,实现接口Filter
2.复写方法
3.配置拦截路径
1. web.xml
2. 注解
//放行
chain.doFilter(request, response);
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package test;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter("/*")
/**
*
* @author 郑佳杰
*/
public class Qql implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("hello");
//放行
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
一些细节
web.xml配置方式
在web.xml插入这段代码即可使过滤器生效
注释习惯用//
<filter>
<filter-name>demo1</filter-name> //随便定义的一个名字
<filter-class>test.Qql</filter-class> //该名字对应的类位置
</filter>
<filter-mapping>
<filter-name>demo1</filter-name> //和上面定义的名字一致就行
<url-pattern>/*</url-pattern> //设置要生效路径
</filter-mapping>
执行流程
例题代码

结果:

所以流程是在访问jsp页面前先执行过滤器代码,之后如果有放行就进入jsp页面。 然后在jsp页面回到过滤器是执行放行下面的代码而不是从头开始。
生命周期
在服务器启动时调用init方法创建对象,在服务器正常关闭时调用destory方法销毁
过滤器配置
1.拦截路径配置:
1.具体资源路径: /index.jsp 只对描述的文件生效
2.目录拦截 : /user/* user文件夹目录下的所有文件都生效
3.后缀名拦截: *.jsp 所有jsp文件都生效
4.都得死: /* 全部生效!
2.拦截方式的配置:资源被访问的方式
1.注解配置:设置dispatcherType属性
1.REQUEST:默认情况 浏览器直接请求资源(重要)
2.FORWORD:转发来访问资源(重要)
3.INCLUDE:包含访问资源
4.ERROR:错误跳转资源
5.ASYNC:异步访问
格式样例:@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.REQUEST)
2.web.xml 设置dispatcherType标签
过滤器链(配置多个过滤器)
1.执行顺序?
假设有过滤器1,过滤器2 1在2前
执行顺序为:
过滤器1
过滤器2
资源执行
过滤器2
过滤器1
2.如何知道谁在前?
注解配置:
根据类的字典序排序决定 先小谁先执行
web.xml:
简单例子
- 登录判断,如果访问的界面就是去登录就放行,如果不是就必须去判断用户是否登录了
注意一些CSS资源也需要去判断,避免被过滤器拦截!


浙公网安备 33010602011771号