1. 程式人生 > >【spring boot】6.idea下springboot打包成jar包和war包,並且可以在外部tomcat下執行訪問到

【spring boot】6.idea下springboot打包成jar包和war包,並且可以在外部tomcat下執行訪問到

 接著上一章走唄:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html

然後宣告一點,下面打包的過程中,scope一直都是使用預設的範圍

<!--用於編譯jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <!--<scope>runtime</scope>
--> </dependency>

把上一章建立好的spring boot專案打包成jar包和war包

【jar和war的區別就是:<packaging>標籤中的值更改就行 如下圖】

=====================================================================================================================================

好了,這裡先打成jar包

 使用maven的外掛打包

 此時打包出來是有預設的名稱的jar包。然後在命令列下  執行起這個jar包。當然,jar包名字你需要去上面target路徑下去拷貝一下。【是不是很麻煩!!】

 然後訪問一下jsp頁面,因為我方法中加了列印,可以看到進來了

 

 但是頁面訪問不到:

 

 然後去jar包中檢視一下,是因為jar包中沒有把webapp下的頁面檔案等打包進去,當然訪問找不到頁面了【如果你想jar包也可以打包webapp下的頁面的話,可以:http://www.cnblogs.com/sxdcgaq8080/p/7715427.html】

 

好吧,jar包既然打包不成功訪問,那就打包war包:就把jar改成war就好了

 

【注意:如果嫌棄上面需要去拷貝jar包名字麻煩,想打包出來的名字是自定義的,在build下 規定即可】

在打包成war包

 看看 打包出來的war包名字是不是自定義的

 

 然後再執行war包

 這下是可以訪問到的了。

 

 看看war包下,是已經將頁面檔案打包進去了。

=======================================================================================================================================

好了 打包暫時打包成功了,直接拿著上面的war包放到一個外部的tomcat中跑起來試一下:

 

啟動一下:

不成功,按照下面 兩步走,解決當前這個在外部tomcat沒辦法執行起來並訪問的問題:

第一步:

   新建一個SpringBootStartApplication 繼承自 SpringBootServletInitializer

 作用:因為在外部容器部署的話,就不能依賴於Application的main函數了,而是要以類似於web.xml檔案配置的方式來啟動Spring應用上下文,

    此時我們需要在啟動類中繼承SpringBootServletInitializer並實現configure方法,這個類的作用與在web.xml中配置負責初始化Spring應用上下文的監聽器作用類似

【注意】:這個新建的類,與springboot的啟動類是同級的

複製程式碼
package com.sxd;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;


public class SpringBootStartApplication  extends SpringBootServletInitializer{


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(FirstdemoApplication.class);
    }
}
複製程式碼

第二步:

   修改pom.xml檔案,這裡有兩種方法,但是最終的目的都是讓springboot內嵌的tomcat在執行時不起作用而已。

   兩種方法任選一種!!!

   方法1:

      

此時的pom.xml檔案內容:   

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sxd</groupId>
    <artifactId>firstdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>firstdemo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--web支援-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--jsp頁面使用jstl標籤-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!--用於編譯jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <!--宣告spring boot內嵌tomcat的作用範圍  在執行時不起作用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>firstDemo</finalName>
    </build>


</project>
複製程式碼

好了 這兩步完成,就可以按照上面的打包過程,打包為war包,然後放在外部的tomcat下,start.bat就可以訪問了。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

   方法2:

      

此時的pom.xml檔案內容:

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sxd</groupId>
    <artifactId>firstdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>firstdemo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--web支援-->
        <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>
        <!--jsp頁面使用jstl標籤-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!--用於編譯jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>firstDemo</finalName>
    </build>


</project>
複製程式碼

好了 這兩步完成,就可以按照上面的打包過程,打包為war包,然後放在外部的tomcat下,start.bat就可以訪問了。

========================================================================================================================================

最後 啟動起來外部的tomcat ,在瀏覽器中訪問路徑如下:

需要加上你的專案名字,才能成功訪問。也就是這個資料夾的名字。

好了,到這裡為止,終於能將一個springboot專案成功的打包並且放在外部的tomcat下啟動並且能夠成功訪問到頁面了。

========================================================================================================================

最後的最後,你是否注意到pom.xml檔案中 ,上一個章節到這一章節一直在糾結的一個問題:

到現在為止,已經剔除了內建的tomcat的情況下

如果指定scope範圍為provided的話

那麼  

  1.啟動類啟動專案的情況下:

    <scope>provided</scope>新增的情況,不能成功啟動,專案不能訪問

    不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問

    訪問地址:http://localhost:8080/view/hello

  2.在右側spring-boot:run啟動的情況下:

    <scope>provided</scope>新增的情況,可以成功啟動,專案可以訪問

    不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問

    訪問地址:http://localhost:8080/view/hello

  3.在命令列啟動打包的war包情況下:

     <scope>provided</scope>新增的情況,可以成功啟動,專案可以訪問

    不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問

    訪問地址:http://localhost:8080/view/hello

  4.將war包部署在外部tomcat下執行的情況下:

    <scope>provided</scope>新增的情況,可以成功啟動,專案可以訪問

    不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問

    訪問地址:http://localhost:8080/firstDemo/view/hello

第一種啟動方式:

第二種啟動方式:

第三種啟動方式:

第四種啟動方式: