我的一个Tool类的代码:package util;import java.io.InputStream;
import java.util.Properties;
public final class Tool {
 private final static Properties sysProp;
 static{
  Logger.println("Initializing System properties...");
  sysProp=new Properties();
  
  InputStream in=null;
  try{
   System.out.println(sysProp.getClass().getClassLoader());
   in=sysProp.getClass()
    .getResourceAsStream("/util/web.properties");   
   sysProp.load(in);
   Logger.println("Initialize system properties done.");
  }
  catch(Exception e){
   Logger.println("Exception while initializing system properties.");
   e.printStackTrace();
  }
  finally{
   if(in!=null){
    try{in.close();}
    catch(Exception e){}
   }
  }
 }
 
 public static String getProp(String key){
  return sysProp.getProperty(key);
 }
 
 public static void test(){
  System.out.println("test"); 
 }
 public static void main(String args[]){
  test();
 }
}在Eclipse中直接执行这个类的main()方法,正常.能找到同一目录下的web.properties而如果是在jsp页面上调用这个tool类,则in=sysProp.getClass()
    .getResourceAsStream("/util/web.properties");  返回的是null.请大家指点!!谢谢!!

解决方案 »

  1.   

    http://hi.baidu.com/sodarfish/blog/item/d8696739d6db5ff73b87ceff.html
    ===========================================================================
    ClassLoader.getResourceAsStream(name);路径问题InputStream in = getClass().getResourceAsStream('/'+"spring-beans.dtd"); 表示从classs目录下面的找文件,文件放在src下面就可以了.
    InputStream in = getClass().getResourceAsStream("spring-beans.dtd"); 表示从当前classs下面的路径找文件
    如果是在com.a.b.c.d.Test这个class就表示spring-beans.dtd要放在目录src\com\a\b\c\d下.SAXBuilder builder = new SAXBuilder();
                EntityResolver resolver = new EntityResolver() {                public InputSource resolveEntity(String publicId,
                            String systemId) {
                        if (publicId.equals("-//SPRING//DTD BEAN//EN")) {
                            InputStream in = getClass().getResourceAsStream(
                                    '/'+"spring-beans.dtd");
                            return new InputSource(in);
                        } else {
                            return null;
                        }
                    }            };
                builder.setEntityResolver(resolver);这样才能解决dtd的本地查找问题. 
      

  2.   

    如果是在 Web 的环境下,
    那么你得 配置资源文件应该放在 WEB-INF\classes\util\web.properties 中!!
    你访问的方式以
     in=sysProp.getClass() 
        .getResourceAsStream("/util/web.properties");    的形式;
    也就是说,你得  "配置资源文件" 是在 classes 目录下面的 ,如果你加入了其他目录,
    那么你就应该在classes 中配置相应的目录如果嫌我没解释清楚,你可以进 google 搜索 java 文件路径
      

  3.   


    我的那个web.properties是和Tool.class在同一个目录的.编译后都在web-inf/class/util/下.
    出现问题在于,用eclipse中直接运行Tool中的main(),能找到这个资源,
    而运行tomcat,在jsp页面中使用Tool类的时候,找不到资源啊.
      

  4.   


     配置资源文件应该放在 WEB-INF\classes\util\web.properties 中!! 
    我的资源文件的路径就是这样的,
    问题是:运行Tool中main()没问题,而jsp中调用Tool时找不到此资源文件.
      

  5.   

    配置资源文件应该放在 WEB-INF\classes\util\web.properties 中!!  
    我的资源文件的路径就是这样的, 
    问题是:运行Tool中main()没问题,而jsp中调用Tool时找不到此资源文件.
      

  6.   

    用绝对路径试一下,如果不是null,就是路径的问题,你可以改成
     in=sysProp.getClass()   
        .getResourceAsStream("util/web.properties"); 或者等等
    不行就先取到项目所在的路径,然后加上 util/web.properties试试行不行
      
      

  7.   

    多谢!
    关键是如何解释main运行与tomcat运行时的差别啊.
    多谢!
      

  8.   

    to 楼主: eclipse环境下和(tomcat)容器环境下对ClassLoader.findResource方法的实现不一致,