关于获取Tomcat和WebSphere的classes目录的绝对路径的问题
来源:互联网 发布:wampserver 本地域名 编辑:程序博客网 时间:2024/05/29 13:31
针对问题的提出,首先作出如下假设:
1,有一个类 ResourceRender ,所在的 package 是 com.daston.resource
2,在 /web-inf/classes 目录下有一个 abc.xml 文件,需要在某个时候装载此配置文件
3,这个WEB应用的classpath假设为 /appsd 一般的做法:
String classPathName = ResourceRender.class.getResource("/").getPath(); 从理论上看,这样,应该可以直接得到 classes 的绝对路径;而在事实上,Tomcat 是可以这样获得的;而在 WebSphere 部署里面,情况并不是这样,这样得到的路径是 WebSphere 的loader所在的目录,比如 /work/loader,而不是 /web-inf/classes。 针对这种情况,可以考虑这样的做法: String classPathName = ResourceRender.class.getResource("").getPath(); 这样做,classPathName 是这样的,/web-inf/classes/com/daston/resource/ ;当然,这样根据 ResourceRender 的 package 将后缀去掉,从而获得classes 的绝对路径。这样的测试几乎在 Tomcat 和 WebSphere 都是成功的。 可是,今天打包部署系统时,问题出来了,通过调试,返回的路径竟然是 %Tomcat%/work/Catalina/localhost/appsd/loader ;系统提示找不到指定的文件 %Tomcat%/work/Catalina/localhost/appsd/loader/abc.xml 经过反复调试和验证,最终问题的原因找到了。 原来,我们打包部署的文件是将class文件打包到jar文件中,因此在,classes目录下是不会存在 /com/daston/resource 这些目录的,所有的JAR文件都被打包到 jar 文件中了。 经过测试,发现,只要classes目录下有/com/daston/resource 这个目录,不一定有真正的 ResourceRender.class 文件,上面的代码执行结果都是预期的结果,但是,一旦把目录删除或改名,上面代码执行结果就是 Tomcat 的work loader 目录。 因此,
为了统一解决这样的问题,必须使用新的方式来实现:
URL url = ResourceRender.class.getClassLoader().getResource("abc.xml");
String classPathName = url.getPath();
int endingIndex = classPathName.length()-"abc.xml".length();
classPathName = classPathName.substring(0, endingIndex);
不管怎么样,问题解决了,总是高兴的事,依此登博,后冕而已!
- 关于获取Tomcat和WebSphere的classes目录的绝对路径的问题
- 关于获取Tomcat和WebSphere的classes目录的绝对路径的问题
- 关于获取Tomcat和WebSphere的classes目录的绝对路径的问题
- Tomcat和Websphere的区别
- Tomcat和Websphere的区别
- Tomcat和Websphere的区别
- JAVA获取绝对路径的问题
- 使用Javascript获取当前目录的绝对路径
- CMD获取当前目录的绝对路径
- CMD获取当前目录的绝对路径
- CMD获取当前目录的绝对路径
- CMD获取当前目录的绝对路径
- cmd获取当前目录的绝对路径
- 获取应用程序当前工作目录的绝对路径
- 获取tomcat中工程的绝对路径
- Tomcat下获取web应用的绝对路径
- Tomcat下获取web应用的绝对路径
- 关于tomcat的web目录映射问题
- javascript生命周期(转):
- FlurryAnalytics for ios
- C++指针学习心得(一)
- GetTickCount函数
- 输出给定集合的所有排列与组合-python
- 关于获取Tomcat和WebSphere的classes目录的绝对路径的问题
- Runloop实现原理
- C#泛型中的new()约束
- JS定时器例子讲解
- Android模拟器快捷键指南---Android Emulator Keyboard Commands
- 动态规划——数组中最长递减子序列
- Sql Server常用函数之统计、算数、字符串函数
- Linux守护进程列表
- Android源代码目录结构简要分析