spring-boot项目打war包并部署到本地的tomcat容器

一、修改打包形式

在pom.xml里设置 

<packaging>war</packaging>

二、移除springboot内嵌入式tomcat插件

在pom.xml里找到spring-boot-starter-web依赖节点,在其中添加如下代码:

<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>

三、添加servlet-api的依赖

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

四、修改springboot的启动类,并重写初始化方法

原有的启动类代码:

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

打war包时的启动类代码:

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

五、最后一步打包部署

方法一:打开idea的右侧maven快捷操作栏,点开项目名称下的lifecycle按钮,找到对应的package命令,双击package,即可在控制台看到springboot执行打包操作,如果没有问题的话,最后会正常结束,生成的war包通常在项目根目录下的target文件夹下

方法二:

在项目根目录下(即包含pom.xml的目录),在命令行里输入: 
mvn clean package即可, 等待打包完成,出现[INFO] BUILD SUCCESS即为打包成功。 
然后把target目录下的war包放到tomcat的webapps目录下,启动tomcat,即可自动解压部署。 

 

1.找到本地的Tomcat安装目录

2.打开webapps,将生成的war包放到webapps目录下

3.打开Tomcat的bin目录,找到startup.bat批处理命令,双击启动Tomcat,如果启动成功,可以访问http://localhost:8080/进行验证

4.最后在浏览器中输入:http://localhost:[端口号]/[打包项目名]/

ps:在本人打war包的过程中,一个困扰很久的问题是静态资源的路径引入,比如css,jpg,js等,对于静态资源访问路径,网上看到好多种方式,没有一一验证,但我所使用的绝对路径的方式,在开发工具中运行访问成功,打成 war 包丢到服务器上运行访问成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

intellij idea 如何将普通项目转换为maven项目

1.工程文件下找到文件pom.xml&#xff0c;如果没有&#xff0c;则新建一个并填写好内容。 2.在pom.xml 文件上右键 Add as Maven Project。 3.OK,等待IDEA帮你完成剩余的工作即可&#xff0c;一个maven项目即将诞生&#xff01;

jquery特效(6)—判断复选框是否选中进行答题提示

前面有一段时间思想开了小差&#xff0c;跟着师父学习了一段时间才发现差距很大&#xff0c;看来我要奋起直追~\(≧▽≦)/~啦啦啦。 最近公司在做一个项目&#xff0c;需要根据用户选择的选项给出相应的提示&#xff0c;下面来看我写的测试程序的效果&#xff1a; 一、实现的原…

前端学习(1701):前端系列javascript之闭包

function create() {const a 100return function() {console.log(a);} } const fn create() const a 200; fn() //100function print(fn) {let a 200;fn(); } let a 100function fn() {console.log(a) } print(fn)//100

hdu 3652 B-number 数位dp

题目链接 求出1-n中包含13并且能被13整除的数的个数 开一个四维数组dp[i][j][k][l]&#xff0c; i表示第i位&#xff0c; j表示这个数mod13&#xff0c; k表示是否包含13&#xff0c; l表示前一位是什么。 1 #include<bits/stdc.h>2 using namespace std;3 #define pb(x)…

MySQL之表结构设计

Schema设计原则 &#xff1a; 更小的数据类型&#xff0c;根据估计选择不会超过范围的最小数据类型。简单数据类型的操作通常需要更少的CPU周期。例如整型比字符操作代价更低&#xff0c;因为字符集和校对规则&#xff08;排序规则&#xff09;使字符比较比整型比较更复杂。 尽…

iOS8:把这些七招APP哭

6月3日。苹果发布了新一代的高配置手机操作系统iOS 8&#xff0c;我们看到了很多新的功能和引人注目的新变化。它为开发人员提供了许多其他更酷能力发展。第三方输入法也开放&#xff0c;这使得国内的百度、搜狗输入法是不过高兴的尖叫&#xff0c;但IOS8是弄哭了一大拨APP。以…

前端学习(1703):前端系列javascript之问题解答

function fn1(a, b) {console.log(this, this)console.log(a, b)return this is fn1 } const fn2 fn1.bind({ x: 100 }, 10, 20, 30); const res fn2(); console.log(res);//模拟bind Function.prototype.bind1 function() {const args Array.prototype.slice.call(argumen…

MySQL表结构设计之范式化和反范式化对比

优点 缺点 范式 1、范式化的更新操作通常比反范式化要快&#xff0c;只需要修改较少数据。 2、范式化的表通常更小&#xff0c;可以更好地放在内存里&#xff0c;所以执行操作会更快。 复杂的查询语句在符合范式的schema上都可能需要至少一次关联&#xff0c;关联表的代价昂…

11.粘性控件

粘性控件 &#xff08;对View的自定义&#xff09;* 应用场景: 未读提醒的清除* 功能实现:> 1. 画静态图 OK> 2. 把静态的数值变成变量(计算得到真实的变量) OK > 3. 不断地修改变量, 重绘界面, 动起来了.> 4. 功能分析:a. 拖拽超出范围,断开, 松手, 消失b. 拖拽超…

前端学习(1704):前端系列javascript之问题解答2和总结

//闭包隐藏数据 function createCache() {const data {} //闭包中的数据 被访问 不被外界访问return {set: function(key, val) {data[key] val},get: function(key) {return data[key];}} } const c createCache(); c.set(a, 100); console.log(c.get(a)); 弹出1,2,3&…

高性能索引设计

索引的优点 减少了服务器需要扫描的数据量帮助服务器避免排序和临时表将随机I/O变成顺序I/O 索引的类型 B-Tree索引 B-TREE通常就意味着里面存储的所有值都是有序的&#xff0c;并且查询的时候&#xff0c;不用全表扫描&#xff0c;而是按照索引结构查找&#xff0c;所以会更…

posix thread线程

1. pthread线程通过调用你提供的某些函数开始。这个“线程函数”应该只有一个void*型参数&#xff0c;并返回系统的类型。2. 通过向pthread_create函数传递线程函数的地址和线程函数调用的参数来参加线程。3. 线程可以通过pthread_self获取自己的ID。4. 除非线程的创建者或者线…

MySQL查询语句优化

慢查询原因 1 从数据库请求不需要的数据 例如业务只需要返回指定的列&#xff0c;sql查询全部列&#xff0c;或者多表关联返回全部列。某些相同数据被重查询多次&#xff0c;可以结合实际业务在初次查询后进行缓存&#xff0c;需要时候从缓存中取出 2 扫描额外的记录行 2 解…

python之装饰器详解

这几天翻看python语法&#xff0c;看到装饰器这里着实卡了一阵&#xff0c;最初认为也就是个函数指针的用法&#xff0c;但仔细研究后发现&#xff0c;不止这么简单。 首先很多资料将装饰器定义为AOP的范畴&#xff0c;也就是Aspect Oriented Programming面向切面编程的概念&am…

“睡服”面试官系列第十六篇之Symbol(建议收藏学习)

目录 1. 概述 2. 作为属性名的 Symbol 3. 实例&#xff1a;消除魔术字符串 4. 属性名的遍历 5. Symbol.for()&#xff0c;Symbol.keyFor() 6. 实例&#xff1a;模块的 Singleton 模式 7. 内置的 Symbol 值 7.1Symbol.hasInstance 7.2Symbol.isConcatSpreadable 7.3Sy…

POST请求传入中文参数,接收端乱码

问题描述&#xff1a;通过post请求调试短信接口发送出去后&#xff0c;客户端无法收到短信&#xff0c;中文内容乱码 追踪过程&#xff1a; 接口采用post请求进行&#xff0c;无法收取短信的接口代码如下&#xff1a; public static String sendPost(String url, Map<Stri…