如果我們在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://m.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-10-23 15:08
zhyiwww 閱讀(4103)
評論(2) 編輯 收藏