一、过滤器的基本概念
-
生命周期:
- 过滤器具有三个生命周期方法:
init(FilterConfig config)
: 初始化方法,在 Web 容器加载过滤器时调用一次。doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
: 主要处理方法,每次请求或响应经过过滤器时调用。destroy()
: 销毁方法,在 Web 容器卸载过滤器时调用
- 过滤器具有三个生命周期方法:
二、过滤器写法:
package UI;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
//使用注解配置过滤器,*表示所有请求都会被过滤
@WebFilter("/*")
//实现Filter接口
public class guolvqi implements Filter {
@Override
//这个方法在过滤器初始化时由容器调用
//它通常用于执行一次性设置,例如加载配置文件或数据库连接等。
//在这个例子中,它只是打印一条消息表明过滤器已经被初始化。
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化");
}
//这个方法在容器卸载过滤器时调用。
//通常用于释放过滤器所占用的资源。
//在这个例子中,它只是打印一条消息表明过滤器已经被卸载。
@Override
public void destroy() {
System.out.println("过滤器结束");
}
//这是过滤器的核心方法,每当一个请求到达时都会被调用。
//在这个方法中,您可以编写实际的过滤逻辑,例如检查用户是否已经登录、修改请求或响应对象等。
//在这个例子中,它只是打印一条消息表明客户端发出了请求,然后通过里面的方法将请求传递给下一个目标
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("客户端发出请求");
filterChain.doFilter(servletRequest,servletResponse);
}
}
需要注意的是@WebFilter(),用来区分哪些跳转请求要经过过滤器。
@WebFilter("/*")是指所有都拦截,
@WebFilter("/user")指只拦截@WebServlet("/user")的跳转,
@WebFilter("/user/*")指拦截@WebServlet("/user/.....")下的所有跳转。
如果没有这个方法那么跳转就被拦截,有了就是跳转从这里路过;
跳转结果;