• SpringBoot保姆级教程(五)SpringBoot注册web组件


    目录

    一.注册Servlet

    二.注册Filter  

    三.注册Listener


    一.注册Servlet

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

     

    注册方式一
    1
    1.编写 servlet
     红框处是新创的文件
    1. import javax.servlet.ServletException;
    2. import javax.servlet.annotation.WebServlet;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. @WebServlet("/first")
    8. public class FirstServlet extends HttpServlet {
    9. @Override
    10. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    11. System.out.println("First Servlet.............");
    12. }
    13. }
    2. 启动类扫描 web 组件
    在SpringBoot项目的启动类(此项目是Springbootdemo4Application)里添加@ServletComponentScan注解
    1. import org.springframework.boot.SpringApplication;
    2. import org.springframework.boot.autoconfigure.SpringBootApplication;
    3. import org.springframework.boot.web.servlet.ServletComponentScan;
    4. @SpringBootApplication
    5. //SpringBoot启动时扫描注册注解标注的Web组件
    6. @ServletComponentScan
    7. public class Springbootdemo4Application {
    8. public static void main(String[] args) {
    9. SpringApplication.run(Springbootdemo4Application.class, args);
    10. }
    11. }

    访问localhost:8080/first,看到控制台有Servlet输出即成功! 

    注册方式二
    1
    1.编写 servlet
    1. import javax.servlet.ServletException;
    2. import javax.servlet.http.HttpServlet;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpServletResponse;
    5. import java.io.IOException;
    6. public class SecondServlet extends HttpServlet {
    7. @Override
    8. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    9. System.out.println("Second Servlet..........");
    10. }
    11. }

    2.使用配置类注册servlet

    在springbootdemo4文件夹下创建配置类ServletConfig

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

    访问localhost:8080/second,看到控制台有Servlet输出即成功!

    注解Bean的作用是在服务启动时,实例化一个对象放到Sping的ioc容器中,在需要初始化的实例,方法,内容时使用。

     

    二.注册Filter  

    项目结构:

    注册方式一
    1
    1.编写 filter
    1. import javax.servlet.*;
    2. import javax.servlet.annotation.WebFilter;
    3. import java.io.IOException;
    4. @WebFilter(urlPatterns = "/first")
    5. public class FirstFilter 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("进入First Filter");
    13. filterChain.doFilter(servletRequest,servletResponse);
    14. System.out.println("离开First Filter");
    15. }
    16. @Override
    17. public void destroy() {
    18. Filter.super.destroy();
    19. }
    20. }

    2.启动类扫描web组件

    还是在SpringBoot项目的启动类(此项目是Springbootdemo4Application)里添加@ServletComponentScan注解(刚刚已经添加过了,所以现在不用添加了)

    访问localhost:8080/first,看到控制台输出即成功!

    注册方式二
    1
    1.编写 filter
    注意这个类上面不加注解
    1. import javax.servlet.*;
    2. import java.io.IOException;
    3. public class SecondFilter implements Filter {
    4. @Override
    5. public void init(FilterConfig filterConfig) throws ServletException {
    6. Filter.super.init(filterConfig);
    7. }
    8. @Override
    9. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    10. System.out.println("进入Second Filter");
    11. filterChain.doFilter(servletRequest,servletResponse);
    12. System.out.println("离开Second Filter");
    13. }
    14. @Override
    15. public void destroy() {
    16. Filter.super.destroy();
    17. }
    18. }

    2.使用配置类注册filter

    1. import com.first.springbootdemo4.filter.SecondFilter;
    2. import org.springframework.boot.web.servlet.FilterRegistrationBean;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. @Configuration
    6. public class FilterConfig {
    7. @Bean
    8. public FilterRegistrationBean getFilterRegistrationBean(){
    9. // 注册Servlet组件
    10. FilterRegistrationBean bean=new FilterRegistrationBean(new SecondFilter());
    11. // 添加Servlet组件访问路径
    12. bean.addUrlPatterns("/second");
    13. return bean;
    14. }
    15. }

    访问localhost:8080/first,看到控制台输出即成功!

    三.注册Listener

    项目结构:

    注册方式一
    1
    1.编写 Listener
    1. import javax.servlet.ServletContextEvent;
    2. import javax.servlet.ServletContextListener;
    3. import javax.servlet.annotation.WebListener;
    4. @WebListener
    5. public class FirstListener implements ServletContextListener {
    6. public void contextInitialized(ServletContextEvent sce){
    7. System.out.println("First Listener Init......");
    8. }
    9. public void contextDestroyed(ServletContextEvent sce){}
    10. }
    2.启动类扫描web 组件
    直接启动项目查看控制台是否有相应输出,有则成功。
    注册方式二
    1
    1.编写 Listener
    1. import javax.servlet.ServletContextEvent;
    2. import javax.servlet.ServletContextListener;
    3. public class SecondListener implements ServletContextListener {
    4. public void contextInitialized(ServletContextEvent sce){
    5. System.out.println("Second Listener Init......");
    6. }
    7. public void contextDestroyed(ServletContextEvent sce){}
    8. }

    2.使用配置类注册Listener

    1. import com.first.springbootdemo4.listener.SecondListener;
    2. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. @Configuration
    6. public class ListenerConfig {
    7. @Bean
    8. public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
    9. ServletListenerRegistrationBean bean=
    10. new ServletListenerRegistrationBean(new SecondListener());
    11. return bean;
    12. }
    13. }

     直接启动项目查看控制台是否有相应输出,有则成功。

  • 相关阅读:
    UE5——C++编译MSB3073报错
    赞!优雅的Python多环境管理神器!易上手易操作!
    超越 Transformer开启高效开放语言模型的新篇章
    阿里云 短信服务——短信发送频率限制
    使用Optional和直接返回null,哪个更好?
    Java 关键字:synchronized详解
    统一授权服务
    月子会所管理系统| 月子会所小程序| 数字化门店转型
    GB/T 40623-2021 船用防静电升高地板检测
    路由器选择使用指南这三Openwrt
  • 原文地址:https://blog.csdn.net/weixin_44593822/article/details/127112325