如果我們在Web應(yīng)用中想取得*.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
應(yīng)用程序中調(diào)用我們封裝好的方法,但是如果我們通過以下辦法就不能。
?????
?????????? BufferedInputStream in1 = (BufferedInputStream) PropertiesReader.class?????????????? ????? .getClassLoader().getResourceAsStream(propPath);
??????
這種方法只能用于和當(dāng)前的
ClassLoader
是在同一個(gè)
ClassLoader
的情況,不能應(yīng)用于
Web
應(yīng)用程序,因?yàn)樵?/span>
Web
應(yīng)用程序中,我們用到了多個(gè)
ClassLoader
。
??????
在
Web
應(yīng)用中的
ClassLoader
如下:
loader? ---------? WebappClassLoader
? delegate: false
? repositories:
??? /WEB-INF/classes/
----------> Parent Classloader:
StandardClassLoader
? delegate: true
? repositories:
??? file:D:\jakarta-tomcat-
----------> Parent Classloader:
StandardClassLoader
? delegate: true
? repositories:
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
?
?? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
??? file:D:\jakarta-tomcat-
----------> Parent Classloader:
sun.misc.Launcher$AppClassLoader@15601ea
綠色字體的部分,我們可以看到,有兩個(gè)
ClassLoader:WebappClassLoader
和
StandClassLoader.
當(dāng)我們調(diào)用
loader.getResource("com\\yourcompany\\struts\\ApplicationResources.properties");
的時(shí)候,由
WebappClassLoader
來取得了資源的位置:
url ---------------? file:/D:/jakarta-tomcat-
/classes/com/yourcompany/struts/ApplicationResources.properties
???(以上是我的個(gè)人理解,如有不當(dāng),請批評指正)
|----------------------------------------------------------------------------------------|
版權(quán)聲明 版權(quán)所有 @zhyiwww
引用請注明來源 http://www.aygfsteel.com/zhyiwww
|----------------------------------------------------------------------------------------|