程序代码:
<%@ page import="java.util.*"%>
<%
PropertyResourceBundle configBundle =
(PropertyResourceBundle)PropertyResourceBundle.
getBundle("db");
String strUrl= configBundle.getString("url");
out.println(strUrl);
%>
12 个解决方案
#1
是不是应用服务器在工作目录有了一份同样的拷贝?
#2
工作目录的位置是在哪里,我用的是websphere
#3
我的上面程序是放在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");
而另外一种情况是,我用放在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");
#4
贴一段代码给你看: 每次调实际是在cache中调,不是你的程序问题.
getBundle---> getBundleImpl-->
.....
Object lookup = findBundleInCache(loader, bundleName, defaultLocale);
if (lookup == NOTFOUND) {
throwMissingResourceException(baseName, locale);
} else if (lookup != null) {
return (ResourceBundle)lookup;
}
getBundle---> getBundleImpl-->
.....
Object lookup = findBundleInCache(loader, bundleName, defaultLocale);
if (lookup == NOTFOUND) {
throwMissingResourceException(baseName, locale);
} else if (lookup != null) {
return (ResourceBundle)lookup;
}
#5
估计是你的PropertyResourceBundle 类的问题,它在执行getBundle("db")
的时候先看看 类型为db的Properties是否创建,如果未创建则new一个,否则
不作任何操作,因为配置文件一般来说是在系统启动时候会读取到内存,以
后的属性的访问完全是内存操作,而不是每次都去读取配置文件,这样效率
太低,而且意义不大
而你下面在javabean中的语句则是每次调用方法的时候都会先读取配置文件,
当然每次都是最新的信息了
的时候先看看 类型为db的Properties是否创建,如果未创建则new一个,否则
不作任何操作,因为配置文件一般来说是在系统启动时候会读取到内存,以
后的属性的访问完全是内存操作,而不是每次都去读取配置文件,这样效率
太低,而且意义不大
而你下面在javabean中的语句则是每次调用方法的时候都会先读取配置文件,
当然每次都是最新的信息了
#6
第一次调JSP调入文件,然后每次都从Cache中调.
#7
不好意思,findBundleInCache好像不是标准的api,我在sun的网站的java.util.resourcebundle里面都找不到该方法
#8
对.findBundleInCache是私有的函数,在文档中是找不到的,我是断点调试才找到的.
实际很简单,做一个测试程序就知道了.
实际很简单,做一个测试程序就知道了.
#9
几个疑惑:
1。我上面的两种方法到底有什么区别,是不是这样
jsp的那段代码将db.properties读入缓存,以后怎么变都不会再读取,除非是重启服务器
javabean的那段代码,是每次都动态读却db.properties中的内容
2。那么如果不重启服务器,重启web服务能否将缓存释放掉,如果是这样的话,它的执行过程好像和jsp就不一样,因为如果不该动jsp代码,重新启动web服务器或web服务,jsp文件都不会重新编译
1。我上面的两种方法到底有什么区别,是不是这样
jsp的那段代码将db.properties读入缓存,以后怎么变都不会再读取,除非是重启服务器
javabean的那段代码,是每次都动态读却db.properties中的内容
2。那么如果不重启服务器,重启web服务能否将缓存释放掉,如果是这样的话,它的执行过程好像和jsp就不一样,因为如果不该动jsp代码,重新启动web服务器或web服务,jsp文件都不会重新编译
#10
可是它的参数loader, bundleName, defaultLocale,basename,我都不知道如何填写,大概能解释一下吗,如何调用一些默认的值呢
#11
最关键是bundleName,就是你的"db". basename="db" also.
1. 对.
2. 我不是很清楚服务器与web服务器的关系,但我知道你至少需要重启(servlet engine).因为虽然jsp生成的类不会变,但每次重启servlet engine后,内存中的映像消失,下一次服务就必须再调入该类.就可以读入新的db.properties中的内容.
1. 对.
2. 我不是很清楚服务器与web服务器的关系,但我知道你至少需要重启(servlet engine).因为虽然jsp生成的类不会变,但每次重启servlet engine后,内存中的映像消失,下一次服务就必须再调入该类.就可以读入新的db.properties中的内容.
#12
你是要写测试程序吗? 这些参数都是缺省的,除bundleName外. 再有,你不能直接调用findBundleInCache(...), 因为它是私有的.
#1
是不是应用服务器在工作目录有了一份同样的拷贝?
#2
工作目录的位置是在哪里,我用的是websphere
#3
我的上面程序是放在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");
而另外一种情况是,我用放在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");
#4
贴一段代码给你看: 每次调实际是在cache中调,不是你的程序问题.
getBundle---> getBundleImpl-->
.....
Object lookup = findBundleInCache(loader, bundleName, defaultLocale);
if (lookup == NOTFOUND) {
throwMissingResourceException(baseName, locale);
} else if (lookup != null) {
return (ResourceBundle)lookup;
}
getBundle---> getBundleImpl-->
.....
Object lookup = findBundleInCache(loader, bundleName, defaultLocale);
if (lookup == NOTFOUND) {
throwMissingResourceException(baseName, locale);
} else if (lookup != null) {
return (ResourceBundle)lookup;
}
#5
估计是你的PropertyResourceBundle 类的问题,它在执行getBundle("db")
的时候先看看 类型为db的Properties是否创建,如果未创建则new一个,否则
不作任何操作,因为配置文件一般来说是在系统启动时候会读取到内存,以
后的属性的访问完全是内存操作,而不是每次都去读取配置文件,这样效率
太低,而且意义不大
而你下面在javabean中的语句则是每次调用方法的时候都会先读取配置文件,
当然每次都是最新的信息了
的时候先看看 类型为db的Properties是否创建,如果未创建则new一个,否则
不作任何操作,因为配置文件一般来说是在系统启动时候会读取到内存,以
后的属性的访问完全是内存操作,而不是每次都去读取配置文件,这样效率
太低,而且意义不大
而你下面在javabean中的语句则是每次调用方法的时候都会先读取配置文件,
当然每次都是最新的信息了
#6
第一次调JSP调入文件,然后每次都从Cache中调.
#7
不好意思,findBundleInCache好像不是标准的api,我在sun的网站的java.util.resourcebundle里面都找不到该方法
#8
对.findBundleInCache是私有的函数,在文档中是找不到的,我是断点调试才找到的.
实际很简单,做一个测试程序就知道了.
实际很简单,做一个测试程序就知道了.
#9
几个疑惑:
1。我上面的两种方法到底有什么区别,是不是这样
jsp的那段代码将db.properties读入缓存,以后怎么变都不会再读取,除非是重启服务器
javabean的那段代码,是每次都动态读却db.properties中的内容
2。那么如果不重启服务器,重启web服务能否将缓存释放掉,如果是这样的话,它的执行过程好像和jsp就不一样,因为如果不该动jsp代码,重新启动web服务器或web服务,jsp文件都不会重新编译
1。我上面的两种方法到底有什么区别,是不是这样
jsp的那段代码将db.properties读入缓存,以后怎么变都不会再读取,除非是重启服务器
javabean的那段代码,是每次都动态读却db.properties中的内容
2。那么如果不重启服务器,重启web服务能否将缓存释放掉,如果是这样的话,它的执行过程好像和jsp就不一样,因为如果不该动jsp代码,重新启动web服务器或web服务,jsp文件都不会重新编译
#10
可是它的参数loader, bundleName, defaultLocale,basename,我都不知道如何填写,大概能解释一下吗,如何调用一些默认的值呢
#11
最关键是bundleName,就是你的"db". basename="db" also.
1. 对.
2. 我不是很清楚服务器与web服务器的关系,但我知道你至少需要重启(servlet engine).因为虽然jsp生成的类不会变,但每次重启servlet engine后,内存中的映像消失,下一次服务就必须再调入该类.就可以读入新的db.properties中的内容.
1. 对.
2. 我不是很清楚服务器与web服务器的关系,但我知道你至少需要重启(servlet engine).因为虽然jsp生成的类不会变,但每次重启servlet engine后,内存中的映像消失,下一次服务就必须再调入该类.就可以读入新的db.properties中的内容.
#12
你是要写测试程序吗? 这些参数都是缺省的,除bundleName外. 再有,你不能直接调用findBundleInCache(...), 因为它是私有的.