Lniux上的tomcat部署web項目路徑問題


一、項目路徑及部署、啟動位置

1、在tomcat下部署應用,部署路徑:一般直接部署在tomcat/webapps/ROOT下即可。
2、默認訪問路徑:tomcat的默認訪問路徑為webapps/ROOT下的index.jsp頁面。
可以通過修改tomcat/conf/server.xml下的配置信息來修改項目的默認訪問路徑。
3、准備金項目直接解壓在tomcat/webapps/ROOT路徑下:其實就是相當於把准備金項目命名為ROOT。
4、webapps下的每個文件夾,都可以看做一個web項目。

5、准備金系統的logback.xml中設置的路徑是:

<!-- 定義日志文件 輸出位置 -->

<property name="log_dir" value="E:\logs" />

在Windows環境下,會識別E:為系統的E盤,默認在E盤下創建logs文件夾。但是正在Linux環境下,不存在E盤,會將E:\logs識別為E:logs文件夾。此時為相對路徑,而tomcat在創建文件時:會從程序啟動的地方去創建這個文件(Java項目中也是如此),那么web應用是從有tomcat來執行的,tomcat這個程序是從哪里啟動文件是startup.bat?位置是tomcat/bin。會在bin目錄下創建E:logs文件夾,而不是在tomcat的默認根路徑故tomcat文件夾下創建E:logs文件夾。(驗證:若是用sh bin/startup.sh命令,在tomcat目錄下啟動tomcat,則會在tomcat路徑下創建E:logs文件夾。)

所以為了使日志文件在我們指定的目錄下,有兩只方式:

【1】我們可以使用絕對路徑:      /

【2】也可以使用相對路徑:

./ 當前目錄。

../ 父級目錄。

/ 根目錄。

但是並不及建議用E:這種寫死的路徑。可以用以下方式創建日志文件的路徑:

方式一:

value="${catalina.home}/logs":
本地:會在tomcat目錄下創建logs文件。
Linux:Linux上會在tomcat目錄下創建logs文件。

方式二:

value="${catalina.base}/logs":
本地:會在C:\Users\Administrator\.IntelliJIdea2017.2\system\tomcat\Unnamed_reserve_10目錄下創建logs文件。(因為
本地tomcat為每個idea項目在這里創建了一個副本,項目是在這里啟動的)
Linux:會在tomcat目錄下創建logs文件。

方式三:

value="logs":會在tomcat/bin目錄下創建logs文件。

../webapps/工程名:會在工程名目錄下創建logs文件。

注意:我上次本地啟動項目是在E盤創建的logs文件夾,這次可能是改啥東西了?我也不知道,反正本地的logs文件夾又跑tomcat/bin目錄下了。奇怪。

 這個是用tomcat啟動的web項目。我在這個項目里建了個main主方法,創建的logs文件又跑項目的根路徑下了:

邪了門了,本地啟動項目,好像配置的路徑不起作用了。。。

7、項目里獲取Tomcat服務器的根路徑:

String property = System.getProperty("catalina.home");
System.out.println(property);

8、運行位置

String property1 = System.getProperty("catalina.base");
System.out.println(property1);

以前一直很好奇,在idea中運行tomcat,把項目部署到其中,運行起來,然后我去tomcat目錄下去看,根本找不到我部署的項目 那我的項目是咋運行的啊… - -

后來我就查啊查 ,糾結啊糾結,然后大概知道是咋回事了:

在idea中配置的tomcat,在運行時idea不會把項目放到該路徑下,而是復制一份足夠的配置文件,到 ${user.home}/.IntelliJIdea/system/tomcat 目錄下:

 

也就是說每個項目都有屬於自己的一份tomcat配置,互不干擾。

每個項目的配置文件夾中有一個 /conf/Catalina/localhost/ROOT.xml 文件,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="D:\work\項目\target\xxx-web" />

其中,path是指在訪問此項目時,是否需要添加額外的路徑,如果為空,則直接使用域名或者ip就可以訪問到該項目:127.0.0.1。這個值在ieda中的Run/Debug Configurations中可以配置:

 

docBase是指要運行的項目的部署位置,D:\work\項目 就是我的項目源代碼的位置,target是由maven構建后生成的,D:\work\項目\target\xxx-web 目錄就是maven build完成之后生成的項目,結構如下:

 

而idea啟動tomcat的命令為:

也就是說,整個項目運行過程為:首先maven build項目,將構建結果寫到項目的target目錄下,然后idea復制一份tomcat的配置文件到${user.home}/.IntelliJIdea/system/tomcat 中,之后啟動tomcat安裝目錄下的catalina.bat文件,tomcat讀取配置文件,找到項目位置,然后就運行起來了。

原文鏈接:https://blog.csdn.net/joenqc/article/details/58044953

二、tomcat修改默認訪問項目名稱和項目發布路徑

1、修改項目發布路徑

tomcat默認的而發布路徑為 tomcat/webapps/目錄,但是這個目錄下有一些默認的項目,在tomcat啟動的時候會跟着一起加載。如果不想刪除這些項目,可以把tomcat發布的路徑修改到其他地方。

找到tomcat/conf/server.xml文件,修改里面這一行的appBase為其他路徑即可。

<Host name="localhost"  appBase="/root/webfile/webapps" unpackWARs="true" autoDeploy="true">

其中:

  • name是虛擬主機名,對應目錄 /conf /Catalina /localhost
  • unpackWARs 為是否自動解壓war文件,如果設置為true,表示把war文件先展開再運行。如果為false則直接運行war文件
  • autoDeploy,默認為true,表示如果有新的WEB應用放入appBase並且Tomcat在運行的情況下,自動載入應用

特地別: 
這里既可以用相對路徑,也可以用絕對路徑。 
相對路徑默認tomcat目錄為根目錄


2、修改默認訪問項目

最簡單的,可以直接把項目名稱修改為ROOT,放在 tomcat/webapps/目錄即可。

如果不想修改。那么在第1步中的

<Host name="localhost"  appBase="/root/webfile/webapps" unpackWARs="true" autoDeploy="true">

下面加上下面這句即可,其中

<!-- 設置默認項目名稱 -->
<Context path="" docBase="/root/webfile/web" reloadable="true"/>
  • path代表用瀏覽器訪問的時候的的路徑,如http://localhost:8080/web來訪問path=”/web”
  • docBase為你的項目的路徑,這里同樣既可以用相對路徑,也可以用絕對路徑。設置好了之后就會把項目自動映射到ROOT
  • reloadable,如果這個屬性設為true,tomcat服務器在運行狀態下會監視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動,如果監測到有class文件被更新的,服務器會自動重新加載Web應用

三、JavaWeb創建的文件夾默認在tomcat/bin中

系統項目中需要設置緩存目錄,原本項目中的目錄設置為D:/cache目錄,這怎么成?於是手動改成了cache目錄,原本想使用了相對路徑,web項目能夠把緩存路徑設置到tomcat的webapp的具體項目中,誰知道項目啟動后在web項目目錄中根本找不到這個目錄,什么原因?

  原來這是java讀取文件機制的問題,如果直接這樣寫路徑new File("a.***"),那么tomcat就會從程序啟動的地方去創建這個文件(Java項目中也是如此),那么web應用是從有tomcat來執行的,tomcat這個程序是從哪里啟動文件是startup.bat,位置是tomcat/bin。

  我們前面說了,普通java項目也是如此,從程序啟動的地方創建文件,那么文件路徑不會是JDK中bin路徑吧?不是這樣的,看實驗結果:

1 package io.guangsoft.file;
2 import java.io.File;
3 public class CreateFile {
4     public static void main(String args[]) {
5         File file = new File("location.txt");
6         System.out.println(file.getAbsolutePath());
7     }
8 }

  結果表明,默認的文件路徑是eclipse項目路徑,因為我們的項目從main函數啟動,而main函數在eclipse項目中,同理web項目的啟動入口main函數在tomcat的bin中的某個jar包。而jdk提供的僅是java運行程序不是真正的程序啟動路徑。


免責聲明!

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



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