SpringBoot中有两种方式可以添加 Servlet、Filter、Listener。

1.代码注册

 通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。

新建WebConfig 类,用于bean的注入,内容如下:

  1. package com.xsjt.config;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.EventListener;
  5. import java.util.List;
  6. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  7. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  8. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import com.xsjt.filter.XbqFilter;
  12. import com.xsjt.listener.XbqListener;
  13. import com.xsjt.servlet.XbqServlet;
  14.  
  15. /**
  16. * ClassName:WebConfig
  17. * 通过 @bean 注入 servlet、filter、listener
  18. * Date: 2017年11月6日 下午6:10:30
  19. * @author Joe
  20. * @version
  21. * @since JDK 1.8
  22. */
  23. @Configuration
  24. public class WebConfig {
  25.  
  26. /**
  27. * servletRegistrationBean:(使用代码注册Servlet(不需要@ServletComponentScan注解)).
  28. * @author Joe
  29. * Date:2017年11月6日下午6:13:29
  30. *
  31. * @return
  32. */
  33. @Bean
  34. public ServletRegistrationBean servletRegistrationBean(){
  35. ServletRegistrationBean registrationBean = new ServletRegistrationBean();
  36. registrationBean.setServlet(new XbqServlet());
  37. List<String> urlMappings = new ArrayList<String>();
  38. // 访问,可以添加多个
  39. urlMappings.add("/xbq/servlet");
  40. registrationBean.setUrlMappings(urlMappings);
  41. registrationBean.setLoadOnStartup(1);
  42. return registrationBean;
  43. }
  44.  
  45. /**
  46. * getDemoFilter:(使用代码注册拦截器).
  47. * @author Joe
  48. * Date:2017年11月6日下午6:17:31
  49. *
  50. * @return
  51. */
  52. @Bean
  53. public FilterRegistrationBean getDemoFilter(){
  54. XbqFilter demoFilter = new XbqFilter();
  55. FilterRegistrationBean registrationBean=new FilterRegistrationBean();
  56. registrationBean.setFilter(demoFilter);
  57. List<String> urlPatterns=new ArrayList<String>();
  58. urlPatterns.add("/*"); //拦截路径,可以添加多个
  59. registrationBean.setUrlPatterns(urlPatterns);
  60. registrationBean.setOrder(1);
  61. return registrationBean;
  62. }
  63.  
  64. /**
  65. * getDemoListener:(使用代码 引用 监听器).
  66. * @author Joe
  67. * Date:2017年11月6日下午6:35:28
  68. *
  69. * @return
  70. */
  71. @Bean
  72. public ServletListenerRegistrationBean<EventListener> getDemoListener(){
  73. ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<>();
  74. registrationBean.setListener(new XbqListener());
  75. registrationBean.setOrder(1);
  76. return registrationBean;
  77. }
  78. }

其中,代码中 XbqServlet 、XbqFilter、XbqListener 代码如下:

  1. package com.xsjt.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. /**
  11. * ClassName:XbqServlet
  12. * 通过 代码注册Servlet
  13. * Date: 2017年11月6日 下午5:13:10
  14. * @author Joe
  15. * @version
  16. * @since JDK 1.8
  17. */
  18. public class XbqServlet extends HttpServlet{
  19.  
  20. private static final long serialVersionUID = 1L;
  21.  
  22. @Override
  23. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  24. this.doPost(req, resp);
  25. }
  26.  
  27. @Override
  28. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  29. resp.setCharacterEncoding("UTF-8");
  30. resp.setContentType("text/html");
  31. PrintWriter out = resp.getWriter();
  32. out.println("<html>");
  33. out.println("<head>");
  34. out.println("<title>Hello World</title>");
  35. out.println("</head>");
  36. out.println("<body><center>");
  37. out.println("<h3>我是通过代码注册Servlet</h3>");
  38. out.println("</center></body>");
  39. out.println("</html>");
  40. }
  41. }
  1. package com.xsjt.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14.  
  15. /**
  16. * ClassName:JoeFilter
  17. * 自定义 Serlvlet 的过滤器
  18. * Date: 2017年11月6日 下午6:01:33
  19. * @author Joe
  20. * @version
  21. * @since JDK 1.8
  22. */
  23. public class XbqFilter implements Filter {
  24.  
  25. private static Logger logger = LoggerFactory.getLogger(XbqFilter.class);
  26.  
  27. @Override
  28. public void init(FilterConfig filterConfig) throws ServletException {
  29. logger.info("--xbq--初始化JoeFilter!");
  30. }
  31.  
  32. @Override
  33. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  34. HttpServletRequest req = (HttpServletRequest)request;
  35. logger.info(req.getRequestURL() + "---xbq---> doFilter ");
  36. chain.doFilter(request, response);
  37. }
  38.  
  39. @Override
  40. public void destroy() {
  41. logger.info("--xbq--销毁JoeFilter!");
  42. }
  43.  
  44. }
  1. package com.xsjt.listener;
  2.  
  3. import javax.servlet.ServletContextEvent;
  4. import javax.servlet.ServletContextListener;
  5.  
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8.  
  9. /**
  10. * ClassName:JoeListener
  11. * Date: 2017年11月6日 下午6:28:29
  12. * @author Joe
  13. * @version
  14. * @since JDK 1.8
  15. */
  16. public class XbqListener implements ServletContextListener{
  17.  
  18. private static Logger logger = LoggerFactory.getLogger(XbqListener.class);
  19.  
  20. @Override
  21. public void contextInitialized(ServletContextEvent sce) {
  22. logger.info("--xbq-监听器-ServletContext 初始化");
  23. logger.info(sce.getServletContext().getServerInfo());
  24. }
  25.  
  26. @Override
  27. public void contextDestroyed(ServletContextEvent sce) {
  28. logger.info("--xbq-监听器-ServletContext 销毁");
  29. }
  30. }

2.通过注解自动注册

在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet(urlPatterns = "/test/*")、@WebFilter、@WebListener 注解自动注册,这些注解都是JDK的,无需其他代码。

1) Servlet

  1. package com.xsjt.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. /**
  12. * ClassName:XbqServlet
  13. * 通过 @WebServlet 注解 整合Servlet
  14. * Date: 2017年11月6日 下午5:13:10
  15. * @author Joe
  16. * @version
  17. * @since JDK 1.8
  18. */
  19. @WebServlet(urlPatterns = "/joe/*")
  20. public class JoeServlet extends HttpServlet{
  21.  
  22. private static final long serialVersionUID = 1L;
  23.  
  24. @Override
  25. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  26. this.doPost(req, resp);
  27. }
  28.  
  29. @Override
  30. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  31. resp.setCharacterEncoding("UTF-8");
  32. resp.setContentType("text/html");
  33. PrintWriter out = resp.getWriter();
  34. out.println("<html>");
  35. out.println("<head>");
  36. out.println("<title>Hello World</title>");
  37. out.println("</head>");
  38. out.println("<body><center>");
  39. out.println("<h3>我是通过 @WebServlet 注解注册Servlet的</h3>");
  40. out.println("</center></body>");
  41. out.println("</html>");
  42. }
  43. }

2) Filter

  1. package com.xsjt.filter;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.Filter;
  5. import javax.servlet.FilterChain;
  6. import javax.servlet.FilterConfig;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.annotation.WebFilter;
  11. import javax.servlet.http.HttpServletRequest;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.core.annotation.Order;
  15.  
  16. /**
  17. * ClassName:JoeFilter
  18. * 自定义 Filter
  19. * @Order注解表示执行过滤顺序,值越小,越先执行
  20. * Date: 2017年11月6日 下午6:01:33
  21. * @author Joe
  22. * @version
  23. * @since JDK 1.8
  24. */
  25. @Order(1)
  26. @WebFilter(filterName = "joeFilter", urlPatterns = "/*")
  27. public class JoeFilter implements Filter {
  28.  
  29. private static Logger logger = LoggerFactory.getLogger(JoeFilter.class);
  30.  
  31. @Override
  32. public void init(FilterConfig filterConfig) throws ServletException {
  33. logger.info("--joe--初始化JoeFilter!");
  34. }
  35.  
  36. @Override
  37. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  38. HttpServletRequest req = (HttpServletRequest)request;
  39. logger.info(req.getRequestURL() + "---joe---> doFilter");
  40. chain.doFilter(request, response);
  41. }
  42.  
  43. @Override
  44. public void destroy() {
  45. logger.info("--joe--销毁JoeFilter!");
  46. }
  47. }

3) Listener

  1. package com.xsjt.listener;
  2.  
  3. import javax.servlet.ServletContextEvent;
  4. import javax.servlet.ServletContextListener;
  5. import javax.servlet.annotation.WebListener;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8.  
  9. /**
  10. * ClassName:JoeListener
  11. * Date: 2017年11月6日 下午6:28:29
  12. * @author Joe
  13. * @version
  14. * @since JDK 1.8
  15. */
  16. @WebListener
  17. public class JoeListener implements ServletContextListener{
  18.  
  19. private static Logger logger = LoggerFactory.getLogger(JoeListener.class);
  20.  
  21. @Override
  22. public void contextInitialized(ServletContextEvent sce) {
  23. logger.info("--Joe-监听器-ServletContext 初始化");
  24. logger.info(sce.getServletContext().getServerInfo());
  25. }
  26.  
  27. @Override
  28. public void contextDestroyed(ServletContextEvent sce) {
  29. logger.info("--Joe-监听器-ServletContext 销毁");
  30. }
  31. }

3.源码下载

  https://gitee.com/xbq168/spring-boot-learn

SpringBoot(四)-- 整合Servlet、Filter、Listener的更多相关文章

  1. SpringBoot学习笔记(6)----SpringBoot中使用Servlet,Filter,Listener的三种方式

    在一般的运用开发中Controller已经大部分都能够实现了,但是也不排除需要自己实现Servlet,Filter,Listener的方式,SpringBoot提供了三种实现方式. 1. 使用Bean ...

  2. SpringBoot整合WEB开发--(九)整合Servlet,Filter,Listener

    简介: 如果需要整合第三方框架时,可能还是不得不使用Servlet,Filter,Listener,Springboot中也有提供支持. @WebServlet("/my") pu ...

  3. Spring Boot整合Servlet,Filter,Listener,访问静态资源

    目录 Spring Boot整合Servlet(两种方式) 第一种方式(通过注解扫描方式完成Servlet组件的注册): 第二种方式(通过方法完成Servlet组件的注册) Springboot整合F ...

  4. ServletContextInitializer添加 servlet filter listener

    ServletContextInitializer添加 servlet filter listener https://www.cnblogs.com/pomer-huang/p/9639322.ht ...

  5. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  6. SpringBoot---注册Servlet,Filter,Listener

    1.概述 1.1.当使用  内嵌的Servlet容器(Tomcat.Jetty等)时,将Servlet,Filter,Listener  注册到Servlet容器的方法: 1.1.1.直接注册Bean ...

  7. servlet filter listener interceptor 知识点

    这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下:   概念 生命周期 使命 servlet ...

  8. springboot(3):整合Servlet,filter,listener

    1.springboot整合Servlet(2种方式) 添加maven依赖:spring-boot-starter-web 1>通过注解扫描完成Servlet组件的注册(方式1) 步骤:需要3步 ...

  9. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

  10. 【转】servlet/filter/listener/interceptor区别与联系

    原文:https://www.cnblogs.com/doit8791/p/4209442.html 一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台 ...

随机推荐

  1. 史上最全 Css Hack汇总

    前言 每次要找个东西都得慢慢去翻自己收集的一些东西,每次都是那么花时间,再加上有时存放时间久远就忘了当时是存在哪了,为了方便查询及阅读,决定把一些Css Hack 收集起来... 1.区别不同浏览器, ...

  2. jQuery中ajax和post处理json的不同

    近日在做门户的用户评论时,好长时间没有用jquery了正好用一下,没想到偷工用了post方法去处理ajax回调的json数据,死活取不到,后台就是有json返回了.不料这么小小一个问题挂了我好几个小时 ...

  3. Mac 系统上安装Lua和SubmlimeText 编译器

    第一步:安装命令 curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 ma ...

  4. 3D Face Reconstruction

    方法1 Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression http: ...

  5. 【转】【Html】Vuejs2.0学习之二(Render函数,createElement,vm.$slots,函数化组件,模板编译,JSX)

    1.Render函数 所以直接来到Render,本来也想跳过,发现后面的路由貌似跟它还有点关联.先来看看Render 1.1 官网一开始就看的挺懵的,不知道讲的是啥,动手试了一下,一开头讲的是Rend ...

  6. 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索

    第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...

  7. JUnit套件测试实例

    “套件测试”是指捆绑了几个单元测试用例并运行起来.在JUnit中,@RunWith 和 @Suite 这两个注解是用来运行套件测试. 下面的例子演示这两个单元测试:JunitTest1 和 Junit ...

  8. (转)小议TCP的MSS(最大分段)以及MTU

    [前言]漫漫51长假,没有好的去处,只能每日上网消遣,某日逛到NBO灌水,见一帖曰:无法通过2514路由器上MSN(出口为ADSL线路,通过PPPoE)吾心想,ADSL---PPPoE,那肯定就是MT ...

  9. A:LinkedList实现了List接口; B: AbstractSet实现了Set接口; C: HashSet继承自AbstractSet基类; D: WeakMap继承自 AbstractMap

    List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedListSet有两个实现类:HashSet和LinkedHashSetAbstractS ...

  10. idea过期激活

    1.进到文件夹中:C:\Windows\System32\drivers\etc ,找到hosts文件,用记事本编辑 2.将“  0.0.0.0 account.jetbrains.com ”添加到h ...