一、項目路徑及部署、啟動位置
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運行程序不是真正的程序啟動路徑。