tomcat 三種部署方式以及server.xml文件的幾個屬性詳解


一、直接將web項目文件件拷貝到webapps目錄中

  這是最常用的方式,Tomcat的Webapps目錄是Tomcat默認的應用目錄,當服務器啟動時,會加載所有這個目錄下的應用。如果你想要修改這個默認目錄,可以在conf下的server.xml文件里修改Host標簽里的appBase值。

  這個方法實際上和在IDE開發環境里部署項目是一樣的。

  用此方法的訪問路徑為http://localhost:8080/webname

二、修改Server.xml文件

  在conf下的server.xml文件里找到Host標簽,在里面添加如下代碼:

1 <Context path="/jfinal_demo" docBase="F:\work\jfinal_demo\WebRoot"  reloadable ="true" debug="0" privileged="true">
2 </Context> 

  path:是訪問時的根地址,表示訪問的路徑,可以自定義,如上述例子中,訪問該應用程序地址如下:http://localhost:8080/jfinal_demo;

  docbase:表示應用程序的路徑,docBase可以使用絕對路徑,也可以使用相對路徑,相對路徑相對於webapps ;

  reloadable:表示可以在運行時在classes與lib文件夾下自動加載類包。這個屬性在開發階段通常都設為true,方便開發;在發布階段應該設置為false,提高應用程序的訪問速度 ;

  其他屬性參見相關文檔。

三、 在conf\Catalina\localhost 目錄下添加xml配置文件

  新建名為jfinal_demo.xml文件,文件內容配置如下:

1 <Context path="/jfinal_demo" docBase="F:\work\jfinal_demo\WebRoot"  reloadable ="true" debug="0" privileged="true">
2 </Context> 

  Catalina\localhost目錄tomcat下載下來默認是沒有的,首次啟動會自動創建,也可以手動創建;

      配置中可以去掉path屬性,因為訪問項目時的根路徑只取決於XML文件的名稱,如上述例子中,訪問該應用程序地址如下:http://localhost:8080/jfinal_demo ;

      推薦使用第三種方式,因為不需要修改tomcat默認配置,對Tomcat的侵入性最小,並且如果想取消部署,直接刪除xml配置文件即可。

四、tomcat配置中的 autodeploy 和reloadable的區別是什么?

  1.替換WEB-INF/lib目錄中的jar文件或WEB-INF/classes目錄中的class文件時,reloadable="true"會讓修改生效(但代價不小),該選項適合調試。

  2.在webapps目錄中增加新的目錄、war文件、修改WEB-INF/web.xmlautoDeploy="true"會新建或重新部署應用,該選項方便部署。

五、怎么去除應用名訪問,以及server.xml文件中Context節點的path屬性詳解

  詳解path之前討論一下絕對路徑:

  絕對路徑在服務端和瀏覽器端區別:

  1) 服務端(jsp中java代碼,servlet,jsp標簽中的路徑:因為jsp標簽是在服務端解析的):絕對路徑的根地址(及 / 開頭代表的)是localhost:8080/webApp(應用部署名),轉發是服務器端,所以絕對路徑不用寫應用名,絕對路徑為:/ (開頭) + 具體的路徑

  2) 瀏覽器端(jsp頁面:引入css,js,圖片等等,js中的絕對路徑(例如ajax中的url也屬於瀏覽器端)):絕對路徑的根地址(及 / 開頭代表的)是localhost:8080沒有到應用名,所以瀏覽器端寫絕對路徑需要:/(開頭)+應用名 + / +具體的路徑,如果使用request.getContextPath()獲得的應用名為:/+應用名,第一個斜杠就不用寫了,從第二個 / 開始寫;鏈接(a標簽,圖片img標簽),表單提交,重定向都屬於瀏覽器端,所以這些url的絕對路徑為 (/  + 應用名)開始寫,也就是request.getContextPath() + / +具體的路徑;

       springmvc中@RequestMapping注解中的url可以以 '/' 開頭,則是絕對路徑,也可以不要 '/' 則是相對路徑,推薦使用絕對路徑; 

  下面講解path屬性:

  1)tomcat 不要應用名訪問設置(server.xml修改<Host>中的子節點) 

  <Context docBase="D:\tool\apache-tomcat-6.0.48\apache-tomcat-6.0.48\webapps\newWap" path="">
  path 設置為 “” 就不需要應用名可以訪問,當然有應用名newWap也可以訪問。
  如果path="newWeiXin",則既可以通過newWap訪問,也可以通過newWeiXin訪問。
  path相當於設置了另一個額外的應用名。
  每部署一個項目到tomcat中,就會自動增加一個context,但是只能一個context的path可以為空,默認不要應用名訪問的項目唯一。context的path不能重復,不然啟動tomcat會報錯。
注意:設置了path為“”后,瀏覽器端(jsp頁面:引入css,js,圖片等等,js)中使用絕對路徑必須的應用名就可以省略,因為path設置為“”后不要應用名一樣可以訪問資源。(已測試)
     
      在項目開發中,有時候從svn檢出的別人開發的項目中的js、css文件的引入,jsp中圖片,鏈接,ajax等瀏覽器端的url絕對路徑都是沒有寫應用名,而是直接寫 / + 具體路徑,這個時候訪問系統報錯404,就需要修改path為空,才能正常訪問;
  所以我們項目開發中不要這么做,要加上應用名訪問資源,因為加上了應用名,即使別人部署項目后,改變了path的值,也可以訪問的。
 
  項目中用到的request.getContextPath()獲得的應用名就是tomcat這里設置的path的值。
  在項目部署之前,eclipse中右鍵項目,可以設置部署到tomcat后的context中的path,即額外應用名。 如下圖所示:
  

 

 六、為什么修改了tomcat的server.xml中的path值,多次重啟后,path值又會被還原成原來的值呢?

  因為eclipse中配置tomcat服務器后,就有一個server項目,項目中也有一套tomcat的配置文件,每次啟動tomcat,都會用這個server項目下的配置文件替換tomcat中的配置,所以自己在tomcat中修改的就被替換了;
  

如上圖就是eclipse中的servers項目,所以如果想要修改tomcat中的配置文件,需要將這個servers項目中的配置文件一起修改,和tomcat中保持一致,這樣每次重啟tomcat后,servers中配置文件覆蓋tomcat中的也不影響;

  
 


免責聲明!

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



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