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

@WebServlet(urlPatterns = "/hello")
public class MyServlet extends HttpServlet {
filter注解配置,urlPatterns就是这个过滤器要过滤哪些路径
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {

listener注解配置,监听器都是全局性的,不需要配置路径

 
@WebListener
public class MyListener implements ServletContextListener {

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,如下

	@Bean
public ServletRegistrationBean servletRegistrationBean() {

如果你的项目中配置了我在11篇讲的druid监控,这个方法名id已经被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(18)-servlet、filter、listener的更多相关文章

  1. springboot_4 spring boot 使用servlet,filter,listener和interceptor

    上一篇我们学习了 spring boot 利用Controller响应数据与响应页面. 一般的Web开发使用 Controller 基本上可以完成大部分需求,但是有的时候我们还是会用到 Servlet ...

  2. Spring Boot使用Servlet、Filter或Listener的方式

    根据官方文档说明,有两种方式可以在你的Spring Boot应用中使用Servlet.Filter或Listener. 其一:将Servlet.Filter或Listener注册成Spring Bea ...

  3. Spring Boot 学习系列(08)—自定义servlet、filter及listener

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和li ...

  4. Spring Boot (19) servlet、filter、listener

    servlet.filter.listener,在spring boot中配置方式有两种:一种是以servlet3开始提供的注解方式,另一种是spring的注入方式. servlet注解方式 serv ...

  5. Spring Boot 2.X(十):自定义注册 Servlet、Filter、Listener

    前言 在 Spring Boot 中已经移除了 web.xml 文件,如果需要注册添加 Servlet.Filter.Listener 为 Spring Bean,在 Spring Boot 中有两种 ...

  6. SpringBoot 源码解析 (七)----- Spring Boot的核心能力 - 自定义Servlet、Filter、Listener是如何注册到Tomcat容器中的?(SpringBoot实现SpringMvc的原理)

    上一篇我们讲了SpringBoot中Tomcat的启动过程,本篇我们接着讲在SpringBoot中如何向Tomcat中添加Servlet.Filter.Listener 自定义Servlet.Filt ...

  7. Spring Boot 自定义注册 Servlet、Filter、Listener

    前言 在 Spring Boot 中已经移除了 web.xml 文件,如果需要注册添加 Servlet.Filter.Listener 为 Spring Bean,在 Spring Boot 中有两种 ...

  8. 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)

    在Spring Boot中整合Servlet.Filter.Listener的方式 写在前面 从零开始的Spring Boot(1.搭建一个Spring Boot项目Hello World):http ...

  9. spring boot整合servlet、filter、Listener等组件方式

    创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...

随机推荐

  1. 关于 OpenIdConnect 认证启用 HTTPS 回调 RedirectUri 不生效问题

    在搭建 IdentityServer 服务端后,我们尝试使用了 OIDC(OpenID Connect) 的中间件来代替了原先的 Session 系统认证方式,起初采用的是 HTTP 协议,一切都没有 ...

  2. iOS 8.0 bluetooth peripheral manager giving no callback for addService

    I am adding the service using: [self.peripheralManager addService:myService]; Is this method depreca ...

  3. gridvew使用技巧2

    GridVew1_RowDataBindGridView1.DataKeys[e.Row.RowIndex].Values[].ToString(); foreach (GridViewRow t i ...

  4. mybatis插入数据库 返回主键

    传递参数为对象TaskEntity, 返回主键结果为Integer 与 主键 task_id 的类型一致即可 <insert id="addTask" parameterTy ...

  5. es6学习笔记11--Proxy和Reflect

    Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy可以理解成,在目标对象之前 ...

  6. JS DOM操作(一) 对页面的操作

    DOM ——文档对象模型(Document Object Model)是表示和处理一个HTML或XML文档的常用方法. 在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标 ...

  7. 学习Spring.Net:1.简单的应用之控制台

    1.开始. 2.新建一个控制台,我们新建一个SpringNetTest类. using System; using System.Collections.Generic; using System.L ...

  8. 【Linux】安装openssh-server依赖openssh-client版本错误的解决办法

    这是因为,openssh-server是依赖于openssh-clien的,ubuntu自带了openssh-client,自带的openssh-clien与所要安装的openssh-server所依 ...

  9. 输出字符串中最长的单词 C# 算法

    要求: 设计一个算法从一片英语文章或者英语字符串里面输出其中最长的单词. Input: string     Output: string 尽可能多的设计测试用例来测试这个算法. 考虑空间和时间复杂度 ...

  10. Linux常用基本命令:uniq-去重复

    uniq命令 作用:输出或者忽略文件中的重复行 格式: uniq [option] [file|stdin] ghostwu@dev:~/linux/uniq$ cat ghostwu.txt 192 ...