itVincent , 非常感谢您的回复.看到您的回复,我就作了一下测试.<o:p>
我的测试代码如下:<o:p>
//InputStream in=LoginAction.class.getClassLoader().getResourceAsStream("com.yourcompany.struts.config.properties");<o:p>
InputStream in=LoginAction.class.getClassLoader().getResourceAsStream("com//yourcompany//struts//config.properties");<o:p>
<o:p> </o:p>
System.out.println("properties in is : "+in);<o:p>
Properties p=new Properties();<o:p>
try {<o:p>
p.load(in);<o:p>
String h=p.getProperty("JAVA_HOME");<o:p>
System.out.println("JAVA_HOME : -- "+h); <o:p>
} catch (IOException e1) {<o:p>
e1.printStackTrace();<o:p>
}<o:p>
<o:p> </o:p>
我是在一个 action 中写的这段代码 .<o:p>
执行后的结果如下:(错误)<o:p>
properties in is : null<o:p>
2006-10-24 20:36:59 org.apache.struts.action.RequestProcessor processExc<o:p>
警告 : Unhandled Exception thrown: class java.lang.NullPointerException<o:p>
<o:p> </o:p>
页面的错误是:<o:p>
message <o:p>
<o:p> </o:p>
description The server encountered an internal error () that prevented it from fulfilling this request.<o:p>
<o:p> </o:p>
exception <o:p>
<o:p> </o:p>
javax.servlet.ServletException<o:p>
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)<o:p>
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)<o:p>
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)<o:p>
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)<o:p>
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)<o:p>
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)<o:p>
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)<o:p>
<o:p> </o:p>
<o:p> </o:p>
root cause <o:p>
<o:p> </o:p>
java.lang.NullPointerException<o:p>
java.util.Properties$LineReader.readLine(Properties.java:365)<o:p>
java.util.Properties.load(Properties.java:293)<o:p>
com.yourcompany.struts.action.LoginAction.execute(LoginAction.java:134)<o:p>
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)<o:p>
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)<o:p>
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)<o:p>
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)<o:p>
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)<o:p>
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)<o:p>
<o:p> </o:p>
<o:p> </o:p>
note The full stack trace of the root cause is available in the Apache Tomcat/ logs.<o:p>
<o:p> </o:p>
然后我又作了如下的测试:<o:p>
InputStream in1=LoginAction.class.getClassLoader().getResourceAsStream("config.properties");<o:p>
<o:p> </o:p>
System.out.println("properties in is : "+in1);<o:p>
Properties p1=new Properties();<o:p>
try {<o:p>
p1.load(in1);<o:p>
String h1=p1.getProperty("JAVA_HOME");<o:p>
System.out.println("JAVA_HOME : -- "+h1);<o:p>
} catch (IOException e1) {<o:p>
// TODO Auto-generated catch block<o:p>
e1.printStackTrace();<o:p>
}<o:p>
执行后的结果如下:(正确)<o:p>
properties in is : java.io.ByteArrayInputStream@257b34<o:p>
JAVA_HOME : -- c:jdk<o:p>
xml file url is : file:/D:/jakarta-tomcat-/webapps/StrutsDemo/WEB-INF/<o:p>
classes/config.xml<o:p>
inputStream of the xml file is : java.io.BufferedInputStream@ca5bff<o:p>
reader : org.dom4j.io.SAXReader@1cd3dd7<o:p>
document doc is : org.dom4j.tree.DefaultDocument@09 [Document: name null<o:p>
]<o:p>
action document is : org.dom4j.tree.DefaultDocument@09 [Document: name<o:p>
null]<o:p>
note List is : 1<o:p>
java home node is : org.dom4j.tree.DefaultElement@f [Element: <java att<o:p>
ributes: []/>]<o:p>
the value of the java node is : c:\jdk<o:p>
<o:p> </o:p>
两次的结果不同点的分析: <o:p> </o:p>
(主要看蓝色的代码部分,文件的存放位置的不同) <o:p> </o:p>
第一种方法,配置文件在 WEB-INF/classes/ com/yourcompany/struts/config.properties 目录下放着。也就是在包目录下。 <o:p> </o:p>
第二种方法,配置文件在 WEB-INF/classes/ 目录下存放。也就是根目录下。 <o:p> </o:p>
所以如果用第二种方法来读第一种配置文件,就会出错。 <o:p> </o:p>
<o:p>
--------------------------------------------------------------------------------------------------------------
以上是我的个人见解,欢迎批评指正.zhyiwww@163.com</o:p>
