由于Spring Boot默认是以jar包的方式启动嵌入式的Servlet容器从而启动web应用的,因此没有web.xml文件。
如果需要注册Spring Boot三大组件(ServletFilterListener)就必须依赖于Spring Boot为我们提供的对应的配置类。

  • ServletRegistrationBean Servlet注册Bean
  • FilterRegistrationBean Filter注册Bean
  • ServletListenerRegistrationBean Listener注册Bean

注册Servlet

  1. // 创建自定义MyServlet类,实现定制的Servlet功能
  2. public class MyServlet extends HttpServlet {
  3. @Override
  4. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws Exception {
  5. // 定制返回消息
  6. resp.getWriter().write("Spring Boot, Hello MyServlet...");
  7. }
  8. @Override
  9. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Exception {
  10. // get请求直接转发到post
  11. doPost(req, resp);
  12. }
  13. }
  14. // 创建配置类,注入ServletRegistrationBean
  15. @Configuration
  16. public class MyServerConfiguration {
  17. @Bean // 必须注入到容器才能生效
  18. public ServletRegistrationBean myServlet(){
  19. // 引入自定义Servlet,并绑定请求映射uri
  20. return new ServletRegistrationBean(new MyServlet(), "/helloMyServlet");
  21. }
  22. }

注册Filter

Filter简介

  1. // 创建自定义的Filter类,实现自定义过滤功能
  2. public class MyFilter implements Filter {
  3. @Override
  4. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
  5. FilterChain filterChain) throws IOException, ServletException {
  6. System.out.println("Spring Boot, Hello MyFilter...");
  7. // 处理完成后,继续向下执行
  8. filterChain.doFilter(servletRequest, servletResponse);
  9. }
  10. }
  11. // 创建配置类,注入FilterRegistrantionBean
  12. @Configuration
  13. public class MyServerConfiguration {
  14. @Bean // 必须注入到容器才能生效
  15. public FilterRegistrationBean myFiler(){
  16. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
  17. // 引入自定义Filter
  18. filterRegistrationBean.setFilter(new MyFilter());
  19. // 指明要拦截过滤的请求
  20. filterRegistrationBean.setUrlPatterns(Arrays.asList("/myFilter", "/helloMyFilter"));
  21. return filterRegistrationBean;
  22. }
  23. }

注册Listener

  1. // 创建自定义的Listener类,实现自定义监听功能
  2. public class MyListener implements ServletContextListener {
  3. @Override
  4. public void contextInitialized(ServletContextEvent sce) {
  5. System.out.println("contextInitialized... WEB应用启动了!");
  6. }
  7. @Override
  8. public void contextDestroyed(ServletContextEvent sce) {
  9. System.out.println("contextDestroyed... 当前WEB应用销毁了!");
  10. }
  11. }
  12. // 创建配置类,注入ServletListenerRegistrationBean
  13. @Configuration
  14. public class MyServerConfiguration {
  15. @Bean
  16. public ServletListenerRegistrationBean myListener(){
  17. ServletListenerRegistrationBean<MyListener> listener =
  18. new ServletListenerRegistrationBean<>(new MyListener());
  19. return listener;
  20. }
  21. }

Spring Boot帮我们自动配置SpringMVC的时候,也自动的注册SpringMVC的前端控制器DIspatcherServlet

  1. @ConditionalOnClass({DispatcherServlet.class})
  2. @AutoConfigureAfter({ServletWebServerFactoryAutoConfiguration.class})
  3. public class DispatcherServletAutoConfiguration {
  4. @Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
  5. @ConditionalOnBean(value = DispatcherServlet.class,
  6. name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
  7. public ServletRegistrationBean dispatcherServletRegistration(
  8. DispatcherServlet dispatcherServlet) {
  9. ServletRegistrationBean registration = new ServletRegistrationBean(
  10. dispatcherServlet, this.serverProperties.getServletMapping());
  11. // 默认拦截 / 所有请求,包静态资源,但是不拦截jsp请求 /* 拦截所有请求,包括jsp
  12. // 可以通过server.servletPath来修改SpringMVC前端控制器默认拦截的请求路径
  13. registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
  14. registration.setLoadOnStartup(this.webMvcProperties.getServlet().getLoadOnStartup());
  15. if (this.multipartConfig != null) {
  16. registration.setMultipartConfig(this.multipartConfig);
  17. }
  18. return registration;
  19. }
  20. }