工作目录的位置是在哪里,我用的是websphere

解决方案 »

  1.   

    我的上面程序是放在web目录下的jsp文件,而调用的db.properties是放在servlets目录下的,这种情况就会出现上面的问题
    而另外一种情况是,我用放在servlets目录下的javaBean来调用db.properties文件,就不会出现上面的问题,请问这是什么原因
    javabean的程序代码:
    try {
    InputStream is = getClass().getResourceAsStream("db.properties");
    prop.load(is);
    if (is != null)
    is.close();
    } catch (IOException e) {
    System.out.println("[ConnectionPool]打开文件时出现错误");
    } //----------------------------------------------------------------------
    //从Property文件中读取Property
    //----------------------------------------------------------------------
    String driver = prop.getProperty("drivers");
      

  2.   

    贴一段代码给你看: 每次调实际是在cache中调,不是你的程序问题.
    getBundle---> getBundleImpl-->.....
      Object lookup = findBundleInCache(loader, bundleName, defaultLocale);
      if (lookup == NOTFOUND) {
         throwMissingResourceException(baseName, locale);
      } else if (lookup != null) {
         return (ResourceBundle)lookup;
      }
      

  3.   

    估计是你的PropertyResourceBundle 类的问题,它在执行getBundle("db")
    的时候先看看 类型为db的Properties是否创建,如果未创建则new一个,否则
    不作任何操作,因为配置文件一般来说是在系统启动时候会读取到内存,以
    后的属性的访问完全是内存操作,而不是每次都去读取配置文件,这样效率
    太低,而且意义不大而你下面在javabean中的语句则是每次调用方法的时候都会先读取配置文件,
    当然每次都是最新的信息了
      

  4.   

    第一次调JSP调入文件,然后每次都从Cache中调.
      

  5.   

    不好意思,findBundleInCache好像不是标准的api,我在sun的网站的java.util.resourcebundle里面都找不到该方法
      

  6.   

    对.findBundleInCache是私有的函数,在文档中是找不到的,我是断点调试才找到的.实际很简单,做一个测试程序就知道了.
      

  7.   

    几个疑惑:
    1。我上面的两种方法到底有什么区别,是不是这样
    jsp的那段代码将db.properties读入缓存,以后怎么变都不会再读取,除非是重启服务器
    javabean的那段代码,是每次都动态读却db.properties中的内容2。那么如果不重启服务器,重启web服务能否将缓存释放掉,如果是这样的话,它的执行过程好像和jsp就不一样,因为如果不该动jsp代码,重新启动web服务器或web服务,jsp文件都不会重新编译
      

  8.   

    可是它的参数loader, bundleName, defaultLocale,basename,我都不知道如何填写,大概能解释一下吗,如何调用一些默认的值呢
      

  9.   

    最关键是bundleName,就是你的"db". basename="db" also.
    1. 对. 
    2. 我不是很清楚服务器与web服务器的关系,但我知道你至少需要重启(servlet engine).因为虽然jsp生成的类不会变,但每次重启servlet engine后,内存中的映像消失,下一次服务就必须再调入该类.就可以读入新的db.properties中的内容.
      

  10.   

    你是要写测试程序吗? 这些参数都是缺省的,除bundleName外. 再有,你不能直接调用findBundleInCache(...), 因为它是私有的.