Spring Boot (19) servlet、filter、listener
servlet、filter、listener,在spring boot中配置方式有两种:一种是以servlet3开始提供的注解方式,另一种是spring的注入方式。
servlet注解方式
servlet3.0以前,servlet、filter、listener需要在web.xml中配置,从servlet3.0开始,支持通过类注解进行配置。在spring boot中如果要支持这种注解,必须在配置类增加一个@ServletComponentScan注解,来扫描servlet的注解
@ServletComponentScan
@SpringBootApplication
servlet注解配置,urlPatterns就是这个servlet请求路径,相当于spring mvc中的mapping
https://www.cnblogs.com/baidawei/p/9001538.html
@WebServlet(urlPatterns = "/servlet")
public class myServlet extends HttpServlet { }
filter注解,urlPatterns就是这个过滤器要过滤那些路径
https://www.cnblogs.com/baidawei/p/9036783.html
@WebFilter("/*")
public class myFilter implements Filter{ @Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { } @Override
public void destroy() { }
}
listener注解配置,监听器就是全局性的,不需要配置路径
https://www.cnblogs.com/baidawei/p/9035786.html
@WebListener
public class myListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) { } @Override
public void contextDestroyed(ServletContextEvent servletContextEvent) { }
}
spring注入的方式
//servlet
@Bean
public ServletRegistrationBean myServlet(){
//配置servlet及其请求的路径
return new ServletRegistrationBean(new myServlet(),"/hello")
} //过滤器
@Bean
public FilterRegistrationBean myFilter(){
FilterRegistrationBean myFilter = new FilterRegistrationBean();
//配置过滤器
myFilter.setFilter(new myFilter());
//配置过滤器路径
myFilter.addUrlPatterns("/*");
return myFilter;
} //监听器
@Bean
public ServletListenerRegistrationBean<myListener> myListener(){
return new ServletListenerRegistrationBean<myListener>(new myListener());
}
id命名冲突
上面的spring注入方法都是用my*来命名,这个方法名就是spring中注入的bean的id,有一种习惯是用类名的首字母小写来命名id如:servletRegistrationBean等
如果项目中配置了druid监控,这个方法名已经被druid使用了,这个配置也将无法生效。这就是不使用spring boot默认组件可能会引发一些冲突问题,所以如非必要,优先使用spring boot默认的组件,稳定性和兼容性更高。
servlet注解还是spring注入?
servlet注解不会有上面的冲突问题,而且简单易用。更主要的十servlet出自java官方的web技术,如tomcat之类的服务器,只知道有servlet二不知道spring为何物。所有对spring mvc控制层的请求,都是通过一个servlet也就是DispatchServlet进行分发的。请求首先到大servlet,分发以后才会到spring。如果不分发也就没有spring什么事了,spring需要依赖servlet才能处理请求。所以使用servlet注解才是原味的servlet。
Spring Boot (19) servlet、filter、listener的更多相关文章
- springboot_4 spring boot 使用servlet,filter,listener和interceptor
上一篇我们学习了 spring boot 利用Controller响应数据与响应页面. 一般的Web开发使用 Controller 基本上可以完成大部分需求,但是有的时候我们还是会用到 Servlet ...
- spring boot(18)-servlet、filter、listener
servlet.filter.listener的用法就不讲了,只讲如何在spring boot中配置它们.有两种方式,一种是从servlet3开始提供的注解方式,另一种是spring的注入方式 ser ...
- Spring Boot使用Servlet、Filter或Listener的方式
根据官方文档说明,有两种方式可以在你的Spring Boot应用中使用Servlet.Filter或Listener. 其一:将Servlet.Filter或Listener注册成Spring Bea ...
- Spring Boot 学习系列(08)—自定义servlet、filter及listener
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和li ...
- Spring Boot 2.X(十):自定义注册 Servlet、Filter、Listener
前言 在 Spring Boot 中已经移除了 web.xml 文件,如果需要注册添加 Servlet.Filter.Listener 为 Spring Bean,在 Spring Boot 中有两种 ...
- SpringBoot 源码解析 (七)----- Spring Boot的核心能力 - 自定义Servlet、Filter、Listener是如何注册到Tomcat容器中的?(SpringBoot实现SpringMvc的原理)
上一篇我们讲了SpringBoot中Tomcat的启动过程,本篇我们接着讲在SpringBoot中如何向Tomcat中添加Servlet.Filter.Listener 自定义Servlet.Filt ...
- Spring Boot 自定义注册 Servlet、Filter、Listener
前言 在 Spring Boot 中已经移除了 web.xml 文件,如果需要注册添加 Servlet.Filter.Listener 为 Spring Bean,在 Spring Boot 中有两种 ...
- 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)
在Spring Boot中整合Servlet.Filter.Listener的方式 写在前面 从零开始的Spring Boot(1.搭建一个Spring Boot项目Hello World):http ...
- spring boot整合servlet、filter、Listener等组件方式
创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...
随机推荐
- C# 泛基
1 你有时候希望在父类规定一些行为,让子类无法修改,但是这些实现是依赖一个子类才能获取的值,你又不可能知道所有的子类 ,没办法替它在父类里面初始化,这时候就需要在父类里面定义一个每个子类一个的,但又是 ...
- CentOS安装Docker-ce并配置国内镜像
前提条件 1.系统.内核 CentOS7 要求64位系统.内核版本3.10以上 CentOS6 要求版本在6.5以上,系统64位.内核版本2.6.32-431以上 查看内核版本号 uname -r # ...
- Python2 下Ubuntu linux Mac 安装 PyV8
在pip install PyV8(注意区分大小写)时,出现了如下报错 command 'x86_64-linux-gnu-gcc' failed with exit status 1 解决方案: 百 ...
- 腾讯云,搭建Docker环境
安装与配置 Docker 任务时间:10min ~ 20min 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下 ...
- 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-代码篇
需要结合:<百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量--笔记篇> 一起看. #!/user/bin/env python # -*- coding:utf-8 -* ...
- linux学习8-正则表达式基础
正则表达式基础 实验介绍 虽然我们这一节的标题是正则表达式,但实际这一节实验只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式).正则表 ...
- Contest Round #451 (Div. 2)F/Problemset 898F Restoring the Expression
题意: 有一个a+b=c的等式,去掉两个符号,把三个数连在一起得到一个数 给出这个数,要求还原等式,length <= 1e6 三个数不能含有前导0,保证有解 解法: 铁头过题法,分类然后各种判 ...
- code vs 3376 符号三角形
3376 符号三角形 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 如下图是由14个“+”和14个“-”组 ...
- HDU 4523
很简单了, 当m>=3&&m<=n+p时是yes import java.math.BigInteger; import java.util.Scanner; public ...
- UITextView上加入默认文字
1. 实现UITextView的代理方法 text.view.delegate = self; 2. 在UITextView上覆盖UILabel ps:必须实现 label.enabled = NO; ...