SpringBoot 项目运行在 tomcat7 上

SpringBoot 项目如何打成 war 包

SpringBoot项目的默认打包方式是将工程打包成为一个 jar 包。部分情况下,我们需要将项目打包成一个 war 包,以方便我们将工程部署在 tomcat 上运行。

那如何将 SpringBoot 项目打包成一个 war 包呢?

pom 文件修改

修改打包方式。由于 SpringBoot 的默认打包方式将其打包成 jar 包,所以创建出来的项目的 pom是没有特殊声明 packaging 的元素。所以首先要在 pom 坐标处增加<packaging>war</packaging>的设置。

因为使用的 SpringBoot,而且选中了 web的 start,其内置 tomcat服务,但是我们这里又需要手动将其部署到 tomcat 上,所以要将 spring-boot-start-web 中移除对spring-boot-start-tomcat 的依赖传递,所以pom 文件中需要这样修改。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除嵌入式tomcat插件 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

然后 pom 中添加 servlet-api 的依赖。下面有两种方法,可以任选其中一个

方法一:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

方法二:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.0.36</version>
    <scope>provided</scope>
</dependency>

最后将 pom 文件中元素中添加元素并赋值为你需要的打包的名字,比如我这边的手头的这个例子,我希望打出来的 war 包名字为 dataServer.war。所以我的设置是这样的。

<finalName>dataServer</finalName>

到目前为止所有的pom 修改就已经完成了,现在需要修改启动类,并重写初始化方法

重写初始化方法

我们平常用main方法启动的方式,都有一个App的启动类,代码如下:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

我们需要类似于web.xml的配置方式来启动spring上下文了,在Application类的同级添加一个SpringBootStartApplication类,其代码如下:

/**
 * 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
 */
public class SpringBootStartApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类
        return builder.sources(Application.class);
    }
}

打包

在项目根目录下(即包含pom.xml的目录),在命令行里输入:
mvn clean package即可, 等待打包完成,出现[INFO] BUILD SUCCESS即为打包成功。

如何在 tomcat8 上运行

把target目录下的war包放到tomcat的webapps目录下,启动tomcat,即可自动解压部署。
最后在浏览器中输入http://localhost:[端口号]/[打包项目名]/即可浏览。

我再 tomcat8 上运行没有发现什么问题,然后我将程序部署到了服务器上却出现了问题。服务器上 的 tomcat 版本是 7.所以我在本地重新部署了一套 tomcat7 的运行环境用来测试,结果却意外发现了大问题。

如何在 tomcat7 上运行

在 tomcat7 上运行打好的包的时候出现了这样的一个错误。我曾在Stack Overflow 上进行查找,找到一个比较靠谱的解释。大致是说,之所以在 tomcat8 上可以运行,而 tomcat7 上不能运行,是因为 tomcat8中已经包含 el-api 3.0而 tomcat7 上只有el-api 2.2。

解决方法也说的是五花八门,我尝试过很多种方法,最后是一个意想不到的方法帮助我解决了这个问题。

看了网上所说,把tomcat/lib下的el-api.jar拷贝到D:\xxx\jdk1.8.0_121\jre\lib\ext发现还是一样的异常;反编译el-api的确没有ElManager,在el-api3.0才引入.so ,下载el-api3.0.jar,放到jdk或者只放tomcat/lib都可;(直接使用tomcat8也可解决)

然后我将本地 maven 仓库中的el-api3.0 copy 到了 tomcat7 的 lib 路径下,然后将文件放进去,再次使用 catalina 执行 tomcat 没有报错了。真的是坑。。。

原文地址:https://www.cnblogs.com/joimages/p/12059573.html

时间: 2024-11-08 22:40:45

SpringBoot 项目运行在 tomcat7 上的相关文章

原来的SpringBoot项目注册到Eureka上

原来的SpringBoot项目注册到Eureka上 项目开发过程中原来是SpringBoot项目,并没有用到SpringCloud,现在改成微服务项目,将pom文件,启动APP,yml都修改了,但是一直注册不上去,查了好长时间,原因是:pom文件中Eureka客户端的版本号问题. springboot的版本一定要和对应的springcloud版本使用,不然服务提供者启动服务,注册中心找不到注册服务,引入的依赖应该是新的依赖 是2.0.0以上版本的依赖 以前的依赖不能使用,引入的时候不加版本号就可

IDEA 配置maven + SpringBoot项目在新电脑上的配置运行

该教程记录了我在一台新的电脑上安装IDEA,配置JAVA+MAVEN+GIT+SpringBoot项目的过程,最终完成了项目的运行. 一.若想利用IDEA的git工具从GitHub或者码云上面获取项目,需要提前下载git软件,并完成初步的配置. 1. git的下载和配置  进入git官网,https://www.git-scm.com/downloads并下载. 确定自己要下载的版本(我下载的是64bit版本的windows安装程序),点击下载即可. 下载完之后,双击应用程序,一路next即可完

Springboot项目部署在Jboss上的一些问题

前言 由于公司的问题,重构后的微服务必须要部署在Jboss上, 版本为Jboss EAP 7.1,Springboot 2.1.3.RELEASE.部署时候遇到了一些问题,在这记录下来 一.修改Jboss根目录为应用访问目录 首先将jboos的默认欢迎页修改为空,否则会冲突,打开jboss-eap-7.1\standalone\configuration\standalone.xml, 找到 <subsystem xmlns="urn:jboss:domain:undertow:4.0&q

如何把springboot项目部署到tomcat上

前言: 开始以为打包springboot项目为war包丢到tomcat上的webapps下面就可以访问controller层的路径了,可是调用接口却报404的错误,而打开8080的主页,不加路径却可以看到index.jsp正常显示,后来查网上的资料才知道是需要添加一个servlet的初始化类 ServletInitializer类 import com.btw.Application; import org.springframework.boot.builder.SpringApplicati

SpringBoot项目部署到服务器上,tomcat不启动该项目

今天lz把项目重新传到服务器上后,重启tomcat遇到个问题,就是这个tomcat怎么都不启动这个项目,别的项目都没事,一番查找后发现问题所在. 我们先建个SpringBoot工程,重现一下问题: 写了一个简单的controller便于访问测试 可以看到是可以访问到的,接下下我们删除 ServletInitializer 类. 现在的项目结构变成这样: 重新运行一下工程,然后可以看到还是可以访问到的. 然后我们将删掉ServletInitializer 类的项目上传到服务器,看下tomcat启动

springboot项目关于文件的上传与下载

springboot页面需要实现文件的上传与下载 贴出部分代码 html代码 文件的下载 <form target="name" id="download_dubbo_form" name="download_dubbo_form" method="post" action="/jfpointscore-test/download"> <button id="download_d

Eclipse上运行Springboot项目突然JRebel不启动没反应了

1.所有的JRebel配置都是正确的,之前还能正常使用,后来把项目删除了重新导入了一下就不能用了: 后来才发现是启动时未选JRebel,在运行时配置一下即可 2.如果非springboot项目,在tomcat上运行的,则在项目名上右键 -> run as ->maven build后进行配置: 3.其他的注意要打开Eclipse的自动编译功能 最后运行成功: 原文地址:https://www.cnblogs.com/aland-1415/p/12245174.html

idea内springboot项目设置热部署

一.需求分析: 编写idea中编写项目时,经常性改某几行代码就需要重新启动项目,比较浪费时间,借助idea的热部署可以实现代码的热部署 二.实现经过 这边可以借助spring-boot-devtools模块进行配置,devtools会检测代码,并进行重新发布.devtools的实现原理是通过使用两个 ClassLoader,一个用来加载一些第三方的代码(如引入的一些jar包).另一个ClassCLoud会加载一些会更改的代码,可以称 为restart ClassLoader.在有代码进行更改的时

记SpringBoot项目长时间未访问,出现页面找不到的问题

最近某个开发环境的某个应用,隔三差五出现了某某页面找不到,网上百度找了些同类的问题都是说jstl包与默认tomcat里的包冲突,但都感觉和我的问题不是很搭配(因为相同框架的其他项目都可以正常允许) 报错信息如下: 17:40:18.890 [http-nio-8088-exec-18] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context w