Liferay Dynamic CSS Filter方法的研究 - 从请求文件URI到获取资源文件真实路径

简介:

现在我们接着上面讨论来解决疑问1:如何获取资源文件的真实路径。


引入:

我们上文中已经说到,我们最开始是从请求URI来的,它的位置是 /html/portlet/login/css/main.css

接下来通过简单的字符串操作获取的requestPath也为 /html/portlet/login/css/main.css

143243506.png

现在我们来看看如何通过这个信息来获取这个文件的真实在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目录:

144620235.png


所以,它最终只要吧我们请求的requestPath拼接到absoluteBase后面就获得了真正的资源的绝对路径。



结论:

从请求文件URI到获取资源文件真实路径是Liferay容器完成的,它的主要操作是用absoluteBase和请求URI字符串拼接而成就可以得到最终资源文件位置了。如下大家可以对比下requestPath和realPath

145918850.png






本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1282779,如需转载请自行联系原作者
目录
相关文章
|
27天前
|
JavaScript 前端开发
【快捷键配置】常用HTML类名、CSS样式名称、JS方法变量名、vue代码片段
【快捷键配置】常用HTML类名、CSS样式名称、JS方法变量名、vue代码片段
|
2月前
|
前端开发
CSS水平居中与垂直居中的方法
CSS水平居中与垂直居中的方法
|
2月前
|
前端开发
CSS画三角形(三种方法)
CSS画三角形(三种方法)
|
2月前
|
前端开发 计算机视觉 开发者
利用CSS改变图片颜色的100种方法!
利用CSS改变图片颜色的100种方法!
44 1
|
3月前
|
前端开发 JavaScript 开发者
CSS隐藏元素的N种方法,你知道哪一种最适合你?
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
3月前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
53 0
|
18天前
|
前端开发
css中几种隐藏元素的方法
css中几种隐藏元素的方法
12 0
|
18天前
|
JavaScript 前端开发 iOS开发
js实用方法记录-动态加载css/js
js实用方法记录-动态加载css/js
19 0
|
21天前
|
前端开发
css声明方法
【4月更文挑战第14天】css声明方法
19 6
|
22天前
|
Web App开发 前端开发 开发者
css检查方法
【4月更文挑战第13天】css检查方法
15 2