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

一、修改pom.xml

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

添加打包方式,默认jarwar

        
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.1.RELEASE
         
    
    com
    exam_assistant_management
    0.0.1-SNAPSHOT
 
    war
    exam_assistant_management
    Demo project for Spring Boot

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

        
            org.springframework.boot
            spring-boot-starter-web
            
                
                    org.springframework.boot
                    spring-boot-starter-tomcat
                
            
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        

二、修改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 文件夹下(目录和方法二一样)

方法二

节点中配置一下war打包插件

            
            
                org.apache.maven.plugins
                maven-war-plugin
                3.0.0
                
                    
                    testdemo
                
            

然后在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,可以添加如下用户,或者解开默认注释用默认的管理账户也行,然后保存重启服务(先关闭,再启动)
随便加,随便改、相似就行了




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 下的内容),如下




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

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

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

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

 

正确的写法

 

这样子它的资源访问路径才会是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目录下

你可能感兴趣的:(SpringBoot项目打war包并部署到Tomcat教程)