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 容器
相关推荐
kfaino42 分钟前
码农的AI翻身(五)你好,我叫 Transformer
后端·aigc
Oneslide6 小时前
机械革命 单系统纯净重装Ubuntu(全盘覆盖,清空原有Windows)
后端
GetcharZp6 小时前
告别OOM!用Go+libvips实现30000×50000超大图片的流式瓦片服务
后端·go
IT_陈寒7 小时前
JavaScript项目实战经验分享
前端·人工智能·后端
逛逛GitHub7 小时前
这个 GitHub 有意思啊,Claude Code + Obsidian = 知识库王炸。
github
用户47949283569158 小时前
6w star,GitHub 趋势第一的 Ponytail,这个agent插件到底在火什么
前端·后端
神奇小汤圆9 小时前
2026一线大厂Java八股文精选(附答案,高质量整理)
后端
Warson_L10 小时前
LangGraph入门学习资料
后端
神奇小汤圆10 小时前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
后端
kfaino10 小时前
码农的AI翻身(四)你好,我叫 Attention
人工智能·后端