过滤器:是javaWeb三大组件之一:Servlet,listener,filter,作用:拦截请求过滤响应
过滤器代码实现
1、实现Filter接口
2、重写dofilter方法
3、配置 Filter 的拦截路径
package com.blb.request;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class FilterDemo implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//在 web 工程启动的时候执行(Filter 已经创建)
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//每次拦截到请求,就会执行(访问一次,拦截一次请求(根据web.xml中的配置拦截请求))
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
if(user==null){
request.getRequestDispatcher("/login.jsp").forward(request,servletResponse);
return;
}
// 1.执行下一个Filter过滤器(如果有Filter),执行目标资源
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
//停止 web 工程的时候,就会执行(停止 web 工程,也会销毁 Filter 过滤器)
}
}
设置多层过滤器:过滤顺序:在多个 Filter 过滤器执行的时候,他们的优先顺序是由他们在 web.xml 中从上到下配置的顺序决定的!
FilterConfig 类见名知义,它是 Filter 过滤器的配置文件类。
Tomcat 每次创建 Filter 的时候,也会同时创建一个 FilterConfig 类,这里包含了 Filter 配置文件的配置息。
FilterConfig 类的作用是获取 filter 过滤器的配置内容
获取 Filter 的名称 filter-name 的内容
获取在 Filter 中 wen.xml 配置的 init-param 初始化参数
获取 ServletContext 对象
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("2.Filter 初始化方法 init(FilterConfig filterConfig)");
// 1. 获取 Filter 的名称 filter-name 的内容 (web-xml 中配置的名称)
System.out.println("filter-name:" + filterConfig.getFilterName());
// 2. 获取在 web.xml 中配置的 init-param 初始化参数
System.out.println("初始化参数username的值是:" + filterConfig.getInitParameter("username"));
System.out.println("初始化参数url的值是:" + filterConfig.getInitParameter("url"));
// 3. 获取 ServletContext 对象
System.out.println(filterConfig.getServletContext());
}
拦截器
- 拦截器的概念:java里的拦截器时动态拦截Action调用的对象,他提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中重用部分代码方式。在Aop中,拦截器用于在某个方法或者字段被访问之前,进行拦截。
- 拦截器原理:基于java的反射机制(动态代理)实现的,大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时