0


Spring Boot:Web开发之三大组件的整合

Spring Boot

在这里插入图片描述

前言

在 Web 开发中,Servlet 、Filter 和 Listener 是 Java Web 应用中的三大组件。Servlet 是 Java 代码,通过 Java 的 API 动态的向客户端输出内容。Filter 是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。Listener 是监听器,可以监听客户端的请求、服务端的操作等,通过监听器可以自动激发一些操作。

而 Spring Boot 为 Web 开发提供了强大的支持,整合了常用的 Web 框架(如 Spring MVC ),并默认支持 Web 开发中的一些通用功能。在 Spring Boot 项目中,可以通过注解等方式轻松实现 Servlet 、Filter 、Listener 等组件的整合,从而简化 Web 应用的开发过程。下面简单介绍 Spring Boot 整合 Java Web 应用中的三大组件。

Spring Boot 整合 Servlet

Spring Boot 为 Servlet API 提供了自动配置,整合过程相对简单。而将传统的 Servlet 组件集成到 Spring Boot 的应用中具体有两种方法。

简单示例:
第一种方法:
首先,在 Controller 包内创建 ServletDemo 类,使用 @WebServlet 注解配置 Servlet 映射

packagecn.edu.SpringBootDemo.Controller;importjakarta.servlet.ServletException;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.HttpServlet;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;importjava.io.IOException;@WebServlet(urlPatterns ="/ServletDemo.html")publicclassServletDemoextendsHttpServlet{// 覆盖 doGet() 方法@OverrideprotectedvoiddoGet(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{System.out.println("调用 ServletDemo 的 doGet 方法!!!");}}

然后,在 Spring Boot 启动类 SpringBootDemoApplication 上添加 @ServletComponentScan 注解

packagecn.edu.SpringBootDemo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication@ServletComponentScan// 用于启用对带有 @WebServlet、@WebFilter、@WebListener 等 Servlet 3.0 注解的类的自动扫描和注册publicclassSpringBootDemoApplication{publicstaticvoidmain(String[] args){SpringApplication.run(SpringBootDemoApplication.class, args);}}

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/ServletDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述

第二种方法:
第二种方法与第一种方法的区别是无需使用到 @WebServlet 和 @ServletComponentScan 两个注解,而是使用一个返回类型为 ServletRegistrationBean 的方法替代。

首先,在 ServletDemo 类上注释 @WebServlet 注解

packagecn.edu.SpringBootDemo.Controller;importjakarta.servlet.ServletException;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.HttpServlet;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;importjava.io.IOException;//@WebServlet(urlPatterns = "/ServletDemo.html")publicclassServletDemoextendsHttpServlet{// 覆盖 doGet() 方法@OverrideprotectedvoiddoGet(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{System.out.println("第二种方法:调用 ServletDemo 的 doGet 方法!!!");}}

然后,在 Spring Boot 启动类 SpringBootDemoApplication 上也注释 @ServletComponentScan 注解,并添加一个返回类型为 ServletRegistrationBean 的方法
在这里插入图片描述

packagecn.edu.SpringBootDemo;importcn.edu.SpringBootDemo.Controller.ServletDemo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.web.servlet.ServletRegistrationBean;importorg.springframework.context.annotation.Bean;@SpringBootApplication//@ServletComponentScan // 用于启用对带有 @WebServlet、@WebFilter、@WebListener 等 Servlet 3.0 注解的类的自动扫描和注册publicclassSpringBootDemoApplication{publicstaticvoidmain(String[] args){SpringApplication.run(SpringBootDemoApplication.class, args);}@Bean// 注入 Spring 容器当中publicServletRegistrationBeangetBean(){// Servlet 注册到 Spring Boot 当中ServletRegistrationBean bean =newServletRegistrationBean(newServletDemo());// url 地址关联
        bean.addUrlMappings("/ServletDemo.html");return bean;}}

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/ServletDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述

Spring Boot 整合 Filter

在 Spring Boot 中,整合 Filter 通常涉及到创建 Filter 类,并通过配置将其注册到 Servlet 容器中,具体有两种方法,与整合 Servlet 类似。

简单示例:
第一种方法:
首先,在项目中创建 Web 包并在其包内创建一个 FilterDemo 类,使用 @WebFilter 注解配置 Filter 映射

packagecn.edu.SpringBootDemo.Web;importjakarta.servlet.*;importjakarta.servlet.annotation.WebFilter;importjava.io.IOException;@WebFilter(filterName ="FilterDemo",urlPatterns ={"/ServletDemo.html"})publicclassFilterDemoimplementsFilter{@Overridepublicvoidinit(FilterConfig filterConfig)throwsServletException{Filter.super.init(filterConfig);}@OverridepublicvoiddoFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)throwsIOException,ServletException{System.out.println(" FilterDemo 拦截器拦截进行处理");
        filterChain.doFilter(servletRequest,servletResponse);System.out.println(" FilterDemo 拦截器已经让其放行");}@Overridepublicvoiddestroy(){Filter.super.destroy();}}

然后,在 Spring Boot 启动类 SpringBootDemoApplication 上添加 @ServletComponentScan 注解
在这里插入图片描述

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/ServletDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述

第二种方法:
第二种方法与第一种方法的区别也是无需使用到 @WebFilter 和 @ServletComponentScan 两个注解,而是使用一个返回类型为 FilterRegistrationBean 的方法替代。

首先,在 FilterDemo 类上注释 @WebFilter 注解
在这里插入图片描述

然后,在 Spring Boot 启动类 SpringBootDemoApplication 上也注释 @ServletComponentScan 注解,并添加一个返回类型为 FilterRegistrationBean 的方法
在这里插入图片描述

@BeanpublicFilterRegistrationBeangetFilterBean(){FilterRegistrationBean filterRegistrationBean =newFilterRegistrationBean(newFilterDemo());
    filterRegistrationBean.addUrlPatterns("/ServletDemo.html");return filterRegistrationBean;}

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/ServletDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述

Spring Boot 整合 Listener

在 Spring Boot 中,整合 Listener 通常涉及到创建 Listener 类,并实现相应的 Servlet API 监听器接口,具体有两种方法,与整合 Servlet 类似。

Servlet API 监听接口

  • ServletContextListener:用于监听 Web 应用( ServletContext )的生命周期事件。当 Web 应用启动或关闭时,可以执行一些初始化和清理工作
  • HttpSessionListener:用于监听用户会话( HttpSession )的生命周期事件。当会话创建或销毁时,可以执行一些与用户会话相关的逻辑
  • ServletRequestListener:用于监听 HTTP 请求( ServletRequest )的生命周期事件。当请求开始和结束时,可以执行一些与请求相关的逻辑
  • 属性监听器:用于监听 Web 应用、会话或请求中的属性变化事件。当属性被添加、替换或移除时,可以执行相应的逻辑 – ServletContextAttributeListener:监听 ServletContext 属性的变化 – HttpSessionAttributeListener:监听 HttpSession 属性的变化 – ServletRequestAttributeListener:监听 ServletRequest 属性的变化

简单示例:
第一种方法:

首先,在 Web 包内创建一个 ListenerDemo 类,使用 @WebListener 注解配置 Listener 映射

packagecn.edu.SpringBootDemo.Web;importjakarta.servlet.ServletContextEvent;importjakarta.servlet.ServletContextListener;importjakarta.servlet.annotation.WebListener;@WebListenerpublicclassListenerDemoimplementsServletContextListener{@OverridepublicvoidcontextInitialized(ServletContextEvent sce){System.out.println("系统初始化!!!");}@OverridepublicvoidcontextDestroyed(ServletContextEvent sce){}}

然后,同样在 Spring Boot 启动类 SpringBootDemoApplication 上添加 @ServletComponentScan 注解
在这里插入图片描述

最后,启动 Spring Boot 进行测试
结果如图:
在这里插入图片描述

第二种方法:
同样地,第二种方法与第一种方法的区别也是无需使用到 @WebListener 和 @ServletComponentScan 两个注解,而是使用一个返回类型为 ServletListenerRegistrationBean 的方法替代。

首先,在 ListenerDemo 类上注释 @WebListener 注解
在这里插入图片描述

然后,在 Spring Boot 启动类 SpringBootDemoApplication 上也注释 @ServletComponentScan 注解,并添加一个返回类型为 ServletListenerRegistrationBean 的方法
在这里插入图片描述

@BeanpublicServletListenerRegistrationBeangetListenerBean(){ServletListenerRegistrationBean servletListenerRegistrationBean =newServletListenerRegistrationBean(newListenerDemo());return servletListenerRegistrationBean;}

最后,启动 Spring Boot 进行测试
结果如图:
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_56886142/article/details/136794778
版权归原作者 啊Q老师 所有, 如有侵权,请联系我们删除。

“Spring Boot:Web开发之三大组件的整合”的评论:

还没有评论