接着上篇 tomcat配置詳解,再來學習下如何在tomcat下部署應用
1.部署方式
第一種,最常用,直接把WAR包或者文件夾直接放到webapps目錄下面,這時訪問路徑就是WAR包或者文件夾的名稱。
如果想要context為空,即以http://localhost:8080/ 形式訪問,只要將WAR包重命名為ROOT.WAR或者將文件夾重命名為ROOT
ps:webapps其實是Host節點appBase屬性的值,相對路徑是相對於$CATALINA_BASE的,即$CATALINA_BASE/webapps,也可以配置為其他的值,或者一個絕對路徑,這樣那個目錄下的WAR包或者文件夾都會在Tomcat啟動時被自動發布
第二種, 在host節點下增加一個Context節點,一個Host節點可以包含多個Context節點。
<Context path="/test" docBase="test"/>
其中path就是Context,如果要配置根目錄,只有設置path=””;docBase就是文件夾名稱或者是WAR包名,如果是相對路徑,則是相對於它所在Host節點的appBase
ps:不要將docBase指向webapps下的某個WAR或者文件夾,這樣可能會導致應用被多次發布;這種方式發布應用,需要重啟Tomcat才能生效
我修改了默認的server.xml,
<Host name="localhost" appBase="myapps" unpackWARs="false" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/test" docBase="assetmgmt"/> </Host>
發現http://127.0.0.1:8080/assetmgmt/或http://127.0.0.1:8080/test/ 都能訪問,出現這種情況是由於assetmgmt.war放在了myapps下導致項目被重復部署
第三種,在conf\Catalina\localhost下面添加test.xml,
<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="C:\Users\du\Desktop\to\apache-tomcat-6.0.43_manage\assetmgmt.war" >
</Context>
這樣就能通過http://127.0.0.1:8080/test/ 訪問了
這種方式其實是在$CATALINA_BASE/conf/{enginename}/{hostname},默認是$CATALINA_BASE/conf/Catalina/localhost下面添加一個{context}.xml,這樣就使用這個xml的文件名作為項目path:http://127.0.0.1:8080/{context}/訪問,如果{context}有多層,則用#間隔,例如a#b#c.xml,就用http://127.0.0.1:8080/a/b/c/訪問
ps:path不用指定,同樣也不能把war包放在{hostname}的{appBase}下,不用重啟Tomcat部署就能生效
第四種,直接登錄tomcat 管理控制台:http://localhost:8080/,使用tomcat manager發布
2.其它部署配置
1.如果想只啟動一個tomcat,使用不同端口提供服務,只要增加Service節點並相應改動相關值,
<Service name="Catalina1"> <Connector connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443"/> <Engine defaultHost="localhost" name="Catalina1"> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> <Context path="/test" docBase="test"/> </Host> </Engine> </Service>
2.如果一個站點配置多個應用,可以同過增加host虛擬主機的方式實現
<Host appBase="aaa" autoDeploy="true" name="www.aaa.com" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> <Context path="/test" docBase="test"/> </Host> <Host appBase="bbb" autoDeploy="true" name="www.bbb.com" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> <Context path="/test" docBase="test"/> </Host>
這樣www.aaa.com:8080/test的訪問實際是訪問$CATALINA_BASE/aaa/test的訪問,而對www.bbb.com:8080/test的訪問實際是對$CATALINA_BASE/bbb/test的訪問
參考文章: