Web native component injection is Servlet component Servlet Filter Listener

1. Native injection
First go to the directory structure
insert image description here

package com.spring.bootinit.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @User: Json
 * @Date: 2022/8/22
 **/
@WebServlet(urlPatterns="/my")  //不会走spring 拦截器  一定要打 /  要不会报错
public class Myservlet extends HttpServlet {
    
    

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
            resp.getWriter().write("6666");
    }
}



package com.spring.bootinit.servlet;

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

/**
 * @User: Json
 * @Date: 2022/8/25
 *
 **/
//urlPatterns 指定拦截 哪些路径
@WebFilter(urlPatterns = {
    
    "/css/*","/images/*"})  // 单 *  是servlet 写法  双 ** 是 spring 写法
public class MyFilter implements Filter {
    
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
        System.out.println("初始化打印==============");
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
              System.out.println("工作");
              filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
    
    
        System.out.println("销毁时打印==============");
        Filter.super.destroy();
    }
}

package com.spring.bootinit.servlet;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * @User: Json
 * @Date: 2022/8/25
 **/
@WebListener  //必须写上这个 注解  说明 这个类是一个监听器
public class MyListener implements ServletContextListener {
    
    

    @Override
    public void contextInitialized(ServletContextEvent sce) {
    
    
        System.out.println("MyListener 监听到项目初始化 完成");
        ServletContextListener.super.contextInitialized(sce);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    
    
        System.out.println("MyListener 监听到项目摧毁 完成");
        ServletContextListener.super.contextDestroyed(sce);
    }
}

package com.spring.bootinit;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages = "com.spring.bootinit")  //指定扫描的 Servlet组件路径
public class BootInitApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(BootInitApplication.class, args);
    }

}

The above method is the native injection method

  1. Spring method injection
    First comment out the class file
    @WebServlet(urlPatterns="/my") //If you don't go through spring, you must hit the interceptor/ or you won't report an error
    @WebFilter(urlPatterns = {"/css/ "," /images/ ”}) // single * is servlet writing double ** is spring writing
    @WebListener // this annotation must be written to indicate that this class is a listener

Then create a config file

package com.spring.bootinit.config;

import com.spring.bootinit.interceptor.LoginTnterceptor;
import com.spring.bootinit.servlet.MyFilter;
import com.spring.bootinit.servlet.MyListener;
import com.spring.bootinit.servlet.Myservlet;
import com.sun.org.apache.bcel.internal.generic.NEW;
import javafx.concurrent.Service;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.util.UrlPathHelper;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @User: Json
 * @Date: 2022/7/4
 **/
@Configuration(proxyBeanMethods = false)
public class WebConfig implements WebMvcConfigurer {
    
    

    @Bean
    public ServletRegistrationBean myServlet(){
    
    
        Myservlet myservlet = new Myservlet();
        return new ServletRegistrationBean(myservlet,"/my");
    }

    @Bean
    public FilterRegistrationBean myFilter(){
    
    
        MyFilter myFilter = new MyFilter();
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/my"));   //一定要打 /  要不会报错
        return new FilterRegistrationBean(myFilter);
    }

    @Bean
    public ServletListenerRegistrationBean myListener(){
    
    
        MyListener myListener = new MyListener();
        ServletListenerRegistrationBean servletListenerRegistrationBean=new ServletListenerRegistrationBean(myListener);
        return servletListenerRegistrationBean;
    }


//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
    
    
//        registry.addInterceptor(new LoginTnterceptor())
//                .addPathPatterns("/**")  // ** 拦截所有请求  包括静态资源
//                .excludePathPatterns("/login","/css/**","/js/**");  // 放行哪些请求
//        //"/css/**","/js/**" 这样配置 可以不拦截 静态资源
//    }
}

start test
insert image description here

Guess you like

Origin blog.csdn.net/Drug_/article/details/126616293