Springboot-技術專區-war包部署在Tomcat上並修改默認端口


springboot項目內置Tomcat,直接打成jar包在dos下運行即可,但有時我們需要用war包以非內嵌Tomcat的方式來部署,以下是本人的實際經驗

1.首先需要修改pom.xml文件

<!-- 打war包時加入此項, 告訴spring-boot tomcat相關jar包用外部的,不要打進去 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

<!--添加servlet api-->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>7.0.42</version>
    <scope>provided</scope>
</dependency>

2.修改打包方式,將默認的jar包修改為war包

<packaging>jar</packaging>

3.修改啟動類

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


//修改為
@SpringBootApplication
public class InquiryApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(InquiryApplication.class);
    }

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

       然后maven打包即可。打好的包會在項目目錄下的target目錄下,將其復制到tomcat的webapps目錄下,然后配置server.xml

       server.xml是Tomcat中最重要的配置文件,server.xml的每一個元素都對應了Tomcat中的一個組件;通過對xml文件中元素的配置,可以實現對Tomcat中各個組件的控制。因此,學習server.xml文件的配置,對於了解和使用Tomcat至關重要。

       說明:由於server.xml文件中元素與Tomcat中組件的對應關系,后文中為了描述方便,“元素”和“組件”的使用不嚴格區分

server.xml整體結構

 <Server>
      <Service>
          <Connector />
          <Connector />
          <Engine>
              <Host>
                  <Context /><!-- 現在常常使用自動部署,不推薦配置Context元素,Context小節有詳細說明 -->
              </Host>
          </Engine>
     </Service>
 </Server>

       該結構中只給出了Tomcat的核心組件,除了核心組件外,Tomcat還有一些其他組件,下面介紹一下組件的分類。

server.xml文件中的元素可以分為以下4類:

(1)頂層元素:<Server>和<Service>

<Server>元素是整個配置文件的根元素,<Service>元素則代表一個Engine元素以及一組與之相連的Connector元素。

(2)連接器:<Connector>

<Connector>代表了外部客戶端發送請求到特定Service的接口;同時也是外部客戶端從特定Service接收響應的接口。

(3)容器:<Engine><Host><Context>

容器的功能是處理Connector接收進來的請求,並產生相應的響應。Engine、Host和Context都是容器,但它們不是平行的關系,而是父子關系:Engine包含Host,Host包含Context。一個Engine組件可以處理Service中的所有請求,一個Host組件可以處理發向一個特定虛擬主機的所有請求,一個Context組件可以處理一個特定Web應用的所有請求。

(4)內嵌組件:可以內嵌到容器中的組件。實際上,Server、Service、Connector、Engine、Host和Context是最重要的最核心的Tomcat組件,其他組件都可以歸為內嵌組件。

下面將詳細介紹Tomcat中各個核心組件的作用,以及相互之間的關系。

      各個組件的詳細介紹見 https://www.cnblogs.com/kismetv/p/7228274.html,此處不再做進一步的介紹

      我們在端口沖突時,只需要修改<connector>組件的port即可,Service包含兩個Connector:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

      (1)通過配置第1個Connector,客戶端可以通過8080端口號使用http協議訪問Tomcat。其中,protocol屬性規定了請求的協議,port規定了請求的端口號,redirectPort表示當強制要求https而請求是http時,重定向至端口號為8443的Connector,connectionTimeout表示連接的超時時間。

在這個例子中,Tomcat監聽HTTP請求,使用的是8080端口,而不是正式的80端口;實際上,在正式的生產環境中,Tomcat也常常監聽8080端口,而不是80端口。這是因為在生產環境中,很少將Tomcat直接對外開放接收請求,而是在Tomcat和客戶端之間加一層代理服務器(如nginx),用於請求的轉發、負載均衡、處理靜態文件等;通過代理服務器訪問Tomcat時,是在局域網中,因此一般仍使用8080端口。

     (2)通過配置第2個Connector,客戶端可以通過8009端口號使用AJP協議訪問Tomcat。AJP協議負責和其他的HTTP服務器(如Apache)建立連接;在把Tomcat與其他HTTP服務器集成時,就需要用到這個連接器。之所以使用Tomcat和其他服務器集成,是因為Tomcat可以用作Servlet/JSP容器,但是對靜態資源的處理速度較慢,不如Apache和IIS等HTTP服務器;因此常常將Tomcat與Apache等集成,前者作Servlet容器,后者處理靜態資源,而AJP協議便負責Tomcat和Apache的連接。

       因服務器上有其他項目,自己的項目上線時Tomcat默認的8080端口被占用,所以在服務器上再安裝一個tomcat,然后修改config下的server.xml文件的各個端口,不要沖突即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM