javaweb----Filter
定义
过滤器:基本功能是对servlet容器调用Servlet的过程进行拦截,从而在Servlet响应前后实现一些特殊功能
javaAPI提供三个接口,Filter,FilterChain,FilterConfig
实现接口Filter
public class LoginFilter2 implements Filter {
public LoginFilter2() {
// TODO Auto-generated constructor stub
}
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(request,response);
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
生命周期:加载----->调用构造器(调用一次)-------->初始化init()(调用一次)------->doFilter()(可以调用多次和servlet中的service一样)
实例
1.login.jsp代码 ,hello.jsp就不给出了,随便写点
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/hello.jsp" method="post">
用户:<input type="text" name="username">${user_msg }<br>
密码:<input type="password" name="password">${pass_msg}<br>
<button>提交</button>
</form>
</body>
</html>
- LoginFilter拦截器用于检查用户名 ,获取初始化参数“Tom”来比较
package com.filter;
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;
public class LoginFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain arg2)
throws IOException, ServletException {
String username=request.getParameter("username");
String password=request.getParameter("password");
String name=config.getInitParameter("Username");
if(username.equals(name)) {
arg2.doFilter(request, response);
}else {
request.setAttribute("user_msg", "用户名错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
FilterConfig config;
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config=config;
}
}
3.web.XML配置代码,和Servlet配置一样,只是名不一样
注意:自己配置的Filter拦截顺序就是代码书写顺序,如果使用注解自动配置的话拦截顺序是按Filter类的名来排序的,
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<context-param>
<param-name>Password</param-name>
<param-value>1234</param-value>
</context-param>
<filter>
<filter-name>loginfilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
<init-param>
<param-name>Username</param-name>
<param-value>Tom</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginfilter</filter-name>
<url-pattern>/hello.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>checkfilter</filter-name>
<filter-class>com.filter.CheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>checkfilter</filter-name>
<url-pattern>/hello.jsp</url-pattern>
</filter-mapping>
</web-app>
4.检查密码的代码,重点练习获取全局变量
package com.filter;
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;
public class CheckFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
String password=arg0.getParameter("password");
String pass=config.getServletContext().getInitParameter("Password");
if(password.equals(pass)) {
arg2.doFilter(arg0, arg1);
}else {
arg0.setAttribute("pass_msg", "密码错误");
arg0.getRequestDispatcher("login.jsp").forward(arg0, arg1);
}
}
FilterConfig config;
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config=config;
}
}
分类:
javaWeb学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具