SpringBoot初始教程之Servlet、Filter、Listener配置详解
1.介绍
通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的
因为有可能打包之后是一个jar包的形式,这种情况下如何解决?SpringBoot 提供了两种方案进行解决
2.快速开始
2.1 方案一
方案一采用原生Servlet3.0的注解进行配置、@WebServlet 、@WebListener、@WebFilter是Servlet3.0 api中提供的注解 
通过注解可以完全代替web.xml中的配置,下面是一个简单的配置
IndexServlet
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @WebServlet(name = "IndexServlet",urlPatterns = "/hello")  publicclassIndexServlet extendsHttpServlet {    @Override    publicvoiddoGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {      resp.getWriter().print("hello word");      resp.getWriter().flush();      resp.getWriter().close();    }    @Override    protectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {      this.doGet(req, resp);    }  } | 
IndexListener
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @WebListener publicclassIndexListener implementsServletContextListener {   privateLog log = LogFactory.getLog(IndexListener.class);   @Override   publicvoidcontextInitialized(ServletContextEvent servletContextEvent) {     log.info("IndexListener contextInitialized");   }   @Override   publicvoidcontextDestroyed(ServletContextEvent servletContextEvent) {   } } | 
IndexFilter
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @WebFilter(urlPatterns = "/*", filterName = "indexFilter")  publicclassIndexFilter implementsFilter {    Log log = LogFactory.getLog(IndexFilter.class);    @Override    publicvoidinit(FilterConfig filterConfig) throwsServletException {      log.info("init IndexFilter");    }    @Override    publicvoiddoFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throwsIOException, ServletException {      log.info("doFilter IndexFilter");      filterChain.doFilter(servletRequest,servletResponse);    }    @Override    publicvoiddestroy() {    }  } | 
上面配置完了,需要配置一个核心的注解@ServletComponentScan,具体配置项如下,可以配置扫描的路径
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Target(ElementType.TYPE)  @Retention(RetentionPolicy.RUNTIME)  @Documented  @Import(ServletComponentScanRegistrar.class)  public@interfaceServletComponentScan {    @AliasFor("basePackages")    String[] value() default{};    @AliasFor("value")    String[] basePackages() default{};    Class<?>[] basePackageClasses() default{};  } | 
把注解加到入口处启动即可
| 1 2 3 4 5 6 7 8 9 | @SpringBootApplication@ServletComponentScanpublicclassAppApplication {  publicstaticvoidmain(String[] args) throwsException {    SpringApplication.run(AppApplication.class, args);  }} | 
2.2 方案二
方案二是采用自己SpringBoot 配置bean的方式进行配置的,SpringBoot提供了三种BeanFilterRegistrationBean、ServletRegistrationBean、ServletListenerRegistrationBean 分别对应配置原生的Filter、Servlet、Listener,下面提供的三个配置和方案一采用的方式能够达到统一的效果
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @BeanpublicServletRegistrationBean indexServletRegistration() {  ServletRegistrationBean registration = newServletRegistrationBean(newIndexServlet());  registration.addUrlMappings("/hello");  returnregistration;}@BeanpublicFilterRegistrationBean indexFilterRegistration() {  FilterRegistrationBean registration = newFilterRegistrationBean(newIndexFilter());  registration.addUrlPatterns("/");  returnregistration;}@BeanpublicServletListenerRegistrationBean servletListenerRegistrationBean(){  ServletListenerRegistrationBean servletListenerRegistrationBean = newServletListenerRegistrationBean();  servletListenerRegistrationBean.setListener(newIndexListener());  returnservletListenerRegistrationBean;} | 
3.总结
两种方案在使用上有差别,但是在内部SpringBoot的实现上是无差别的,即使使用的是Servlet3.0注解,也是通过扫描注解 
转换成这三种bean的FilterRegistrationBean、ServletRegistrationBean、ServletListenerRegistrationBean
4.扩展
大家在使用的时候有没有发觉,其实SpringBoot在使用SpringMvc的时候不需要配置DispatcherServlet的,因为已经自动配置了, 但是如果想要加一些初始配置参数如何解决,方案如下:
| 1 2 3 4 5 6 7 | @Bean  publicServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {    ServletRegistrationBean registration = newServletRegistrationBean(dispatcherServlet);    registration.addUrlMappings("*.do");    registration.addUrlMappings("*.json");    returnregistration;  } | 
可以通过注入DispatcherServlet 然后用ServletRegistrationBean包裹一层 动态的加上一些初始参数
SpringBoot初始教程之Servlet、Filter、Listener配置详解的更多相关文章
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
		1.介绍 通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的 因为有可能打包之后是一个ja ... 
- SpringBoot初始教程之Servlet、Filter、Listener配置
		1.介绍通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的 因为有可能打包之后是一个jar ... 
- SpringBoot—整合log4j2入门和log4j2.xml配置详解
		关注微信公众号:CodingTechWork,一起学习进步. 引言 对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维.而日志的输出需要有一定的规划,如日志命名.日志大小,日志分 ... 
- SpringBoot初始教程之Redis集中式Session管理
		1.介绍 有关Session的管理方式这里就不再进行讨论,目前无非就是三种单机Session(基于单机内存,无法部署多台机器).基于Cookie(安全性差).基于全局的统一Session管理(redi ... 
- servlet的web-xml配置详解
		<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ... 
- servlet的xml配置详解
		<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns ... 
- SpringBoot学习笔记(6)----SpringBoot中使用Servlet,Filter,Listener的三种方式
		在一般的运用开发中Controller已经大部分都能够实现了,但是也不排除需要自己实现Servlet,Filter,Listener的方式,SpringBoot提供了三种实现方式. 1. 使用Bean ... 
- ServletContextInitializer添加 servlet filter listener
		ServletContextInitializer添加 servlet filter listener https://www.cnblogs.com/pomer-huang/p/9639322.ht ... 
- SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣
		在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ... 
随机推荐
- linux ftp、sftp、telnet服务开通、更改Orale最大连接数
			1 ftp服务开通 1.1 检测vsftpd是否安装及启动 先用service vsftpd status 来查看ftp是否开启.也可以使用ps -ef | grep ftp 来查看本地是否含有包含f ... 
- 删除GHOST中win7桌面IE删不掉的解决办法
			打开Win+R 运行regedit 依次打开: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Deskto ... 
- 初识Servlet(JSP)
			Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. Servle ... 
- android 6.0(23)的权限管理
			前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ... 
- delphi xe6 让 ListView 在 Android 可回弹[根据龟山阿卍原创修改为xe6版本]
			Delphi XE6 找出 FMX.Platform.Android.pas 档案,并复制到自己的 Project 路径里,找到 GetScrollingBehaviour 函数,修改成如下: uni ... 
- char 与 unsigned char的区别和取值范围
			1.char和unsigned char 都是一个byte,8个bit.char是无符号类型,首位bit是符号位. 2.取值范围不同: (1)unsigned char的取值范围:0~2^8-1(0~ ... 
- 理解JavaScript普通函数以及箭头函数里使用的this
			this 普通函数的this 普通函数的this是由动态作用域决定,它总指向于它的直接调用者.具体可以分为以下四项: this总是指向它的直接调用者, 例如 obj.func() ,那么func()里 ... 
- sqlserver高版本还原到低版本方法
			想要将Sqlserver2014高版本备份的数据还原到低版本SqlServer2008R2上去,但是这在SqlServer中是没法直接还原数据库的,通过以下方法可以顺利还原. 通过高版本生成sql脚本 ... 
- SQLServer存储引擎——01.数据库如何读写数据
			一.引言 在SQL Server数据库中,数据是如何被读写的?日志里都有些什么?和数据页之间是什么关系?数据页又是如何存放数据的?索引又是用来干嘛的? 一起看看SQL Server的存储引擎. 二.S ... 
- vtk-py z-Buffer可见算法
			C++版例子: https://lorensen.github.io/VTKExamples/site/Cxx/PolyData/SelectVisiblePoints/ 优点: Simple to ... 
