Tomcat下使用war包發布和注意事項


可以編輯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"/>  

[java]  view plain  copy
 
  1. <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包即可。


免責聲明!

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



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