SpringBoot 之Servlet、 Filter、Listener应用开发
Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、 Filter、Listener等等。在传统SSH开发中,,web.xml就是非常重要的一个配置,无论是servlet、filter、listener都需要在web.xml里面配置下,随项目启动而把他们加载进去。但是,切换到springboot之后,web.xml之类的繁琐的配置基本上都不见了。
现在介绍一下在spring boot中的三种实现方式实现servlet、filter、listener。
方法一:通过注册ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制
public class DemoServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get method!"); doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("post method"); response.getWriter().write("hello springBoot"); } } public class DemoFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init filter"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("do filter"); chain.doFilter(request, response); } @Override public void destroy() { System.out.println("destroy filter"); } } public class DemoListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("contextInitialized"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("contextDestroyed"); } } @SpringBootApplication public class SpringBootApplication { @Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new DemoServlet(), "/*"); } @Bean public FilterRegistrationBean filterRegistrationBean() { return new FilterRegistrationBean(new DemoFilter(), servletRegistrationBean()); } @Bean public ServletListenerRegistrationBean<CustomListener> servletListenerRegistrationBean() { return new ServletListenerRegistrationBean<DemoListener>(new DemoListener()); } public static void main(String[] args) { SpringApplication.run(SpringBootApplication.class, args); } }方法二:通过实现 ServletContextInitializer 接口直接注册
@SpringBootApplication public class SpringBootApplication implements ServletContextInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.addServlet("demoServlet", new DemoServlet()).addMapping("/*"); servletContext.addFilter("demoFilter", new DemoFilter()) .addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*"); servletContext.addListener(new DemoListener()); servletContext.setInitParameter("Param", "1"); } public static void main(String[] args) { SpringApplication.run(SpringBootApplication.class, args); } }PS:这里主要说说servletContext注册Filter的addMappingForUrlPatterns(
EnumSet<DispatcherType> dispatcherTypes,
boolean isMatchAfter, String... urlPatterns)方法
参数一:dispatcherTypes
Filter是有作用范围的,我们平常都是使用Filter作用于Request,这也是Filter中dispatcherTypes属性的默认值,这个属性的意思是由该过滤器管理的资源是通过什么样的方式访问到的,可以是请求、转发、声明式错误、包含等,但是我们还可以配置使Filter作用于其他范围,这是由dispatcherTypes属性决定的,它有如下几个值:
DispatcherType.REQUEST
DispatcherType.FORWARD
DispatcherType.INCLUDE
DispatcherType.ERROR
DispatcherType.ASYNC
参数二:isMatchAfter
这里定义过滤器在mapping之前执行,还是之后执行。
参数三:urlPatterns
这个参数定义匹配规则。
如果想配置一些初始化参数,可以使用servletContext.setInitParameter(String st1,String st2)这个方法,不过Filter "init(FilterConfig filterConfig)",要利用filterConfig获取到ServletContext对象后,才能通过ServletContext获取初始化参数值,以前我们使用web.xml配置初始化参数,直接利用filterConfig.getInitParameter(String str)就可以获取初始化参数了。现在这里有点区别。
方法三:在 SpringBootApplication 上使用@ServletComponentScan 注解后,直接通过@WebServlet、 @WebFilter、@WebListener 注解自动注册
到此,就把Servlet、 Filter、Listener在Springboot如何开发,说到这里,谢谢!!!!!!
阅读更多
- Spring Boot - Web 应用开发 - Servlet, Filter, Listener
- SpringBoot中Servlet&Listener&Filter的应用
- 基于SpringBoot,SSM的Filter,Servlet,Listener,Interceptor的实现
- SpringBoot 配置 Servlet、Filter、Listener
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- SpringBoot(四)-- 整合Servlet、Filter、Listener
- springboot 2.0.0.M7 之 Servlet Listener Filter
- servlet3.0 新特性和springboot Listener和filter案例
- springboot 使用Servlet,Filter,Listener的方法
- 18.玩转Spring Boot 注册Servlet、Filter、Listener
- Spring Boot参考教程(六)Spring Boot配置Servlet,Filter,Listener,Interceptor
- springboot(4)添加Servlet、Listener、Filter
- 【spring】SpringBoot之Servlet、Filter、Listener配置
- SpringBoot框架——注册Servlet、Filter、Listener
- Spring Boot中Servlet&Filter&Listener&Interceptor的使用
- spring boot(18)-servlet、filter、listener
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- springboot系列教程(九)——Servlet、Filter、Listener
- SpringBoot初始教程之Servlet、Filter、Listener配置
- Spring Boot使用Servlet、Filter或Listener的方式