SpringBoot打成war包在tomcat或wildfly下运行

简介: SpringBoot打成war包在tomcat或wildfly下运行

SpringBoot打包形式

默认情况下,创建的SpringBoot项目是按照jar包形式来进行打包的。同时,内置了tomcat的容器。


那么,此时如果想让springboot打包成war包,并部署到wildfly等容器,该如何处理?


下面将从创建项目开始逐一讲解。


创建项目

创建项目没有什么难点,使用idea工具创建一个简单的maven项目即可,如果你的项目已经是springboot项目,想要修改为war包形式,对照修改即可。


修改pom.xml配置

创建项目之后,修改pom.xml文件,添加parent标签。


<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
    <relativePath/>
</parent>

如果原来是springboot项目,则已经包含了,不用修改。

pom.xml中设置打包方式为war。

<packaging>war</packaging>
• 1

添加或修改dependency配置,如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

其中在spring-boot-starter-web中需要排除tomcat的依赖。同时,添加servlet-api的依赖。注意这里添加的依赖为Servlet2.5。

在build中使用如下插件进行打包。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
               <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

启动main方法

如果已经存在启动的main方法,则让main方法继承SpringBootServletInitializer,并实现其方法即可。如果是新创建项目,则直接在顶级目录创建SpringBootApp(启动类),然后启动diam如下。

@SpringBootApplication
public class SpringBootApp extends SpringBootServletInitializer {
  public static void main(String[] args) {
    SpringApplication.run(SpringBootApp.class, args);
  }
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(SpringBootApp.class);
  }
}

打包

通过maven命令执行package打包即可,在target目录下即可生成war包。


至于tomcat和wildfly的部署,都可将war包放置于对应的目录下启动服务即可。


异常情况

如果在启动时报如类似如下异常(提示缺少web.xml):


Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

1

注意检查pom文件打包插件和是否排除了tomcat的问题,核查上面的打包插件是否正确。


问题的原因是:springboot项目中引用了依赖包spring-boot-starter-web。该包中引用的spring-boot-starter-tomcat里包含了tomcat嵌入式servlet容器,其不同版本实现的是不同的servlet版本规范。


Servlet/JSP版本2.5/2.1支持Tomcat的版本为6.0.x,最低java版本为1.5。Servlet/JSP版本3.0/2.2支持Tomcat的版本为7.0.x,最低java版本为1.6。


由于上面使用了Servlet2.5,当没有web.xml文件时会出现上面的异常。


解决方式一:当Servlet版本小于3时,使用创建/src/main/webapp/WEB-INF/web.xml文件。


解决方式二:在pom.xml的build下添加maven-war-plugin插件。并设置failOnMissingWebXml为false。




目录
打赏
0
0
0
0
33
分享
相关文章
SpringBoot项目打war包流程
本文介绍了将Spring Boot项目改造为WAR包并部署到外部Tomcat服务器的步骤。主要内容包括:1) 修改pom.xml中的打包方式为WAR;2) 排除Spring Boot内置的Tomcat依赖;3) 添加Servlet API依赖;4) 改造启动类以支持WAR部署;5) 打包和部署。通过这些步骤,可以轻松地将Spring Boot应用转换为适合外部Tomcat服务器的WAR包。
254 64
SpringBoot项目打war包流程
Spring Boot整合Tomcat底层源码分析
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置和起步依赖等特性,大大简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是其与Tomcat的整合。
147 1
编写SpringBoot的自定义starter包
通过本文的介绍,我们详细讲解了如何创建一个Spring Boot自定义Starter包,包括自动配置类、配置属性类、`spring.factories`文件的创建和配置。通过自定义Starter,可以有效地复用公共配置和组件,提高开发效率。希望本文能帮助您更好地理解和应用Spring Boot自定义Starter,在实际项目中灵活使用这一强大的功能。
89 17
SpringBoot项目打包成war包
通过上述步骤,我们成功地将一个Spring Boot应用打包成WAR文件,并部署到外部的Tomcat服务器中。这种方式适用于需要与传统Servlet容器集成的场景。
83 8
SpringBoot集成Tomcat、DispatcherServlet
通过这些配置,您可以充分利用 Spring Boot 内置的功能,快速构建和优化您的 Web 应用。
107 21
21张图解析Tomcat运行原理与架构全貌
【10月更文挑战第2天】本文通过21张图详细解析了Tomcat的运行原理与架构。Tomcat作为Java Web开发中最流行的Web服务器之一,其架构设计精妙。文章首先介绍了Tomcat的基本组件:Connector(连接器)负责网络通信,Container(容器)处理业务逻辑。连接器内部包括EndPoint、Processor和Adapter等组件,分别处理通信、协议解析和请求封装。容器采用多级结构(Engine、Host、Context、Wrapper),并通过Mapper组件进行请求路由。文章还探讨了Tomcat的生命周期管理、启动与停止机制,并通过源码分析展示了请求处理流程。
springboot打war包,成功部署
这篇文章介绍了如何将Spring Boot项目打包成WAR文件,并成功部署到Tomcat服务器的详细步骤。
390 0
springboot打war包,成功部署
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
320 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
Spring Boot 中的 Tomcat 是如何启动的?
我们知道 Spring Boot 给我们带来了一个全新的开发体验,让我们可以直接把 Web 程序打包成 jar 包直接启动,这得益于 Spring Boot 内置了容器,可以直接启动。
187 0
Spring Boot 中的 Tomcat 是如何启动的?
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。