1. 程式人生 > >web專案部署到tomcat特定路徑、埠(配置server.xml檔案)

web專案部署到tomcat特定路徑、埠(配置server.xml檔案)

前言

本文將解決以下問題:

  • 如何將Linux下任意位置的專案(虛擬目錄)部署到tomcat?
  • 如何將專案部署到伺服器特定埠?
  • 如何在一個伺服器上部署多個web應用?

本例中系統:Linux version 3.10.0-514.el7.x86_64
tomcat版本:8.0.30.0
jdk 版本:jdk1.8.0

將Linux下任意目錄部署到tomcat

方法簡述:在內增加元素
例:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path=""
docBase="/root/tomcat/apache-tomcat-8.0.30/fantasy" debug="0" privileged="true" reloadable="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host>

解釋:

  1. context元素:每個Context元素代表了執行在虛擬主機上的單個Web應用
  2. docBase 屬性:自己web應用的路徑,可以是相對路徑也可以是絕對路徑,相對路徑是相對於host的webapps,絕對路徑如上例。
  3. path 屬性:即要建立的虛擬目錄,是tomcat訪問這個應用的URL路徑,如果為空則代表訪問路徑為web應用的根目錄,訪問路徑:http://ip:port。如果非空則訪問路徑:http://ip:port/path
  4. reloadable:如果這個屬性設為true,Tomcat伺服器在執行狀態下會監視在WEB-INF/classes和Web-INF/lib目錄CLASS檔案的改變,如果監視到有class檔案被更新,伺服器自動重新載入Web應用,這樣我們可以在不重啟tomcat的情況下改變應用程式

將專案部署到伺服器的特定埠

方法簡述:修改Connector 的 port 屬性,訪問方式同上例
例:

<Connector port="2727" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />

解釋:

  1. port 屬性:指定web應用埠(暴露一個socket埠來accept客戶端的連結)
  2. protocol 屬性:使用的網路協議,表示tomcat使用何種方式來接受和處理client端請求,”HTTP/1.1”是預設值,等效於”org.apache.coyote.http11.Http11Protocol”;
  3. connectionTimeout 屬性:當client與tomcat建立連線之後,在”connectionTimeout”時間之內,仍然沒有得到client的請求資料,此時連線將會被斷開.此值的設定需要考慮到網路穩定型,同時也有效能的考慮.它和tcp的配置選項中的”socket_timeout”仍有區別,connectionTimeout只會在連結建立之後,得到client傳送http-request資訊前有效.

在伺服器上部署多個web應用

方法簡述:新增 service 元素
例:

<Service name="Catalina2">
    <Connector port="2727" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8445" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="fantasy" unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="/root/tomcat/apache-tomcat-8.0.30/fantasy" debug="0" privileged="true" reloadable="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>

解釋:

  1. 一個 service 代表一個web應用例項
  2. 同一個 server.xml 檔案中每個 service 的 name 值不能相同
  3. 同一個 server.xml 檔案中每個 service 的 redirectPort 、port 值不能相同

完整server.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="/root/tomcat/apache-tomcat-8.0.30/webapps/ROOT" debug="0"  privileged="true" reloadable="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
   <Service name="Catalina2">
    <Connector port="2727" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8445" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="fantasy" unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="/root/tomcat/apache-tomcat-8.0.30/fantasy" debug="0" privileged="true" reloadable="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

使用以上方法基本上可以滿足日常開發除錯需求. 個人淺見,有問題歡迎指出