Servlet 过滤器入门示例

推荐阅读:

Servlet 简介及入门示例

Tomcat 使用入门

Servlet 过滤器的作用

Servlet 过滤器用于在请求到达 Servlet 之前和响应返回客户端之前对请求和响应进行预处理和后处理。过滤器可以用于:

  1. 请求和响应的修改:可以修改请求和响应的内容。
  2. 日志记录:记录请求和响应的信息,便于调试和监控。
  3. 身份验证和授权:检查用户的身份和权限。
  4. 性能监控:分析请求的处理时间。
  5. 跨域请求处理:处理 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

posted @ 2024-11-16 01:32  Higurashi-kagome  阅读(5)  评论(0编辑  收藏  举报