SpringBoot整合Servlet、Filter、Listener

整合Servlet

方式1

1.在cn.nshima.springboot.servlet包下创建ServletDemo类,继承HttpServlet

@WebServlet(name = "servletDemo", urlPatterns = "/sd")
public class ServletDemo extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response){
        System.out.println("ServletDemo...");
        try {
            super.doGet(request,response);
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.在主启动类上添加@ServletComponentScan注解,让容器扫描到ServletDemo。

现在,浏览器发来/sd请求就会被ServletDemo处理。

方式2

1.在cn.nshima.springboot.servlet包下创建ServletDemo类,继承HttpServlet

public class ServletDemo extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response){
        System.out.println("ServletDemo...");
        try {
            super.doGet(request,response);
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.在cn.nshima.springboot.config包下创建MyConfig配置类

@Configuration
public class MyConfig {
    @Bean
    public ServletRegistrationBean<ServletDemo> getServletRegistrationBean(){
        ServletRegistrationBean<ServletDemo> bean = new ServletRegistrationBean<>(new ServletDemo(),"/abc");
        return  bean;
    }
}

达到了与方式1一样的效果

整合Filter

与整合Servlet相似,整合Filter也有两种方式

方式1

1.创建一个类,继承javax.servlet.Filter类,并设置要过滤的url。

@WebFilter(filterName = "filterDemo", urlPatterns = "/*")
public class FilterDemo implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init...");
    }

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

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

2.在主启动类上加上@ServletComponentScan注解,让容器扫描到FilterDemo.

方式2

在配置类中注入FilterRegistrationBean,与整合Servlet的方式2相似

@Configuration
public class MyConfig {
	@Bean
    public FilterRegistrationBean<FilterDemo> getFilterRegistrationBean(){
        FilterRegistrationBean<FilterDemo> bean = new FilterRegistrationBean<>(new FilterDemo());
        return bean;
    }
}

整合Listener

方式1

1.创建ListenerDemo ,继承了ServletContextListener,可以监听容器的创建与销毁

@WebListener
public class ListenerDemo  implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("servlet context initialized");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("servlet context destroyed");
    }
}

2.在主启动类上加上@ServletComponentScan注解

方式2

在配置类中注入ServletListenerRegistrationBean bean

@Configuration
public class MyConfig {

    @Bean
    public ServletListenerRegistrationBean<ListenerDemo> getServletListenerRegistrationBean(){
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
        bean.setListener(new ListenerDemo());
        return bean;
    }
}

总结

整合Servlet、Filter、Listener其实就是将它们加入到容器中,与注入普通Bean的方式相似。


版权声明:本文为ZdragonW原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。