目录

ServletRegistrationBean  注册 Servlet

FilterRegistrationBean 注册 Filter

ServletListenerRegistrationBean 注册 Listener


Spring Boot 由于默认以 Jar 包方式启动嵌入式的 Servlet 容器来启动 Spring Boot 的 web 应用,默认没有 web.xml 文件,所以无法再像以前一样通过在 web.xml 配置来使用 Servlet 、Filter、Listener,但是 Spring Boot 提供了其它更简洁的方式。

本文就是其中一种方式,还有一种方式是:Spring Boot @ServletComponentScan 注解扫描 @WebServlet、@WebFilter、@WebListener

ServletRegistrationBean 注册 Servlet

1、自定义类继承 javax.servlet.http.HttpServlet,然后重写其 doGet 与 doPost 方法,在方法中编写控制代码;

2、第二步将 ServletRegistrationBean 组件添加到 Spring 容器中

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*** Created by Administrator on 2018/8/11 0011.* 标准的 Servlet 实现 HttpServlet;重写其 doGet 、doPost 方法*/
public class BookServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(":com.lct.servlet.BookServlet:" + req.getRequestURL());/**讲求转发到后台的 user/users 请求去,即会进入*/req.getRequestDispatcher("user/users").forward(req, resp);}
}

3、上面 Serlvet 转发到下面的 UserControllr 控制器中:

4、@Configuration 配置类相当于以前的 beans.xml 中的配置,将 ServletRegistrationBean 也添加到 Spring 容器中来

import com.lct.component.MyLocaleResolve;
import com.lct.servlet.BookServlet;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
/*** Created by Administrator on 2018/7/28 0028.* 自定义配置类*/
@Configuration
public class MyMvcConfig {/*** 注册 Servlet 三大组件 之  Servlet* 添加 ServletRegistrationBean ,就相当于以前在 web.xml 中配置的 <servlet></servlet>标签*/@Beanpublic ServletRegistrationBean myServlet() {/**第二个参数是个不定参数组,可以配置映射多个请求* 相当于以前在 web.xml中配置的 <servlet-mapptin></servlet-mapptin>*/ServletRegistrationBean registrationBean = new ServletRegistrationBean(newBookServlet(), "/bookServlet");return registrationBean;}
}

5、运行测试:

FilterRegistrationBean 注册 Filter

1、Filter(过滤器) 是 Servlet 技术中最实用的技术之一

2、Web 开发人员通过 Filter 技术,对 web 服务器管理的所有 web 资源(如动态的 Jsp、 Servlet,以及静态的 image、 html、CSS、JS 文件等) 进行过滤拦截,从而实现一些特殊的功能(如实现 URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等)

3、Filter 主要用于对用户请求进行预处理,也可以对 HttpServletResponse 进行后期处理(如编码设置,返回时禁用浏览器缓存等)

4、Filter 使用完整流程:Filter 对用户请求进行预处理,接着将请求交给 Servlet 进行处理并生成响应,最后 Filter 再对服务器响应进行后处理。

5、Servlet 的 Filter 经常会拿来与 Spring MVC 的 Interceptor 做对比

1)拦截器是基于 Java 的反射机制的,而过滤器是基于函数回调
2)拦截器不依赖与 servle t容器,过滤器依赖与 servlet 容器
3)拦截器可以访问 action 上下文、值栈里的对象,而过滤器不能访问
4)在 action 的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
5)拦截器可以获取 IOC 容器中的各个 bean,而过滤器就不行,这点很重要,在拦截器里注入一个 service,可以调用业务逻辑
6)SpringMVC 有自己的拦截器

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/*** Created by Administrator on 2018/8/11 0011.* 标准 Servlet 过滤器,实现 javax.servlet.Filter 接口* 并重写它的 三个方法*/
public class SystemFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("javax.servlet.Filter::服务器启动....");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {/*** 转为 HttpServletRequest 输出请求路径 容易查看 请求地址*/HttpServletRequest request = (HttpServletRequest) servletRequest;System.out.println("javax.servlet.Filter::过滤器放行前...." + request.getRequestURL());filterChain.doFilter(servletRequest, servletResponse);System.out.println("javax.servlet.Filter::过滤器返回后...." + request.getRequestURL());}@Overridepublic void destroy() {System.out.println("javax.servlet.Filter::服务器关闭....");}
}

6、使用 FilterRegistrationBean 添加 FIlter :

import com.lct.component.MyLocaleResolve;
import com.lct.filter.SystemFilter;
import com.lct.servlet.BookServlet;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.DispatcherType;
import java.util.Arrays;
/*** Created by Administrator on 2018/7/28 0028.* 自定义配置类*/
@Configuration
public class MyMvcConfig {/*** 注册 Servlet 三大组件 之  Filter (过滤器)* 添加 FilterRegistrationBean ,就相当于以前在 web.xml 中配置的 <filter></filter> 标签*/@Beanpublic FilterRegistrationBean myFilter() {FilterRegistrationBean registrationBean = new FilterRegistrationBean();/**同样添加自定义的 Filter*/registrationBean.setFilter(new SystemFilter());/**然后设置过滤的路径,参数是个集合 ,相当于 web.xml中配置的 <filter-mapptin></filter-mapptin>* "/*": 表示过滤所有 get 与 post 请求*/registrationBean.setUrlPatterns(Arrays.asList("/*"));/*** setDispatcherTypes 相当于 web.xml 配置中 <filter-mapptin> 下的 <dispatcher> 标签* 用于过滤非常规的 get 、post 请求* REQUEST:默认方式,写了之后会过滤所有静态资源的请求* FORWARD:过滤所有的转发请求,无论是 jsp 中的 <jsp:forward</>、<%@ page errorPage= %>、还是后台的转发* INCLUDE:过滤 jsp 中的动态包含<jsp:include 请求* ERROR:过滤在 web.xml 配置的全局错误页面* 了解即可,实际中也很少这么做*/registrationBean.setDispatcherTypes(DispatcherType.REQUEST);return registrationBean;}
}

ServletListenerRegistrationBean 注册 Listener

1、自定义监听器:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/*** Created by Administrator on 2018/8/11 0011.* 标准 Servlet 监听器,实现 javax.servlet.ServletContextListener 接口* 然后实现方法* ServletContextListener:属于 Servlet 应用启动关闭监听器,监听容器初始化与销毁*/
public class SystemListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("com.lct.listener.SystemListener::服务器启动.....");}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("com.lct.listener.SystemListener::服务器关闭.....");}
}

2、注册 ServletListenerRegistrationBean:

import com.lct.component.MyLocaleResolve;
import com.lct.filter.SystemFilter;
import com.lct.listener.SystemListener;
import com.lct.servlet.BookServlet;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import java.util.Arrays;
/*** Created by Administrator on 2018/7/28 0028.* 自定义配置类*/
@Configuration
public class MyMvcConfig {/*** 注册 Servlet 三大组件 之  Listner* 添加 ServletListenerRegistrationBean ,就相当于以前在 web.xml 中配置的 <listener></listener>标签*/@Beanpublic ServletListenerRegistrationBean myListener() {/**ServletListenerRegistrationBean<T extends EventListener> 属于的是泛型,可以注册常见的任意监听器* 将自己的监听器注册进来*/ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(new SystemListener());return registrationBean;}
}

Spring Boot 2.x 注册 Servlet 三大组件 Servlet、Filter、Listener相关推荐

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

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

  2. Spring Boot怎么样注册Servlet三大组件[Servlet、Filter、Listener]

    前言 由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件. 注册三大组件用以下方式 一.ServletRegis ...

  3. Spring Boot基础学习笔记12:组件注册整合Servlet三大组件

    文章目录 零.学习目标 一.整合Servlet三大组件概述 (一)组件注册整合Servlet三大组件 (二)路径扫描整合Servlet三大组件 二.创建Spring Boot项目 - Integrat ...

  4. Spring Boot基础学习笔记13:路径扫描整合Servlet三大组件

    文章目录 零.学习目标 一.创建Spring Boot项目 - IntegrateThreeComponents02 二.使用路径扫描方式整合Servlet三大组件 (一)创建MyServlet类 ( ...

  5. SpringBoot定义三大组件Servlet,过滤器Filter,监听器Listener

    SpringBoot定义三大组件Servlet,过滤器Filter,监听器Listener 1.定义组件的配置类: com.example.mybatis2018.config.MyServletCo ...

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

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

  7. 将Spring Boot应用程序注册成为系统服务

    文章目录 前期准备 打包成可执行jar包 注册成为liunx服务 System V Init Systemd Upstart 在Windows中安装 Windows Service Wrapper J ...

  8. Spring Boot之注册servlet三大组件

    由于Spring Boot默认是以jar包的形式启动嵌入式的Servlet容器来启动Spring Boot的web应用是,没有web.xml配置文件 注册三大组件用以下方式 ServletRegist ...

  9. SpringBoot中注册Servlet三大组件

    SpringBoot中默认内置了Servlet容器,Tomcat.SpringBoot默认是以jar包的方式启动内置的Servlet容器,没有web.xml文件.所以只能通过自定义servlet配置. ...

  10. 【源码阅读】看Spring Boot如何自动装配ActiveMQ收发组件

    源于好奇,我研究了一下Spring Boot中ActiveMQ相关组件是如何自动装配的.记录如下. 源码路径 本文以Spring Boot 1.5.10.RELEASE版本为例. 在spring-bo ...

最新文章

  1. [flutter专题]详解AppBar小部件
  2. VS2017调试闪退之Chrome
  3. php中页面平滑回到顶部代码,原生JS实现平滑回到顶部组件
  4. 开机出现“CPU fan error
  5. C#解leetcode 53.Maximum Subarray
  6. OpenShift 4 - DevSecOps Workshop (10) - 向Stage环境部署应用镜像
  7. 帝国理工:如何用 AI 解决 80% 专科医生担忧的心律装置移植手术难题
  8. 20060516: 实现圆角div效果
  9. .NET设计模式(10):装饰模式(Decorator Pattern)
  10. HDU 1102 Constructing Roads
  11. javascript中的options.add() options.remove() options(index)或options.item(index)
  12. 邢台市初中计算机考试,2019年邢台中考总分多少分,邢台中考各个科目多少分
  13. mysql生成百万条数据_mysql 快速生成百万条测试数据
  14. 【软件教程】Spring Tool Suite(STS)
  15. weblogic部署war
  16. 怎么缩小照片的kb大小?
  17. 怎么在电脑上进行音频以及视频的素材合并
  18. rk1808交叉编译opencv_ubuntu16.04交叉编译opencv 移植到rk1808上
  19. OpenCV使用findContours()查找轮廓
  20. Python 之 小白爬虫

热门文章

  1. ARG MIN的含义是什么?
  2. 孙鑫VC学习笔记:第十七讲 (二) 用匿名管道实现进程间的通信
  3. java 操作linux_java程序里调用linux命令
  4. 腾讯云 python接口_python调用腾讯云短信接口
  5. centos7 docker安装_Docker安装运行并连接Centos7容器
  6. 拓端tecdat|R语言时间序列GARCH模型分析股市波动率
  7. 拓端tecdat|R语言分位数回归预测筛选有上升潜力的股票
  8. 2018 【第九届蓝桥杯省赛】 C/C++ B组
  9. fuzzy仿真 MATLAB,基于Matlab的Fuzzy-PID控制器的设计与仿真
  10. linux配置jupyterlab