zhyiwww
用平实的笔,记录编程路上的点点滴滴………
posts - 536,comments - 394,trackbacks - 0

itVincent , 非常感谢您的回复.看到您的回复,我就作了一下测试.

我的测试代码如下:

              //InputStream in=LoginAction.class.getClassLoader().getResourceAsStream("com.yourcompany.struts.config.properties");

              InputStream in=LoginAction.class.getClassLoader().getResourceAsStream("com//yourcompany//struts//config.properties");

             

              System.out.println("properties  in  is  :   "+in);

              Properties  p=new Properties();

              try {

                     p.load(in);

                     String h=p.getProperty("JAVA_HOME");

                     System.out.println("JAVA_HOME   :  --  "+h);  

              } catch (IOException e1) {

                     e1.printStackTrace();

              }

 

我是在一个 action 中写的这段代码 .

执行后的结果如下:(错误)

properties  in  is  :   null

2006-10-24 20:36:59 org.apache.struts.action.RequestProcessor processExc

警告 : Unhandled Exception thrown: class java.lang.NullPointerException

 

页面的错误是:

message

 

description The server encountered an internal error () that prevented it from fulfilling this request.

 

exception

 

javax.servlet.ServletException

       org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)

       org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)

       org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)

       org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)

       org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

       javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

       javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

 

 

root cause

 

java.lang.NullPointerException

       java.util.Properties$LineReader.readLine(Properties.java:365)

       java.util.Properties.load(Properties.java:293)

       com.yourcompany.struts.action.LoginAction.execute(LoginAction.java:134)

       org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)

       org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)

       org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)

       org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

       javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

       javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

 

 

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.

 

       然后我又作了如下的测试:

              InputStream in1=LoginAction.class.getClassLoader().getResourceAsStream("config.properties");

             

              System.out.println("properties  in  is  :   "+in1);

              Properties  p1=new Properties();

              try {

                     p1.load(in1);

                     String h1=p1.getProperty("JAVA_HOME");

                     System.out.println("JAVA_HOME   :  --  "+h1);

              } catch (IOException e1) {

                     // TODO Auto-generated catch block

                     e1.printStackTrace();

              }

执行后的结果如下:(正确)

properties  in  is  :   java.io.ByteArrayInputStream@257b34

JAVA_HOME   :  --  c:jdk

xml file  url  is  :  file:/D:/jakarta-tomcat-5.0.28/webapps/StrutsDemo/WEB-INF/

classes/config.xml

inputStream of the xml file  is  :  java.io.BufferedInputStream@ca5bff

reader   :   org.dom4j.io.SAXReader@1cd3dd7

document doc  is  :  org.dom4j.tree.DefaultDocument@13c4c09 [Document: name null

]

action  document  is  :  org.dom4j.tree.DefaultDocument@13c4c09 [Document: name

null]

note  List is : 1

java home  node  is  :  org.dom4j.tree.DefaultElement@f1f34a [Element: <java att

ributes: []/>]

the value of the java node  is  :  c:\jdk

 

两次的结果不同点的分析:

       (主要看蓝色的代码部分,文件的存放位置的不同)

       第一种方法,配置文件在 WEB-INF/classes/ com/yourcompany/struts/config.properties 目录下放着。也就是在包目录下。

       第二种方法,配置文件在 WEB-INF/classes/ 目录下存放。也就是根目录下。

       所以如果用第二种方法来读第一种配置文件,就会出错。

 
--------------------------------------------------------------------------------------------------------------
以上是我的个人见解,欢迎批评指正.zhyiwww@163.com



|----------------------------------------------------------------------------------------|
                           版权声明  版权所有 @zhyiwww
            引用请注明来源 http://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2006-10-24 21:03 zhyiwww 阅读(3504) 评论(3)  编辑  收藏 所属分类: discuss

FeedBack:
# re: 就读取Properties文件问题回复itVincent
2006-10-24 23:02 | itvincent[匿名]
对,应该有这样的区别,多谢测试  回复  更多评论
  
# re: 就读取Properties文件问题的回复
2006-12-26 09:47 | 小哥
多谢提供这么好的经验啊!困扰几天的问题终于解决了~~

在工程中使用ClassLoader,然后直接getResourceAsStream("....."),最好用的配置文件路径还是WEB-INF/classes/ 目录下存放,使用很方便!
  回复  更多评论
  
# re: 就读取Properties文件问题回复itVincent
2013-05-18 21:51 | 杨俊林
非常感谢,您的方法是我发现的唯一能行的,别的好像在WEB里面都不行。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: