螺竹编程
发布于 2024-06-01 / 3 阅读
0

SpringBoot基础/Web:SpringBoot Servlet

介绍

当涉及到Java Web开发时,Servlet、Filter和Listener是三个重要的组件。

  1. Servlet:

    • Servlet是一个Java类,用于处理客户端发送的请求并生成响应。

    • 它基于Java Servlet API,提供了一种处理Web请求的标准方式。

    • Servlet通常被部署在Servlet容器(如Tomcat、Jetty等)中运行。

    • Servlet可以处理不同类型的请求(如GET、POST等),并生成相应的HTTP响应。

    • Servlet可以访问请求的参数、头信息、会话数据等,并与数据库或其他资源进行交互。

    • Servlet还可以通过编程方式将请求转发到其他Servlet或将响应重定向到其他URL。

  2. Filter:

    • Filter是一个Java类,用于在请求和响应之间执行预处理和后处理逻辑。

    • 它可以对请求进行过滤、修改请求参数、验证用户身份、记录日志等操作。

    • Filter基于Java Servlet Filter API,通过链式调用方式,可以形成一个过滤器链,依次处理请求。

    • Filter可以在请求到达Servlet之前拦截请求,并在响应返回给客户端之前对响应进行处理。

    • Filter可以用于实现通用的功能,如身份验证、授权、日志记录、字符编码转换等。

  3. Listener:

    • Listener是一个Java类,用于监听Web应用程序中发生的事件。

    • 它基于Java Servlet Listener API,可以监听Servlet上下文、请求、会话等不同类型的事件。

    • Servlet上下文监听器(ServletContextListener)用于在应用程序启动和关闭时执行一些初始化和清理工作。

    • 请求监听器(ServletRequestListener)用于在请求开始和结束时执行一些逻辑,如记录请求信息。

    • 会话监听器(HttpSessionListener)用于监听会话的创建和销毁事件,可以进行会话管理和统计等操作。

    • Listener可以在应用程序中注册,并通过回调方法响应特定的事件。

Demo

完整项目地址:CodeCoderCoding/Spring-Boot-Demo: Spring-Boot的Demo。Spring-Boot基础、Spring-Boot与数据库、Spring-Boot与安全、Spring-Boot与消息队列 (github.com)

核心代码如下:

MyServlet

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/website")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp){
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp){
        System.out.println("website->"+req.getParameter("website"));
    }
}

MyFilter

import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import javax.servlet.*;

@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig){
        System.out.println("myFilter->init");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("myFilter->doFilter");
        chain.doFilter(request,response);
    }
    @Override
    public void destroy() {
        System.out.println("myFilter->destroy");
    }
}

MyListener

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class MyListener implements ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("myListener->requestDestroyed");
    }
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("myListener->requestInitialized");
    }
}