zoukankan      html  css  js  c++  java
  • 【SpringBoot】SpringBoot Servlet三大组件 Servlet、Filter、Listener(十)

      本例介绍Servlet三大组件 Servlet、Filter、Listener

      由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。 注册三大组件用以下方式

    Servlet

      1、新建一个SpringBoot Web项目,新建一个MyServlet类,继承 HttpServlet 

     1 package com.test.springboot.servlet;
     2 
     3 import javax.servlet.ServletException;
     4 import javax.servlet.http.HttpServlet;
     5 import javax.servlet.http.HttpServletRequest;
     6 import javax.servlet.http.HttpServletResponse;
     7 import java.io.IOException;
     8 
     9 public class MyServlet extends HttpServlet {
    10 
    11     @Override
    12     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13         doPost(req, resp);
    14     }
    15 
    16     @Override
    17     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    18         System.out.println("=====MyServlet=====");
    19         super.doPost(req, resp);
    20     }
    21 }

      2、注入Servlet,SpringBoot注入Servlet有2种方式

        方法一:使用注入ServletRegistrationBean方式注入Servlet

    1 @Bean
    2 public ServletRegistrationBean myServlet(){
    3     ServletRegistrationBean registrationBean = new ServletRegistrationBean( );
    4     registrationBean.setServlet(new MyServlet());
    5     registrationBean.setUrlMappings(Arrays.asList("/myServlet"));
    6     return  registrationBean;
    7 }

        方法二:使用@WebServlet注解的方式注入

            在MyServlet类上使用@WebServlet,并在SpringBoot启动类上使用@ServletComponentScan注解,扫描被注解的Servlet

    1 @WebServlet(urlPatterns = "/myServlet")
    2 public class MyServlet extends HttpServlet {

            Application.java

     1 @SpringBootApplication
     2 // 默认扫描当前包及子目录下的类
     3 @ServletComponentScan
     4 public class Application {
     5 
     6     public static void main(String[] args) {
     7         // Spring应用启动
     8         SpringApplication.run(Application.class, args);
     9     }
    10 }

      3、测试,在浏览器中输入地址:ip:端口/项目名/myServlet,即可访问MyServlet

    Filter

      1、新建一个SpringBoot Web项目,新建一个MyFilter类,实现Filter接口

     1 package com.test.springboot.filter;
     2 
     3 import javax.servlet.*;
     4 import javax.servlet.http.HttpFilter;
     5 import java.io.IOException;
     6 
     7 public class MyFilter implements Filter {
     8 
     9     @Override
    10     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    11         System.out.println("====MyFilter====");
    12         chain.doFilter(request, response);
    13     }
    14 }

      2、注入Filter,SpringBoot注入Filter有2种方式

        方法一:使用注入FilterRegistrationBean方式注入Filter

    1 @Bean
    2 public FilterRegistrationBean myFilter(){
    3     FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter());
    4     filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
    5     return filterRegistrationBean;
    6 }

        方法二:使用@WebFilter注解的方式注入

            在MyFilter类上使用@WebFilter,并在SpringBoot启动类上使用@ServletComponentScan注解,扫描被注解的Filter,同上

    1 @WebFilter(filterName = "myFilter",urlPatterns = "/*")
    2 public class MyFilter implements Filter {

      3、测试,请求任意地址都会经过MyFilter

     Listener

       1、新建一个SpringBoot Web项目,新建一个MyListener类

     1 package com.test.springboot.listener;
     2 
     3 
     4 import javax.servlet.ServletContextEvent;
     5 import javax.servlet.ServletContextListener;
     6 
     7 public class MyListener implements ServletContextListener {
     8 
     9     public  void contextInitialized(ServletContextEvent sce) {
    10         System.out.println("contextInitialized.....");
    11     }
    12 
    13     public void contextDestroyed(ServletContextEvent sce) {
    14         System.out.println("contextDestroyed.....");
    15     }
    16 }

      2、注入Filter,SpringBoot注入Listener有2种方式

        方法一:使用注入ServletListenerRegistrationBean方式注入Listener

    1 @Bean
    2 public ServletListenerRegistrationBean myListener(){
    3     ServletListenerRegistrationBean listener = new ServletListenerRegistrationBean(new MyListener());
    4     return listener;
    5 }

        方法二:使用@WebListener注解的方式注入

            在MyListener类上使用@WebListener,并在SpringBoot启动类上使用@ServletComponentScan注解,扫描被注解的Listener,同上

    1 @WebListener
    2 public class MyListener implements ServletContextListener {

      3、测试,项目启动即可看到Listener运行

  • 相关阅读:
    第三章节 BJROBOT 角速度校正 【ROS全开源阿克曼转向智能网联无人驾驶车】
    第二章节 BJROBOT IMU 自动校正 【ROS全开源阿克曼转向智能网联无人驾驶车】
    【扩展】链式编程初识
    【扩展】随机数
    一、.Net基础【1.5】封装MessageBox
    一、.Net基础【1.4】不引入第三变量,交换两个变量的值
    一、.Net基础【1.3】AndAlso & OrElse Operators in C#短路运算符
    一、.Net基础【1.2】变量和数据类型
    一、.Net基础【1.0】入门
    ArcGIS Desktop 10.X 复习与提高【1.1】ArcGIS数据格式的介绍 Esri
  • 原文地址:https://www.cnblogs.com/h--d/p/12391785.html
Copyright © 2011-2022 走看看