Servlet 过滤器入门示例
推荐阅读:
Servlet 过滤器的作用
Servlet 过滤器用于在请求到达 Servlet 之前和响应返回客户端之前对请求和响应进行预处理和后处理。过滤器可以用于:
- 请求和响应的修改:可以修改请求和响应的内容。
- 日志记录:记录请求和响应的信息,便于调试和监控。
- 身份验证和授权:检查用户的身份和权限。
- 性能监控:分析请求的处理时间。
- 跨域请求处理:处理 CORS(跨域资源共享)相关的请求。
Servlet 过滤器的基本结构
一个 Servlet 过滤器需要实现javax.servlet.Filter
接口,并重写以下方法:
init(FilterConfig filterConfig)
:初始化过滤器。doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
:对请求和响应进行处理。destroy()
:销毁过滤器。
示例项目
下面是一个简单的 Servlet 过滤器示例项目,展示如何创建和使用过滤器。
1. 创建 Maven 项目
首先,创建一个 Maven 项目,并在pom.xml
中添加 Servlet API 依赖:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
2. 创建过滤器
创建一个简单的过滤器,记录请求的开始时间和结束时间:
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") // 过滤所有请求
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化代码
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
long startTime = System.currentTimeMillis();
// 继续处理请求
chain.doFilter(request, response);
long duration = System.currentTimeMillis() - startTime;
System.out.println("Request processed in " + duration + " ms");
}
@Override
public void destroy() {
// 清理资源
}
}
3. 创建 Servlet
创建一个简单的 Servlet,返回一个欢迎消息:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/welcome")
public class WelcomeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Welcome to the Servlet Filter Example!</h1>");
}
}
4. 配置 web.xml(可选)
如果不使用注解,可以在web.xml
中配置过滤器和 Servlet:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>LoggingFilter</filter-name>
<filter-class>your.package.LoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>your.package.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
5. 运行项目
- 部署到支持 Servlet 的容器(如 Apache Tomcat)。
- 访问
http://localhost:8080/your-app/welcome
,会看到欢迎消息,并且在控制台中会打印请求处理的时间。
参考:ChatGPT