一、说明

Web 开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、 Filter、Listener 等等

二、在spring boot中的三种实现方式

2.1、代码

CustomServlet.java:

packagecom.example.demo.utils.servlet;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;/***自定义servlet**/publicclassCustomServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{System.out.println("servletgetmethod");doPost(request,response);}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{System.out.println("servletpostmethod");response.getWriter().write("helloworld");}}


CustomFilter.java:

packagecom.example.demo.utils.filter;importjavax.servlet.*;importjava.io.IOException;/***自定义filter*CreatedbyDELLon2017/6/17.*/publicclassCustomFilterimplementsFilter{@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{System.out.println("initfilter");}@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{System.out.println("dofilter");chain.doFilter(request,response);}@Overridepublicvoiddestroy(){System.out.println("destroyfilter");}}

CustomListener.java:

packagecom.example.demo.utils.listener;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;/***自定义listener*CreatedbyDELLon2017/6/17.*/publicclassCustomListenerimplementsServletContextListener{@OverridepublicvoidcontextInitialized(ServletContextEventsce){System.out.println("contextInitialized");}@OverridepublicvoidcontextDestroyed(ServletContextEventsce){System.out.println("contextDestroyed");}}

2.2、方式一:通过注册ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean

2.2.1、注册ServletRegistrationBean

Application中注册bean:

/**注册CustomServlet*/@BeanpublicServletRegistrationBeanservletRegistrationBean(){returnnewServletRegistrationBean(newCustomServlet(),"/roncoo");}

2.2.2、注册FilterRegistrationBean

Application中注册bean:

/**注册CustomFilter*/@BeanpublicFilterRegistrationBeanfilterRegistrationBean(){returnnewFilterRegistrationBean(newCustomFilter(),servletRegistrationBean());}

2.2.3、注册ServletListenerRegistrationBean

Application中注册bean:

/**注册CustomListener*/@BeanpublicServletListenerRegistrationBean<CustomListener>servletListenerRegistrationBean(){returnnewServletListenerRegistrationBean<CustomListener>(newCustomListener());}


上面所有例子效果:

项目启动:

访问:http://localhost:8080/roncoo

2.3、方式二:通过实现 ServletContextInitializer 接口直接注册

Application实现 ServletContextInitializer 接口:

packagecom.example.demo;importcom.example.demo.utils.filter.CustomFilter;importcom.example.demo.utils.listener.CustomListener;importcom.example.demo.utils.servlet.CustomServlet;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.web.servlet.FilterRegistrationBean;importorg.springframework.boot.web.servlet.ServletContextInitializer;importorg.springframework.boot.web.servlet.ServletListenerRegistrationBean;importorg.springframework.boot.web.servlet.ServletRegistrationBean;importorg.springframework.context.annotation.Bean;importjavax.servlet.DispatcherType;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjava.util.EnumSet;@SpringBootApplicationpublicclassSpringbootDemo27ApplicationimplementsServletContextInitializer{@OverridepublicvoidonStartup(ServletContextservletContext)throwsServletException{servletContext.addServlet("customServlet",newCustomServlet()).addMapping("/roncoo");servletContext.addFilter("customFilter",newCustomFilter()).addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST),true,"customServlet");servletContext.addListener(newCustomListener());}publicstaticvoidmain(String[]args){SpringApplication.run(SpringbootDemo27Application.class,args);}}

2.4、方式三:

在SpringBootApplication上使用@ServletComponentScan注解后,直接通过@WebServlet、@WebFilter、@WebListener注解自动注册

@ServletComponentScan@SpringBootApplicationpublicclassSpringbootDemo27Application{//...}@WebServlet(urlPatterns="/roncoo",name="customServlet")publicclassCustomServletextendsHttpServlet{//...}@WebFilter(urlPatterns="/*")publicclassCustomFilterimplementsFilter{//...}@WebListenerpublicclassCustomListenerimplementsServletContextListener{//...}