SpringBoot 整合 SpringMVC:配置嵌入式服务器

修改和 server 相关的配置(ServerProperties):
XML 复制代码
server.port=8081
server.context‐path=/tx
server.tomcat.uri‐encoding=UTF‐8
  1. 注册 Servlet 三大组件:Servlet、Fileter、Listener
    1. SpringBoot 默认是以 jar 包的方式启动嵌入式的 Servlet 容器来启动 SpringBoot 的 web应用,没有外部文件

    2. Servlet:

      java 复制代码
      //注册三大组件
      @Bean
      public ServletRegistrationBean myServlet(){
          ServletRegistrationBean registrationBean = new ServletRegistrationBean(new
                  MyServlet(),"/myServlet");
          return registrationBean;
      }
    3. FilterRegisttratinBean:

      java 复制代码
      @Bean
      public FilterRegistrationBean myFilter(){
          FilterRegistrationBean registrationBean = new FilterRegistrationBean();
          registrationBean.setFilter(new MyFilter());
          registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
          return registrationBean;
      }
    4. SErvletListenerRegistrationBean:

      java 复制代码
      @Bean
      public ServletListenerRegistrationBean myListener(){
          ServletListenerRegistrationBean<MyListener> registrationBean = new
                  ServletListenerRegistrationBean<>(new MyListener());
          return registrationBean;
      }
    5. SpringBoot 帮我们自动整合 SpringMVC 的时候,自动的注册 SpringMVC 的前端控制器:DispatherServlet

    6. 在 DispatherServletAutoConfiguration 中:

      java 复制代码
      @Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
          @ConditionalOnBean(value = DispatcherServlet.class, name =
                  DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
          public ServletRegistrationBean dispatcherServletRegistration(
                  DispatcherServlet dispatcherServlet) {
              ServletRegistrationBean registration = new ServletRegistrationBean(
                      dispatcherServlet, this.serverProperties.getServletMapping());
      //默认拦截: / 所有请求;包静态资源,但是不拦截jsp请求; /*会拦截jsp
      //可以通过server.servletPath来修改SpringMVC前端控制器默认拦截的请求路径
              registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
              registration.setLoadOnStartup(
                      this.webMvcProperties.getServlet().getLoadOnStartup());
              if (this.multipartConfig != null) {
                  registration.setMultipartConfig(this.multipartConfig);
              }
              return registration;
          }

使用外置的 Servlet 容器:

  1. 嵌入式 Servlet 容器:应用打成可执行的 jar 包
  2. 优点:简单、便携
  3. 缺点:默认不支持 JSP、优化定制比较复杂
  4. 外置的 Servlet 容器:外面安装 Tomcat ,应用打包方式为 war 包
步骤:
  1. 创建一个 war 项目

  2. 将嵌入式的 Tomcat 指定为 provided

    XML 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring‐boot‐starter‐tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
  3. 配置项目的目录结构:

  4. 部署 Tomcat

  5. 必须编写一个 SpringBootSerbletInitializer 的子类,并调用 configure 方法

    java 复制代码
    public class ServletInitializer extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(DemoApplication.class);
        }
    }
  6. 启动服务即可使用

原理:
  1. jar 包:执行 SpringBoot 主类的 main 方法,启动 IOC 容器,创建嵌入式的 Servlet 容器
  2. war 包:启动服务器,服务器启动 SpringBoot 应用[ SpringBootServletInitializer ],启动 IOC 容器
相关推荐
盖世英雄酱581362 小时前
Java 组长年终总结:靠 AI 提效 50%,25 年搞副业只赚 4k?
后端·程序员·trae
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
code bean3 小时前
Flask图片服务在不同网络接口下的路径解析问题及解决方案
后端·python·flask
+VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
努力的小郑4 小时前
2025年度总结:当我在 Cursor 里敲下 Tab 的那一刻,我知道时代变了
前端·后端·ai编程
困知勉行19855 小时前
springboot整合redis
java·spring boot·redis
颜淡慕潇5 小时前
深度解析官方 Spring Boot 稳定版本及 JDK 配套策略
java·后端·架构
Victor3565 小时前
Hibernate(28)Hibernate的级联操作是什么?
后端
Victor3565 小时前
Hibernate(27)Hibernate的查询策略是什么?
后端
中年程序员一枚5 小时前
Springboot报错Template not found For name “java/lang/Object_toString.sql
java·spring boot·python