Filter概念
- Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter过滤器。
- Filter 过滤器它是 JavaEE 的规范。也就是接口 。
- Filter 过滤器它的作用是:拦截请求,过滤响应。
拦截请求常见的应用场景有:
- 权限检查
- 日记操作
- 事务管理 ……等等
Filter的使用
Filter 过滤器的使用步骤:
- 编写一个类去实现 Filter 接口
- 实现过滤方法 doFilter()
- 到 web.xml 中去配置 Filter 的拦截路径
login.jsp 页面
这是登录页面。login.jsp 页面 <br>
<form action="http://localhost:8080/filter/loginServlet" method="get">
用户名:<input type="text" name="username"/> <br>
密 码:<input type="password" name="password"/> <br>
<input type="submit" />
</form>
LoginServlet 程序
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
String username=req.getParameter("username");
String password=req.getParameter("password");
if("haifan".equals(username) && "123123".equals(password)){
req.getSession().setAttribute("user",username);
resp.getWriter().write("登陆成功");
}else{
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
}
}
Filter生命周期
Filter的生命周期包含几个方法:
- 构造器方法
- init初始化方法
- doFilter过滤方法
- destroy销毁方法
第1、2步,在web工程创建的时候执行
第3步,每次拦截到请求,就会执行
第4步,停止web工程的时候,就会执行
FilterConfig类
- 这个类是Filter过滤器的配置文件类
- tomcat每次创建Filter 的时候,也会创建一个FilterConfig类,这里包含了Filter配置文件的配置信息
FilterConfig类的作用
- 获取Filter的名称,filter-name的内容
- 获取Filter 中配置的initial-param初始化参数
- 获取ServletContext对象
//获取Filter的名称,filter-name的内容
System.out.println(filterConfig.getFilterName());
//获取Filter 中配置的initial-param初始化参数
System.out.println(filterConfig.getInitParameter("user"));
//获取ServletContext对象
System.out.println(filterConfig.getServletContext());
FilterChain 过滤器链
下图描述:多个过滤器如何一起工作
- 多个过滤器中,他们执行的优先顺序是由他们在web.xml中从上到下的配置顺序决定的
- 所有的filter和目标子源默认都执行在同一个线程中
- 多个Filter共同执行的时候,都使用同一个Request对象。
Filter的拦截路径
精确比配:(匹配到某个具体文件)
<url-pattern>/a.html</url-pattern>
目录匹配 :(匹配到某个目录下所有文件)
<url-pattern>/admin/*</url-pattern>
后缀名匹配 :(表示后缀必须以.action结尾才会拦截到)
<url-pattern>*.html</url-pattern>