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 }

View Code

 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 }

View Code

 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 }

View Code

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

转载于:https://www.cnblogs.com/xbq8080/p/7768916.html

SpringBoot(四)-- 整合Servlet、Filter、Listener相关推荐

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

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

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

    2019独角兽企业重金招聘Python工程师标准>>> servlet/filter/listener/interceptor区别与联系 博客分类: java 由于最近两个月工作比较 ...

  3. servlet,filter,listener区别

    时间的朋友 随笔 - 2314, 文章 - 3, 评论 - 101, 引用 - 0 servlet/filter/listener/interceptor区别与联系 一.概念: 1.servlet:s ...

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

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference 转载于:https://www.cnblogs.com/Jeremy2001 ...

  5. servlet/filter/listener/interceptor区别与联系(转)

    由于最近两个月工作比较清闲,个人也比较"上进",利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时候,发现为什么struts1要用servle ...

  6. JAVA基础(16) Servlet/Filter/Listener/Interceptor区别与联系

    一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层.最早支持 Serv ...

  7. Spring Boot注册Servlet三大组件(Servlet, Filter, Listener)

    Spring Boot默认使用的Tomcat的Servlet容器,这个容器我们可以自己替换,比如替换成支持JSP的Servlet容器,这个容器已经帮我们注册好了一个Servlet(Dispatcher ...

  8. springboot整合servlet

    如何在SpringBoot当中去整合我们的Servlet,SpringBoot在整合Servlet时,提供了两种整合方式,第一种是通过注解扫描,来完成Servlet组件的注册,第二种方式呢,通过方法完 ...

  9. 玩转 SpringBoot 2 快速整合 Servlet

    前言 本文主要介绍如何在SpringBoot 2 中使用 Servlet 的快速搭建教程,阅读前需要你必须了解 Servlet 的基础使用以及如何搭建 SpringBoot 项目. 快速演示操作 第一 ...

  10. SpringBoot 配置嵌入式Servlet容器(tomcat,jetty,undertow)

    SpringBoot 默认打包方式为jar包,且可以自启动,就是因为它内嵌了Servlet容器. SpringBoot 默认使用嵌入式Servlet容器,SpringBoot 2.2.5 默认是 To ...

最新文章

  1. python magic文档
  2. 特征工程到底是什么?2019百度实习生招聘试题之一
  3. 智慧讲台:office 文件 pdf 文件 转成 png图片
  4. 蓝宝石rx580怎么超频_台式机显卡怎么选?小百科教你准确定位合理选择(3)
  5. 【数码管识别】4识别成5或7的问题
  6. linux 内核挂起 ping,Linux内核安全详解 ping到死复活方法
  7. 客户端地图拼图算法解析
  8. C语言符号常量的使用,C语言常量与符号常量
  9. AssertionError: Override list has odd length: [‘\r‘]; it must be a list of pairs
  10. c语言大作业点歌系统,基于C语言的KTV点歌系统
  11. Python爬虫入门教程 7-100 蜂鸟网图片爬取之二
  12. Photoshop CS4 CS5 CS6永久序列号全面整理
  13. ZONe Energy Programming Contest E - Sneaking (最短路)
  14. 对于等待事件(direct path read)的理解
  15. JS操作word文档
  16. LoadCursor 函数
  17. 通向天才之路 : 实时环境映射贴图技术(Real-time Evironmnet Mapping)
  18. 华为HiLink、海尔智家、智汀各自的核心优势?
  19. 阿里巴巴开发手册之应用分层
  20. 金三银四!95后阿里P7晒出工资单:狠补了这个,真香...

热门文章

  1. BZOJ3675: [Apio2014]序列分割
  2. MyISAM存储引擎
  3. 信息安全系统设计基础第十二周学习总结
  4. C#基础笔记——命名规范
  5. 利用OpenCV的compareHist函数作直方图的相似度对比的源程序
  6. #define CV_DEFAULT(val) = val 这样的宏定义是没有问题的~
  7. 970计算机技术基础,2017年武汉大学测绘遥感信息工程国家重点实验室970计算机技术基础考研强化模拟题...
  8. leetcode算法题--Gas Station
  9. OVS之vhost-net中VM通信(十)
  10. Cloud Native Computing Foundation Welcomes the NATS Messaging Protocol into the Fold