Liferay Dynamic CSS Filter方法的研究 - 从请求文件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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
前端开发
在Webpack配置文件中,如何配置loader以处理其他类型的文件,如CSS或图片
在Webpack配置文件中,通过设置`module.rules`来配置loader处理不同类型的文件。例如,使用`css-loader`和`style-loader`处理CSS文件,使用`file-loader`或`url-loader`处理图片等资源文件。配置示例:在`rules`数组中添加对应规则,指定`test`匹配文件类型,`use`指定使用的loader。
|
2月前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
36 5
|
2月前
|
缓存 监控 前端开发
CSS 提高性能的方法
【10月更文挑战第24天】在实际应用中,还需要根据具体项目的特点和需求,灵活选择和组合这些方法,不断进行优化和改进。同时,随着技术的不断发展,也需要持续关注新的性能优化技巧和最佳实践,以保持在性能优化方面的领先地位。你对 CSS 性能优化还有哪些深入的思考和经验呢?欢迎进一步交流和分享。
|
2月前
|
前端开发
css页面顶部底部固定,中间自适应几种方法
【10月更文挑战第22天】css页面顶部底部固定,中间自适应几种方法
|
3月前
|
前端开发 容器
CSS 中几种常用的换行方法
CSS 中几种常用的换行方法
40 1
|
4月前
|
XML 前端开发 JavaScript
jQuery HTML / CSS 方法
jQuery HTML / CSS 方法
24 2
|
4月前
|
前端开发 JavaScript
jQuery css() 方法
jQuery css() 方法
28 3
|
3月前
|
前端开发 UED
css性能优化的方法
css性能优化的方法
36 0
|
3月前
|
前端开发
CSS绘制三角形的方法
CSS绘制三角形的方法