本文主要是介绍Test.class.getResource(/).toString在tomcat和apusic表现不一致的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从tomcat上将web应用移植到apusic应用服务器可能会出现以下问题:
应用中如果有代码Test.class.getResource("/").toString,则在tomcat下得到的 是%tomcat_home%/webapps/your_web_app/WEB-INF/classes/,而在apusic下得到的是 DOMAIN_HOME(类似C:/Apusic-6.0/domains/mydomain)。
产生这个问题的原因是在apusic源码中默认是先用app或者system classloader来getResource(String name),而tomcat默认是先用自己的classloader来getResource.而如果是getResource("/")则app或者 system classloader会获取DOMAIN_HOME这个结果。
所以解决此兼容性问题的方法有三种:
1、修改Test.class.getResource("/").toString中"/"为"//",这样父classloader就无法找到DOMAIN_HOME,而返回子classloader获取的路径。
2、在配置文件vm.options中添加参数apusic.prefer.war.classes=true,使apusic先使用自己的classloader来getResource。
3、Test.class.getResource("/").toString,改成Test.class.getClassLoader().getResource("/").toString 也可以解决问题。
以上三种方法都可以获取DOMAIN_HOME/application/WEB-INF/classes/路径,其中方法3跟方法2的原理是一样的。
这篇关于Test.class.getResource(/).toString在tomcat和apusic表现不一致的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!