SpringBoot(四)-- 整合Servlet、Filter、Listener
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相关推荐
- Spring Boot整合Servlet,Filter,Listener,访问静态资源
目录 Spring Boot整合Servlet(两种方式) 第一种方式(通过注解扫描方式完成Servlet组件的注册): 第二种方式(通过方法完成Servlet组件的注册) Springboot整合F ...
- servlet/filter/listener/interceptor区别与联系
2019独角兽企业重金招聘Python工程师标准>>> servlet/filter/listener/interceptor区别与联系 博客分类: java 由于最近两个月工作比较 ...
- servlet,filter,listener区别
时间的朋友 随笔 - 2314, 文章 - 3, 评论 - 101, 引用 - 0 servlet/filter/listener/interceptor区别与联系 一.概念: 1.servlet:s ...
- JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference 转载于:https://www.cnblogs.com/Jeremy2001 ...
- servlet/filter/listener/interceptor区别与联系(转)
由于最近两个月工作比较清闲,个人也比较"上进",利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时候,发现为什么struts1要用servle ...
- JAVA基础(16) Servlet/Filter/Listener/Interceptor区别与联系
一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层.最早支持 Serv ...
- Spring Boot注册Servlet三大组件(Servlet, Filter, Listener)
Spring Boot默认使用的Tomcat的Servlet容器,这个容器我们可以自己替换,比如替换成支持JSP的Servlet容器,这个容器已经帮我们注册好了一个Servlet(Dispatcher ...
- springboot整合servlet
如何在SpringBoot当中去整合我们的Servlet,SpringBoot在整合Servlet时,提供了两种整合方式,第一种是通过注解扫描,来完成Servlet组件的注册,第二种方式呢,通过方法完 ...
- 玩转 SpringBoot 2 快速整合 Servlet
前言 本文主要介绍如何在SpringBoot 2 中使用 Servlet 的快速搭建教程,阅读前需要你必须了解 Servlet 的基础使用以及如何搭建 SpringBoot 项目. 快速演示操作 第一 ...
- SpringBoot 配置嵌入式Servlet容器(tomcat,jetty,undertow)
SpringBoot 默认打包方式为jar包,且可以自启动,就是因为它内嵌了Servlet容器. SpringBoot 默认使用嵌入式Servlet容器,SpringBoot 2.2.5 默认是 To ...
最新文章
- python magic文档
- 特征工程到底是什么?2019百度实习生招聘试题之一
- 智慧讲台:office 文件 pdf 文件 转成 png图片
- 蓝宝石rx580怎么超频_台式机显卡怎么选?小百科教你准确定位合理选择(3)
- 【数码管识别】4识别成5或7的问题
- linux 内核挂起 ping,Linux内核安全详解 ping到死复活方法
- 客户端地图拼图算法解析
- C语言符号常量的使用,C语言常量与符号常量
- AssertionError: Override list has odd length: [‘\r‘]; it must be a list of pairs
- c语言大作业点歌系统,基于C语言的KTV点歌系统
- Python爬虫入门教程 7-100 蜂鸟网图片爬取之二
- Photoshop CS4 CS5 CS6永久序列号全面整理
- ZONe Energy Programming Contest E - Sneaking (最短路)
- 对于等待事件(direct path read)的理解
- JS操作word文档
- LoadCursor 函数
- 通向天才之路 : 实时环境映射贴图技术(Real-time Evironmnet Mapping)
- 华为HiLink、海尔智家、智汀各自的核心优势?
- 阿里巴巴开发手册之应用分层
- 金三银四!95后阿里P7晒出工资单:狠补了这个,真香...
热门文章
- BZOJ3675: [Apio2014]序列分割
- MyISAM存储引擎
- 信息安全系统设计基础第十二周学习总结
- C#基础笔记——命名规范
- 利用OpenCV的compareHist函数作直方图的相似度对比的源程序
- #define CV_DEFAULT(val) = val 这样的宏定义是没有问题的~
- 970计算机技术基础,2017年武汉大学测绘遥感信息工程国家重点实验室970计算机技术基础考研强化模拟题...
- leetcode算法题--Gas Station
- OVS之vhost-net中VM通信(十)
- Cloud Native Computing Foundation Welcomes the NATS Messaging Protocol into the Fold