如果我们在Web应用中想取得*.properties文件中定义的属性,那么我们可以使用下面的方法:
ClassLoader loader=Thread.currentThread().getContextClassLoader();
System.out.println("loader --------- "+loader);
//
这一部分是最重要的
URL url=loader.getResource("com\\yourcompany\\struts\\ApplicationResources.properties");
System.out.println("url --------------- "+url);
try {
InputStream in=url.openStream();
Properties p=new Properties();
p.load(in);
String h=p.getProperty("JAVA_HOME");
System.out.println("JAVA_HOME : -- "+h);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
备注:
这种解决办法可以在
Web
应用程序中调用我们封装好的方法,但是如果我们通过以下办法就不能。
BufferedInputStream in1 = (BufferedInputStream) PropertiesReader.class .getClassLoader().getResourceAsStream(propPath);
这种方法只能用于和当前的
ClassLoader
是在同一个
ClassLoader
的情况,不能应用于
Web
应用程序,因为在
Web
应用程序中,我们用到了多个
ClassLoader
。
在
Web
应用中的
ClassLoader
如下:
loader --------- WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
StandardClassLoader
delegate: true
repositories:
file:D:\jakarta-tomcat-5.0.28\shared\classes\
----------> Parent Classloader:
StandardClassLoader
delegate: true
repositories:
file:D:\jakarta-tomcat-5.0.28\common\classes\
file:D:\jakarta-tomcat-5.0.28\common\lib\ant-launcher.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\ant.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\commons-collections-3.1.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\commons-dbcp-1.2.1.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\commons-el.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\commons-pool-1.2.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\jasper-compiler.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\jasper-runtime.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\jsp-api.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\mysql-connector-java-3.1.10-bin.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\naming-common.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\naming-factory.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\naming-java.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\naming-resources.jar
file:D:\jakarta-tomcat-5.0.28\common\lib\servlet-api.jar
----------> Parent Classloader:
sun.misc.Launcher$AppClassLoader@15601ea
绿色字体的部分,我们可以看到,有两个
ClassLoader:WebappClassLoader
和
StandClassLoader.
当我们调用
loader.getResource("com\\yourcompany\\struts\\ApplicationResources.properties");
的时候,由
WebappClassLoader
来取得了资源的位置:
url --------------- file:/D:/jakarta-tomcat-5.0.28/webapps/StrutsDemo/WEB-INF
/classes/com/yourcompany/struts/ApplicationResources.properties
(以上是我的个人理解,如有不当,请批评指正)
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-10-23 15:08
zhyiwww 阅读(4099)
评论(2) 编辑 收藏