16. 웹 네이티브 컴포넌트 인젝션(서블릿, 필터, 리스너)


[Shang Silicon Valley] SpringBoot2 Zero-Basic 입문 튜토리얼 - 강사: Lei Fengyang
Notes

길은 아직 진행 중이고, 꿈은 여전히 ​​기다리고 있다

1. 기본 서블릿 API 사용

이런 방식으로 기본 Servlet API를 사용하는 것이 좋습니다.

1.1, 서블릿

Servlet 3.0 이상에서 제공되는 기본 주석을 사용하십시오.

@WebServlet(urlPatterns = “/my”)

효과: web.xml에 구성을 작성할 필요가 없고 직접 응답하며 Spring 인터셉터가 없으며 urlPatterns: 액세스 경로가 없습니다.

기본 구성 클래스 @ServletComponentScan(basePackages = “com.atguigu.admin.servlet”)에서 기본 서블릿 구성 요소를 검색할 패키지를 지정합니다. 작성하지 않으면 그룹 구성 클래스 아래의 모든 패키지가 기본적으로 검색됩니다.

@WebServlet(urlPatterns = "/my") 
public class MyServlet extends HttpServlet {
    
    

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

1.2, 필터

Servlet 3.0 이상에서 제공되는 기본 주석을 사용하십시오.

@WebFilter(urlPatterns={"/css/ ","/images/ "})

효과: web.xml, urlPatterns: 차단 경로에 구성을 작성할 필요가 없으며 여러 경로를 차단할 수 있습니다.

@WebFilter(urlPatterns={
    
    "/my"})
public class MyFilter implements Filter {
    
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
        System.out.println("MyFilter初始化完成");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
        System.out.println("MyFilter工作");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    
    
        System.out.println("MyFilter销毁");
    }
}

1.3, 청취자

Servlet 3.0 이상에서 제공되는 기본 주석을 사용하십시오.

@웹리스너

@WebListener
public class MyServletContextListener implements ServletContextListener {
    
    

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

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    
    
        System.out.println("监听项目销毁");
    }
}

1.4 네이티브 서블릿이 인터셉터에 의해 인터셉트되지 않는 이유

시스템에는 두 개의 서블릿이 있습니다(스프링 부트: DispatcherServlet–>/ 및 MyServlet -->/my)

1.5 확장: DispatchServlet 등록 방법

● DispatcherServlet 속성은 컨테이너에 자동으로 구성되어 WebMvcProperties에 바인딩되며, 해당 구성 파일 구성 항목은 spring.mvc이다.
● ServletRegistrationBean을 통해 DispatcherServlet을 구성합니다.
● 기본 매핑은 / 경로입니다.

여기에 이미지 설명을 삽입하세요
개발을 위해 Tomcat-Servlet을 사용하기 전에는 여러 서블릿 경로가 서로 겹치고 정확한 최적화 원칙을 사용하여 여러 서블릿이 동일한 레이어 경로를 처리할 수 있습니다.

예:

두 개의 경로
A: /my/
B: /
my/1 /my/1이 전송되면 B 경로가 사용되고, /my/2가 전송되면 A 경로가 사용됩니다.

2. RegistrationBean 사용

ServletRegistrationBean, FilterRegistrationBean, ServletListenerRegistrationBean을 사용하여 구성 요소를 등록할 수도 있습니다.

@Configuration
public class MyRegistConfig {
    
    

    // servlet
    @Bean
    public ServletRegistrationBean myServlet() {
    
    
        MyServlet servlet = new MyServlet();
        return new ServletRegistrationBean<MyServlet>(servlet, "/my");
    }

    // filter
    @Bean
    public FilterRegistrationBean myFilter() {
    
    
        MyFilter myFilter = new MyFilter();
        FilterRegistrationBean filter = new FilterRegistrationBean(new MyFilter());
        filter.setUrlPatterns(Arrays.asList("/my"));
        return filter;
    }

    // listener
    @Bean
    public ServletListenerRegistrationBean myListener() {
    
    
        MyServletContextListener listener = new MyServletContextListener();
        return new ServletListenerRegistrationBean(listener);
    }
}

Supongo que te gusta

Origin blog.csdn.net/zhao854116434/article/details/130251261
Recomendado
Clasificación