springBoot(8):web开发-Servlets, Filters, listeners
一、说明
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{//...}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。