美文网首页
SpringBoot项目打war包并部署到Tomcat教程

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

作者: 我想放假休息 | 来源:发表于2019-11-06 19:14 被阅读0次

    一、修改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目录下

    相关文章

      网友评论

          本文标题:SpringBoot项目打war包并部署到Tomcat教程

          本文链接:https://www.haomeiwen.com/subject/pvkybctx.html