springboard2-注入Web原生组件(Servlet,Filter,Listene)

1.使用Servlet 原生API

@WebServlet

import javax.servlet.annotation.WebServlet;
@WebServlet("/my")//直接响应,拦截器不会进行拦截
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("6666");
    }
}

为了使请求能够生效,需要在启动类添加注解:@ServletComponentScan(basePackages = "com.tguigu.admin"):扫描这个文件下的里面的@WebServlet注解

@WebFilter(urlPatterns={"/css/*","/images/*"}):拦截器

package com.tguigu.admin.servlet;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@Slf4j
@WebFilter(urlPatterns = {"/css/*","/images"})//拦截器拦截
public class MyFilter implements Filter {
    /**
     * 初始化
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
            log.info("Myfilter初始化...");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        log.info("Myfilter工作...");
        filterChain.doFilter(servletRequest,servletResponse);
    }
    @Override
    public void destroy() {
        log.info("Myfilter销毁...");
    }
}

@WebListener:监听器

package com.tguigu.admin.servlet;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@Slf4j
@WebListener//说明这是一个监听器
public class MyServletContextListener implements ServletContextListener {
     // 监听当前项目初始化
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        log.info("监听项目初始化能完成");
    }
    // 监听当前项目销毁
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        log.info("监听项目销毁");
    }
}

2、使用RegistrationBean

不使用@WebListener,@WebFilter,@WebServlet,使用ServletRegistrationBean,、FilterRegistrationBean, 、ServletListenerRegistrationBean,通过配置类完成,上面那几个类还是要写

package com.tguigu.admin.servlet;

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 java.util.Arrays;

@Configuration
public class MyRegisiConfig {
    @Bean
    public ServletRegistrationBean myservlet(){
        MyServlet myServlet = new MyServlet();

        return new ServletRegistrationBean(myServlet,"/my","/my02");
    }
    @Bean
    public FilterRegistrationBean myFilter(){
        MyFilter myFilter = new MyFilter();
        //return new FilterRegistrationBean(myFilter,myservlet());//拦截myservlet()的路径(第一种方式)
        //第二种方式
        FilterRegistrationBean bean = new FilterRegistrationBean(myFilter);
        bean.setUrlPatterns(Arrays.asList("/my","/my02"));//拦截路径
        return bean;
    }
    @Bean
    public ServletListenerRegistrationBean myListener(){
        MyServletContextListener myServletContextListener = new MyServletContextListener();
        return new ServletListenerRegistrationBean(myServletContextListener);//监听器

    }
}

 

posted @ 2021-04-17 17:30  李尚人间  阅读(174)  评论(0)    收藏  举报