LiferayDynamicCSSFilter方法的研究-從請求檔案URI到獲取資原始檔真實路徑
現在我們接著上面討論來解決疑問1:如何獲取資原始檔的真實路徑。
引入:
我們上文中已經說到,我們最開始是從請求URI來的,它的位置是 /html/portlet/login/css/main.css
接下來通過簡單的字串操作獲取的requestPath也為 /html/portlet/login/css/main.css
現在我們來看看如何通過這個資訊來獲取這個檔案的真實在Liferay伺服器上的路徑的。
分析:
對應的程式碼如下:
1
2
|
String realPath = ServletContextUtil.getRealPath( _servletContext, requestPath);
|
祕密就在ServletContextUtil的getRealPath()方法中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public static String getRealPath(
ServletContext servletContext, String path) {
String realPath = servletContext.getRealPath(path);
if ((realPath == null ) && ServerDetector.isWebLogic()) {
String rootDir = getRootDir(servletContext);
if (path.startsWith(StringPool.SLASH)) {
realPath = rootDir + path.substring( 1 );
}
else {
realPath = rootDir + path;
}
if (!FileUtil.exists(realPath)) {
realPath = null ;
}
}
return realPath;
}
|
從這段程式碼看出它獲取的方式很簡單,就是在第3行問ServletContext索取這個資訊
具體走了多個呼叫後,它最終是向catalina.jar中的FileDirContext呼叫doGetRealPath()來獲取的。
而這個FileDirContext已經定義了absoluteBase為我們的Liferay tomcat的ROOT目錄:
所以,它最終只要吧我們請求的requestPath拼接到absoluteBase後面就獲得了真正的資源的絕對路徑。
結論:
從請求檔案URI到獲取資原始檔真實路徑是Liferay容器完成的,它的主要操作是用absoluteBase和請求URI字串拼接而成就可以得到最終資原始檔位置了。如下大家可以對比下requestPath和realPath
本文轉自 charles_wang888 51CTO部落格,原文連結:http://blog.51cto.com/supercharles888/1282779,如需轉載請自行聯絡原作者
相關文章
- 如何獲取 vue 單檔案自身原始碼路徑Vue原始碼
- Java中獲取JAR檔案中資源路徑的三種方法JavaJAR
- python獲取程式執行檔案路徑的方法其一Python
- Java中的獲取檔案的物理絕對路徑,和讀取檔案Java
- 獲取絕對路徑 【檔案找不到】
- Android 從手機相簿獲取圖片 uri 路徑 從相機獲取照片Android
- SpringBoot 中獲取專案的路徑和檔案流Spring Boot
- nodejs遞迴資料夾獲取所有檔案路徑NodeJS遞迴
- 獲取當前js檔案被引用的路徑JS
- FileUpload 上傳的檔案獲取相對路徑
- 更改資料檔案路徑的方法
- 5招輕鬆獲取Mac檔案路徑Mac
- Java 專案讀取 resource 資原始檔路徑問題Java
- Laravel 檔案上傳和獲取請求引數Laravel
- Xamarin Essentials教程獲取路徑檔案系統FileSystem
- Python如何獲取當前執行檔案路徑?Python
- Python最常用的讀取指定路徑檔案的方法!Python
- Java中獲取URI最後一個路徑段的4種方法Java
- linux獲取docker容器中的檔案路徑怎麼表示LinuxDocker
- gcc g++ 新增標頭檔案路徑和庫檔案路徑的方法GC
- Unity 編輯器中獲取選中的資料夾、檔案路徑Unity
- python獲取指定目錄所有檔案絕對路徑Python
- Linux 中獲取檔案完整路徑的4種方法介紹Linux
- 圖片隱藏真實的檔名及路徑的方法探討
- Mac進階必看:如何利用Automator快速獲取檔案路徑Mac
- VUE打包後配置配置檔案修改請求url方法及webpack打包的檔案生成同名檔案方法VueWeb
- Java 最佳化:讀取配置檔案 "萬能方式" 跨平臺,動態獲取檔案的絕對路徑Java
- 【Django】檔案讀取時路徑問題Django
- PHP獲取檔案基本屬性的方法PHP
- 爬蟲實戰:從HTTP請求獲取資料解析社群爬蟲HTTP
- Matlab - 獲取和儲存檔案路徑選擇對話方塊Matlab
- VMware複製檔案產生的快取路徑快取
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- JavaWeb中讀取【專案路徑下檔案】的路徑問題:this.getServletContext().getRealPath()JavaWebServletContext
- SpringMVC原始碼分析:POST請求中的檔案處理SpringMVC原始碼
- 修改Oracle資料檔名及資料檔案存放路徑Oracle
- NodeJs 的幾種檔案路徑NodeJS
- 獲取一個資料夾下所有指定字尾名(.java)的檔案(包括子資料夾中的內容),並將這些檔案的絕對路徑寫入到一個文字檔案中Java
- PHP 獲取檔案 副檔名 的常用方法小結【五種方式】PHP