SpringBoot项目打war包并部署到Tomcat教程

一、修改pom.xml

它与 parent 是同级的,别放到parent节点里面去了

添加打包方式,默认jar<packaging>war</packaging>

        <!-- 默认打包方式为jar(没写),添加下面代码将其修改为war -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com</groupId>
    <artifactId>exam_assistant_management</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 <!-添加打包方式->
    <packaging>war</packaging>
    <name>exam_assistant_management</name>
    <description>Demo project for Spring Boot</description>

除去内置Tomcat,并添加Servlet所需要的依赖

        <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>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

二、修改main()方法启动类

继承 SpringBootServletInitializer 类,并添加方法,记得在类上面加注解@ServletComponentScan@EnableAsync 可加可不加

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //WartestApplication为你的启动类名
        return builder.sources(WartestApplication.class);
    }

贴一个完整的启动类例子

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@ServletComponentScan
@EnableAsync
public class WartestApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //WartestApplication为你的启动类名
        return builder.sources(WartestApplication.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(WartestApplication.class, args);
    }
}

三、导出 war 文件

方法一

Build → Build Artifacts..… → 随便选一个吧,区别我也不知道
导出的地址在你的项目路径下的 target 文件夹下(目录和方法二一样)

方法二

在<plugins>节点中配置一下war打包插件

            <!-- war 插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <!-- 打包后的名字,例如:testdemo.war -->
                    <warName>testdemo</warName>
                </configuration>
            </plugin>

然后在IDEA右侧 点击Maven →项目名 →Plugins →war →war:war(双击),IDEA就开始生成war文件
QQ截图20191105220404.png

完成后可以从日志中看到 生成的文件目录(在工程文件夹下的target文件夹下)
QQ截图20191105220630.png

四、部署到Tomcat (请看最后面的 ‘注意’ ,尤其是云服务器(利用内网穿透搭建的服务器))

到了这里前提是你的Tomcat环境都已经OK了。启动服务:bin目录下的startup.bat,关闭服务:bin目录下的shutdown.bat

方法一

用Tomcat的图形界面部署

1、先添加(设置)一个管理员的用户名与密码

打开Tomcat目录,进入conf目录,打开tomcat-users.xml,可以添加如下用户,或者解开默认注释用默认的管理账户也行,然后保存重启服务(先关闭,再启动)
随便加,随便改、相似就行了

<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
  <user username="role1" password="<must-be-changed>" roles="role1"/>
-->
<role rolename="manager-gui"/>
<user username="admin" password="123456" roles="manager-gui"/>

2、开始部署

先进 127.0.0.1:8080 Tomcat 的首页 点击 Manager App 输入上面添加的账户

QQ截图20191105221702.png

进去后界面如下
QQ截图20191105223119.png

里面还是有几个默认的应用,不要管他,往下拉,找到要部署的WAR文件
QQ截图20191105223439.png

部署成功后 开头的 消息 栏上会显示OK,失败的话也会有相应的提示(在这个界面卸载了某个应用后,其相应的war文件还是存在于webapps目录下,下次在部署相同名字的应用的时候会提示文件已经存在,则需先删原文件,再部署即可),同时在应用程序列表里也可以找到刚部署的应用了。点击刚部署的应用名就进入部署的应用。访问路径为http://127.0.0.1:8080/testdemo/(假如testdemo为刚部署的名字)

方法二

直接将war文件复制到webapps目录下,重启Tomcat服务。它会自动对war包进行解压缩并存放到tomcat的webapps目录下。

注意

用方法一完成上面部署,只可以在当前电脑上访问,如果利用内网穿透实现其他电脑访问的话。则还需要修改一个地方。\webapps\manager\META-INF\文件下的 context.xml。 把Valve 节点和Manager 节点注释掉(全部注释掉Context 下的内容),如下

<Context antiResourceLocking="false" privileged="true" >
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
-->
</Context>

很重要的一件事 ........解决无法访问静态资源

在我们的springboot项目中,建议在application.properties加上

#访问时加上项目名
server.servlet.context-path=/exam_assistant_management

在我们的html文件中的引用也要注意
不能这么写

 <link rel="stylesheet" type="text/css" href="../../static/admin/css/login.css"/>

正确的写法

 <link rel="stylesheet" type="text/css" href="static/admin/css/login.css"/>

这样子它的资源访问路径才会是127.0.0.1:8080/exam_assistant_management/static/admin/css/login.css

如果用最上面的写法话,在访问时会变成
127.0.0.1:8080/static/admin/css/login.css

exam_assistant_management是我的项目名,如果导出的war文件不是你写的名字,最好改成这个。

其次如果项目中有自己引用的jar包,不是pom文件引入的,项目打包是并没有把它加进去,所以则需要把它复制到tomcat的lib目录下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容