可以編輯conf/server.xml文件和配置Tomcat以辨認、啟動和管理Web應用程序。
再次,這是筆者建議您為每個新增加的Web應用程序配置Tomcat的方法。
要使用這一部署方法部署WAR文件,必須在server.xml中為Web應用程序增加Context元素,且必須把Web應用程序的Context元素嵌套在Host容器元素中。
編輯server.xml文件,並查找Host元素,默認情況如下所示:
<Host name="localhost " appBase="webapps"
unpackWARs="true " autoDeploy="true "
xmlValidation="false " xmlNamespaceAware="false ">
.....
</Host>
可以設置unpackWARs的值為true或false,這要根據從打包的WAR文件還是在第一次解包后從解包的目錄提供文件而定。
筆者建議您設置該值為true,並允許Tomcat解包WAR文件且從解包目錄下提供文件,因為這樣處理可以使您很容易就能檢測到Tomcat提供什么樣的Web應用程序文件和內容。查看本站早期“Host”一節。以了解筆者為何這樣建議的詳細理由。
通常,因為默認情況下主機名是localhost,而且通過Tomcat的網絡服務器傳遞給機器的請求都將默認主機作為(默認)路由,所以在默認Host中增加Context能工作。
在Host中增加Context的情況如下所示:
<Host name="localhost " appBase="webapps"
unpackWARs="true " autoDeploy="false "
xmlValidation="false " xmlNamespaceAware="false ">
<Context docBase="my-webapp.war " path="/my-webapp "/>
</Host>
注意:將Host元素上的autoDeploy設置為“false”非常重要,從而可以避免兩次部署Web應用程序。
如果將autoDeploy設置為true,就會發生再次部署的現象,第一次因server.xml中的Context配置而被部署(因為deployOnstartup="true "),而第二次因autoDeploy被設置為true而發生自動部署(默認情況下,在沒有顯式Context的這些屬性時,它們每個的默認值都是true)。
顯式設置autoDeploy為False。避免了在server.xml中增加Context配置時兩次部署相同的Web應用程序。
保存server.xml並重啟Tomcat。
當Tomcat啟動的時候,它將查找路徑CATALINA_HOME/webapps/my-webapp.war中Web應用程序的WAR文件。
如果Tomcat在該路徑下找到了您的Web應用程序,Tomcat將嘗試部署您的Web應用程序,而且將它安裝到URI路徑為/my-webapp的Web服務器上。
如果在啟動和停止Web應用程序時,Tomcat沒有遇到任何錯誤(查看日期),您就可以通過瀏覽http://localhost:8080/my-webapp進行訪問。
相反,如果您想讓這個特殊的Web應用程序映射為服務器的根URI(“/”),如通過http://localhost:8080/訪問您的Web應用程序,您需要執行下列特殊步驟:
一、停止Tomcat。
二、確定不存在CATALINA_HOME/conf/[EngineName]/[Hostname]/ROOT.xml配置文件如果存在,只要刪除就可以了。
三、編輯server.xml文件,並使<Host>和<context>其看起來如下所示:
<Host name="localhost " appBase="webapps"
unpackWARs="true " autoDeploy="false "
xmlValidation="false " xmlNamespaceAware="false ">
<Context docBase="my-webapp.war " path=""/>
</Host>
注意在Context元素上path="",這讓Tomcat把您的Web應用程序映射為root URI路徑。
在這種情況下,沒有其他程序被映射為root URI路徑,而且您的Web應用程序已經被顯示映射為root URI路徑。
請再次確定autoDeploy被設置為false,否則,您的Web應用程序將被部署兩次(一次在root URI上被server.xml文件顯式配置的路徑所部署,另一次在/my-webapp URI路徑下被自動部署)。
重啟Tomcat,一旦完成啟動,瀏覽http://localhost:8080,就會看到自己的Web應用程序。
ps:
server.xml文件.在Host節點下增加如下參考代碼:
<Context docBase="D:\pafalearning\userapp\dist\tomcat\userapp.war" path="/userapp" reloadable="true"/>
- <Context docBase="D:\pafalearning\userapp\dist\tomcat\userapp.war" path="/userapp" reloadable="true"/>
docBase:指向項目的根目錄所在的路徑,由於我將項目打成了war包,所以直接指向這個war包就可以了(我的項目名為:userapp).
path:是一個虛擬目錄,這里設置成了"userapp",則啟動Tomcat后,你將通過http://localhost:8080/userapp/*.jsp來訪問項目的相關頁面.
reloadable:如果設置為"true",則表示當你修改jsp文件后,不需要重啟服務器就可以實現頁面顯示的同步.
可以這樣理解:將docBase實際目錄下的項目,映射到${tomcat.home}\webapps目錄下的虛擬項目path(這里的配置指的是userapp項目).
也許有些人還不懂war包是什么,其實就是你的項目下的WebRoot文件夾中的內容(不加WebRoot這個文件夾)打成一個壓縮包,后綴用war,其實和rar差不多,不過tomcat就認war。
那為什么war包可以講項目這個發布出來呢?
1.因為所有新建的文件夾都在WebRoot文件夾下
2.所有的頁面都在WebRoot文件夾下
3.所有的后台代碼都編譯成了 .class文件,在WebRoot \ WEB-INF \ classes 下面
4.我們習慣將所有的 .jar包放在WebRoot \ WEB-INF \ lib 下面
有了這些,就相當於一個項目完全考到了tomcat下面,這就是用war包發布項目的原理
5.當想重新生成userapp文件夾,直接將userapp整個文件夾包括文件夾本身刪除,重新生成war包即可。