將Java web應用部署到Tomcat 及部署到Tomcat根目錄 的三種方式


Tomcat作為Servlet/JSP容器(服務器)挺不錯的,開源免費,需要知道的是Tomcat是一個Web服務器,其符合Servlet/JSP規范,但是卻沒有實現所有JavaEE規范,所以我們還是應該規范說法,稱Tomcat為一個JavaWeb服務器,而不是JavaEE服務器

我們使用IDE部署JavaWeb項目基本上都是一鍵完成,這是IDE給我們該來的好處,但是還是有必要了解一下部署項目的細節

要將JavaWeb應用部署到Tomcat,需要顯式或隱式定定義一個Tomcat上下文。在Tomcat中,每一個Tomcat上下文都表示一個Web應用程序。所以我們也將分為隱式和顯式兩種方式來進行總結

顯式部署

顯式部署總的來說就是以目錄結構的方式部署,不打包,只要項目根目錄(Maven為webapp  普通項目為webRoot/webContent)有WEB-INF(WEB-INF下有classes,jar包,配置文件),有靜態資源(HTML,CSS,JS ,圖片等)即可。再通過一個在Tomcat中的配置文件來將我們的程序發布出來。

顯式部署有兩種方式:

  • 在Tomcat的conf/Catalina/localhost目錄下創建一個XML文件
  • 在Tomcat的conf/server.xml文件中添加一個Context元素

方式一

如果決定給每一個上下文都創建一個XML文件(第一種方式),那么這文件名就很重要了,因為上下文路徑就是從這個文件名的衍生得到的。例如,將一個Demo1.xml文件放在conf/Catalina/localhost目錄下,那么這個應用程序的上下文路徑就是Demo1,訪問的URL就為:http://localhost:8080/Demo1

這個上下文文件只有一行代碼:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="d:/Demo1" reloadable="true"></Context>

這里的docBase是必須的屬性,它定義了應用程序的位置。reloadable屬性是可選的,如果存在並且值為true,那么一旦程序中Java類文件或者是其他資源文件有任何添加,減少或者是更新,TOmcat都可以檢測到,並且重新加載該應用程序

當把上下文文件添加到Tomcat的指定目錄下,Tomcat就會自動加載應用程序。當刪除這個文件時,Tomcat就會自動卸載應用程序

方式二

在conf/server.xml文件中的Host標簽下添加一個Context元素

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      
      <Context path="/Demo2" docBase="d:/Demo1" reloadable="true"></Context>

</Host>

以第一種方式不同之處在於此處定義上下文需要給上下文路徑定義path屬性,這個path屬性的值表示需要訪問的項目名,訪問的URL就為:http://localhost:8080/Demo2

一般來說,不建議通過server.xml來管理上下文,因為修改后只有重啟Tomcat后,配置才能生效。不過,如果有多個應用程序需要測試,使用這種方式或許更為方便,因為可以在一個文件中同時管理所有的應用程序

隱式部署

方式三

隱式部署真是太方便了,非常建議使用這種方式部署項目。通過將一個war文件或者整個應用程序復制到Tomcat的webapps(Tomcat默認的部署項目位置,可以在server.xml文件中修改,但不建議修改)目錄下,啟動服務器就可以了

**將應用部署到Tomcat根目錄的三種方法

將應用部署到Tomcat根目錄的目的是可以通過“http://[ip]:[port]”直接訪問應用,而不是使用“http://[ip]:[port]/[appName]”上下文路徑進行訪問。

方法一:(最簡單直接的方法)

刪除原 webapps/ROOT 目錄下的所有文件,將應用下的所有文件和文件夾復制到ROOT文件夾下。

方法二:

刪除原webapps/ROOT 目錄下的所有文件,修改文件“conf/server.xml”,在Host節點下增加如下Context的內容配置:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    ......
    <Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war"></Context>
</Host>

注意:

1)path 的值設置為空;
2)應用不要放到tomcat的webapps目錄下(如上述配置是放到自定義的文件夾myapps內的),否則訪問時路徑會有問題;
3)docBase指定到絕對路徑。

如配置此設置后重啟tomcat,如果docBase指向的是war文件,則會自動將war解壓到 webapps/ROOT 目錄;如果docBase指向的是應用已解壓好的目錄,如 docBase=”C:/apache-tomcat-6.0.32/myapps/bc” ,則tomcat不會生成 webapps/ROOT 目錄(這種情況下,這樣就可以不用刪除 webapps/ROOT 目錄,但 webapps/ROOT 目錄內的內容是無法訪問的),訪問時將直接使用docBase指定的目錄。

方法三:

與方法二類似,但不是修改全局配置文件“conf/server.xml,而是在“conf/Catalina/localhost”目錄下增加新的文件”ROOT.xml”(注意大小寫),文件內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war" reloadable="true">
</Context>

注意:

Tomcat5.0以下版本在d:/Tomcat/conf/Catalina/localhost目錄下會自動生成了一個ROOT.xml文件,但是5.0以上版本已不再生成此文件。

參考資料:
[1].http://www.linuxidc.com/Linux/2011-12/48939.htm
[2].http://nj-apple-tree.iteye.com/blog/1635953


免責聲明!

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



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