关于获取Tomcat和WebSphere的classes目录的绝对路径的问题

针对问题的提出,首先作出如下假设:

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);

不管怎么样,问题解决了,总是高兴的事,依此登博,后冕而已!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TomcatWebSphere都是Java Web应用服务器,它们都有自己的优缺点。 Tomcat的优点: 1. 轻量级:Tomcat是一个轻量级的应用服务器,它非常适合小型和中型的Web应用; 2. 易于部署和配置:Tomcat的部署和配置非常简单,即使是初学者也可以快速上手; 3. 开源:Tomcat是一个开源的应用服务器,可以免费使用; 4. 高性能:Tomcat的性能非常出色,可以处理大量的并发请求; 5. 支持多种操作系统:Tomcat可以在多种操作系统上运行,包括Windows、Linux和Mac OS X等。 Tomcat的缺点: 1. 功能相对较少:Tomcat相对于其他应用服务器来说,功能相对较少,不能满足所有的企业应用需求; 2. 缺少商业支持:由于Tomcat是一个开源的应用服务器,缺少商业支持,如果出现问题,需要靠社区支持来解决; 3. 缺少高级功能:Tomcat缺少一些高级功能,如负载均衡、集群等。 WebSphere的优点: 1. 功能强大:WebSphere是一个功能非常强大的应用服务器,可以满足企业级应用的需求; 2. 提供商业支持:WebSphere是IBM公司的产品,提供商业支持,如果出现问题可以得到及时的技术支持; 3. 提供高级功能:WebSphere提供一些高级功能,如负载均衡、集群等。 WebSphere的缺点: 1. 重量级:WebSphere是一个非常重量级的应用服务器,需要占用大量的系统资源; 2. 部署和配置较为复杂:WebSphere的部署和配置较为复杂,需要一定的经验和技能; 3. 高昂的成本:WebSphere是一款商业化的应用服务器,需要付费使用,成本较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值