1. 程式人生 > >關於Java獲取Tomcat7和Tomcat8根目錄路徑webapps的不同

關於Java獲取Tomcat7和Tomcat8根目錄路徑webapps的不同

專案需要用到上傳功能,所以想把上傳後的圖片儲存在Tomcat的根目錄下,發現Tomcat和Tomcat獲取根目錄有所不同,特此記錄。


Java獲取Tomcat根目錄示例程式碼如下

  private HttpServletRequest request = ServletActionContext.getRequest();
  String path = request.getSession().getServletContext().getRealPath("/");
  System.out.println("path = " + path);
            
  String picturePath = request.getSession().getServletContext().getRealPath("/picture");
  System.out.println("picturePath = " + picturePath);

  String url = request.getSession().getServletContext().getRealPath("");
  System.out.println("url = " + url);

  int ch = url.lastIndexOf("\\");
  String webapp = url.substring(0, ch);
  System.out.println("webapp = " + webapp);

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

  String home2 = System.getProperty("catalina.home");
  System.out.println("home2 = " + home2 + "\\webapps");

使用的測試工具為postman
在這裡插入圖片描述
測試結果如下

Tomcat7:
在這裡插入圖片描述
Tomcat8:
在這裡插入圖片描述
此時,我們可以發現 request.getSession().getServletContext().getRealPath("/") Tomcat7和8獲取的路徑是一樣的,都是獲取你專案路徑xxx,但是 request.getSession().getServletContext().getRealPath("") 獲取的路徑有所不同,而且 webapp在Tomcat可以直接獲取,而Tomcat8則不能,需要使用其他方法來實現。

我們可以用更好的方法來實現,就是

 String home2 = System.getProperty("catalina.home");
 System.out.println("home2 = " + home2 + "\\webapps");

這樣無論是Tomcat7還是Tomcat8都可以獲取到正確的webapps路徑了。

或者配置Tomcat的server.xml檔案配置虛擬對映路徑

1、修改Tomcat的server.xml檔案,新增Context 欄位

    <Host name="localhost"  appBase="webapps"  unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
			    <!-- 設定虛擬路徑[訪問時路徑為/picture] -->  
         <Context path="/picture" docBase="F:\picture" reloadable="true" />  

其中path是對映的虛擬路徑(可視具體情況配置),docBase是靜態資源存放的真實物理路徑,reloadable指有檔案更新時,是否重新載入,一般設定為true後,tomcat不需要重啟啟動,自動熱載入

2、此時,直接開啟 http://localhost:8080/picture/xxxxxxxx.jpg 即可開啟圖片或上傳檔案到 http://localhost:8080/picture/ 即可。
在這裡插入圖片描述


結論:一般獲取路徑都是用於上傳或者下載內容,我們可以用上面程式碼獲取路徑,也可以直接配置Tomcat的虛擬路徑,但最好的方法就是使用雲儲存,使用雲儲存儲存圖片或者檔案,可以很大程度減輕伺服器壓力,也不需要怎麼去管理,非常方便,並且現在的雲端儲存大多數都是10G免費試用。