• SpringBoot注册web组件


    目录

    前言

    一、注册Servlet组件

    1.1  使用SpringBoot注解加继承HttpServet类注册

    1.2 通过继承HttpServet类加配置类来进行注册

    二、注册Listener组件

    2.1  使用SpringBoot注解和实现ServletContextListener接口注册

    2.2 ServletContextListener接口和配置类来进行注册

    三、注册Filter组件

    3.1  使用SpringBoot注解加实现Filter接口注册

    3.2 通过实现Filter接口和配置类来进行注册通过实现


    前言

    Servlet是Java Web应用程序的基础,它提供了处理客户端请求的机制。Servlet三大组件是指Servlet、Filter和Listener,它们是Java Web应用程序的核心组件。

    1. Servlet:Servlet是Java Web应用程序的基础,它是一个Java类,用于处理客户端请求并生成响应。Servlet可以通过注解或web.xml文件进行配置,它通常用于处理HTTP请求和响应。
    2. Filter:Filter是一个Java类,用于拦截和处理客户端请求和响应。Filter可以在请求到达Servlet之前或响应返回客户端之前执行预处理和后处理操作,例如验证用户身份、编码解码、压缩和解压缩等。
    3. Listener:Listener是一个Java类,用于监听Web应用程序中的事件,并在事件发生时执行相应的操作。Listener可以通过注解或web.xml文件进行配置,它通常用于处理应用程序启动、停止、会话创建和销毁等事件。

    总之,Servlet三大组件是Java Web应用程序的核心组件,它们分别用于处理请求、拦截请求和监听事件,从而实现了一个完整的Java Web应用程序。

    一、注册Servlet组件

    由于SpringBoot项目没有web.xml文件,所以无法在web.xml中注册web组件,SpringBoot有自己的方式注册web组件。

    1.1  使用SpringBoot注解加继承HttpServet类注册

    编写servlet,首先是要添加@WebServlet注解;代码如下:

    1. package com.example.demo.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. @WebServlet("/first")
    9. public class FirstServlet extends HttpServlet {
    10. @Override
    11. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. System.out.println("First Servlet......");
    13. super.doGet(req, resp);
    14. }
    15. }

    启动类添加扫描Web组件用到的注解@ServletComponentScan

    OK,直接运行看效果:访问:http://localhost:8080/first

    是可以直接打印出来的。

    1.2 通过继承HttpServet类加配置类来进行注册

    ok,接下来我们讲解第二种注册方式,通过继承HttpServet类来进行注册,代码如下:

    1. package com.example.demo.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. public class SecondServlet extends HttpServlet {
    8. @Override
    9. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    10. System.out.println("Second Servlet........");
    11. super.doGet(req, resp);
    12. }
    13. }

    这里我们需要新建一个配置类,将该Servlet加载到Spring容器中,配置类代码如下

    1. package com.example.demo.config;
    2. import com.example.demo.servlet.SecondServlet;
    3. import org.springframework.boot.web.servlet.ServletRegistrationBean;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. @Configuration
    7. public class ServletConfig {
    8. // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    9. @Bean
    10. public ServletRegistrationBean getServletRegistrationBean(){
    11. // 注册Servlet组件
    12. ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
    13. // 将Servlet组件添加访问路径
    14. bean.addUrlMappings("/second");
    15. return bean;
    16. }
    17. }

    OK,然后我们点击运行,直接访问http://localhost:8080/second 

    因此说明了两种注册方式都是可用的。 

    二、注册Listener组件

    2.1  使用SpringBoot注解和实现ServletContextListener接口注册

    原理和上面一样只不过是直接注解,无需配置类,代码如下

    1. package com.example.demo.listener;
    2. import javax.servlet.ServletContextEvent;
    3. import javax.servlet.ServletContextListener;
    4. import javax.servlet.annotation.WebListener;
    5. @WebListener()
    6. public class FirstListener implements ServletContextListener {
    7. @Override
    8. public void contextInitialized(ServletContextEvent sce) {
    9. System.out.println("FirsListener.........");
    10. }
    11. @Override
    12. public void contextDestroyed(ServletContextEvent sce) {
    13. ServletContextListener.super.contextDestroyed(sce);
    14. }
    15. }

    此时如果我们直接运行项目就会打印上面那句话,接下来我们直接运行项目,看看是否打印,

    说明该方法是可行的,

    2.2 ServletContextListener接口和配置类来进行注册

    同样我们去掉注解使用配置类注册 ,代码如下:

    1. package com.example.demo.listener;
    2. import javax.servlet.ServletContextEvent;
    3. import javax.servlet.ServletContextListener;
    4. public class SecondListener implements ServletContextListener {
    5. @Override
    6. public void contextInitialized(ServletContextEvent sce) {
    7. System.out.println("Second Listener...........");
    8. }
    9. @Override
    10. public void contextDestroyed(ServletContextEvent sce) {
    11. ServletContextListener.super.contextDestroyed(sce);
    12. }
    13. }

    配置类代码入下:

    1. package com.example.demo.config;
    2. import com.example.demo.listener.SecondListener;
    3. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. @Configuration
    7. public class ListenerConfig {
    8. // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    9. @Bean
    10. public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
    11. // 注册Listener组件
    12. ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
    13. return bean;
    14. }
    15. }

     然后直接运行看看结果,

    OK,同样也是没有问题的。 

    三、注册Filter组件

    3.1  使用SpringBoot注解加实现Filter接口注册

    和上面一样,代码如下:

    1. package com.example.demo.filter;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebFilter;
    4. import java.io.IOException;
    5. import java.util.Scanner;
    6. //@WebFilter("/first")
    7. public class FirstServletFilter implements Filter {
    8. @Override
    9. public void init(FilterConfig filterConfig) throws ServletException {
    10. Filter.super.init(filterConfig);
    11. }
    12. @Override
    13. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    14. System.out.println("进入First Filter");
    15. Scanner scanner = new Scanner(System.in);
    16. boolean flag = scanner.nextBoolean();
    17. while(!flag){
    18. System.out.println("要输入true才放行!!!");
    19. flag = scanner.nextBoolean();
    20. }
    21. filterChain.doFilter(servletRequest,servletResponse);
    22. scanner.close();
    23. }
    24. @Override
    25. public void destroy() {
    26. Filter.super.destroy();
    27. }
    28. }

    这里访问/frist的话/我们要输入true才进行放行,看看是否成功过滤, 

    OK,这里是成功了的,接下来也是一样的操作 

    3.2 通过实现Filter接口和配置类来进行注册通过实现

    代码如下:

    1. package com.example.demo.filter;
    2. import javax.servlet.*;
    3. import java.io.IOException;
    4. import java.util.Scanner;
    5. public class SecondFilter implements Filter {
    6. @Override
    7. public void init(FilterConfig filterConfig) throws ServletException {
    8. Filter.super.init(filterConfig);
    9. }
    10. @Override
    11. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    12. System.out.println("进入Second Filter");
    13. Scanner scanner = new Scanner(System.in);
    14. boolean flag = scanner.nextBoolean();
    15. while(!flag){
    16. System.out.println("要输入true才可以放行!!!");
    17. flag = scanner.nextBoolean();
    18. }
    19. filterChain.doFilter(servletRequest,servletResponse);
    20. scanner.close();
    21. }
    22. @Override
    23. public void destroy() {
    24. Filter.super.destroy();
    25. }
    26. }

    配置类代码如下:

    1. package com.example.demo.config;
    2. import com.example.demo.filter.SecondFilter;
    3. import org.springframework.boot.web.servlet.FilterRegistrationBean;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. @Configuration
    7. public class FilterConfig {
    8. // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    9. @Bean
    10. public FilterRegistrationBean getFilterRegistrationBean (){
    11. // 注册filter组件
    12. FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
    13. // 添加过滤路径
    14. bean.addUrlPatterns("/second");
    15. return bean;
    16. }
    17. }

    同样这里访问/second的话/我们要输入true才进行放行,看看是否成功过滤,

    OK,这里已经成功实现了!!! 

  • 相关阅读:
    Docker基本操作五 (挂载数据卷)
    机器学习从入门到放弃:我们究竟是怎么教会机器自主学习的?
    面试系列MySql:索引优化
    Spring Cloud Alibaba —— 服务注册与配置中心
    Android 设置中增加 OTG 开关以方便调试
    [算法日志]图论刷题 沉岛思想的运用
    基于java的购物中心商铺管理系统的设计与实现/商铺管理系统
    java Locale类使用
    Es中的查询操作
    解析wpf控件内部的结构
  • 原文地址:https://blog.csdn.net/qq_53317005/article/details/133140357