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,如需轉載請自行聯絡原作者
相關文章
- LiferayDynamicCSSFilter方法的研究-快取檔案存在的處理CSSFilter快取
- 獲取沙盒檔案路徑的兩種方法
- c#檔案路徑的獲取C#
- nodejs ejs 請求路徑和靜態資原始檔路徑NodeJS
- 如何獲取 vue 單檔案自身原始碼路徑Vue原始碼
- jboss 獲取web專案真實路徑Web
- 獲取絕對路徑下的檔名和檔案字尾方法
- help:如何獲取類檔案的路徑
- 獲取檔案路徑(Delphi )----轉貼
- 從網路裡面獲取資料寫入到檔案
- IOS中獲取各種檔案的目錄路徑的方法iOS
- Java中的獲取檔案的物理絕對路徑,和讀取檔案Java
- 獲取絕對路徑 【檔案找不到】
- Android 從手機相簿獲取圖片 uri 路徑 從相機獲取照片Android
- python獲取程式執行檔案路徑的方法其一Python
- Java中獲取JAR檔案中資源路徑的三種方法JavaJAR
- iOS中獲取各種檔案的目錄路徑的方法(轉)iOS
- 獲取當前js檔案被引用的路徑JS
- 更改資料檔案路徑的方法
- Java 專案讀取 resource 資原始檔路徑問題Java
- 5招輕鬆獲取Mac檔案路徑Mac
- C# Winform中如何獲取檔名與檔案路徑C#ORM
- c# 讀取多個路徑檔案到一個檔案
- Laravel 檔案上傳和獲取請求引數Laravel
- nodejs遞迴資料夾獲取所有檔案路徑NodeJS遞迴
- FileUpload 上傳的檔案獲取相對路徑
- copy檔案到其他的路徑
- Xamarin Essentials教程獲取路徑檔案系統FileSystem
- Java中獲取URI最後一個路徑段的4種方法Java
- SpringBoot 中獲取專案的路徑和檔案流Spring Boot
- 用重建控制檔案的方法修改oracle資料檔案路徑Oracle
- 怎樣獲取Torque.properties檔案的絕對路徑?
- Unity 編輯器中獲取選中的資料夾、檔案路徑Unity
- Asp.Net 上傳大檔案專題(3)--從請求流中獲取資料並儲存為檔案[上]ASP.NET
- Asp.Net 上傳大檔案專題(3)--從請求流中獲取資料並儲存為檔案[下]ASP.NET
- Python如何獲取當前執行檔案路徑?Python
- gcc g++ 新增標頭檔案路徑和庫檔案路徑的方法GC
- Python最常用的讀取指定路徑檔案的方法!Python