struts中如何动态加载资源文件,100分求解,现答现结

hackangcn 2006-10-27 02:25:03
ApplicationResources_zh_CN.properties

我现在在后台想直接编辑此文件并动态加载,让jsp可以立即使用

先不要管unicode和中文的事情了,现在要解决的问题就是动态加载此资源文件


达人帮忙啊,100分,解决了就结贴
...全文
587 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hackangcn 2006-11-06
  • 打赏
  • 举报
回复
我做的是修改struts的语言资源文件,并且能动态加载


看了struts源码以后,我 已经实现了,哈哈


比如你在ApplicationResources_zh_CN.properties中新加了一个aaa=test

只要一刷新,就可以在jsp中立马使用<bean:message key="aaa"/>了



多看源码,很有帮助
liufei8463 2006-11-06
  • 打赏
  • 举报
回复
学习
sun113 2006-11-04
  • 打赏
  • 举报
回复
to rubyjn() ( ) 信誉:100 Blog
是不是只能运行一次阿,在什么地方循环?
z7swf 2006-11-03
  • 打赏
  • 举报
回复
楼上的讲讲你的思路要得?
○福泽天下○ 2006-11-03
  • 打赏
  • 举报
回复
mark
rubyjn 2006-11-02
  • 打赏
  • 举报
回复
发现文件变动后随时加载,没有变动不加载。




import java.util.Properties;
import java.io.File;
import java.io.FileInputStream;




public class JPropertiesSetting {

public static void main(String args[]) {
new JPropertiesSetting();
}

/**
* 属性文件名
*/
// public static final String PFILE =
// "D:/TWorkspace/jmessage/classes/config.properties";

private static final String PFILE =
"/opt/alert/jmessage/classes/config.properties";

/**
* 对应属性文件对象变量
*/
private File m_file = null;

/**
* 属性文件的最后修改时间
*/
private long m_lastModifiedTime = 0;

/**
* 属性文件对应的属性对象变量
*/
private Properties m_props = null;

/**
* 本类可能存在的唯一个实例
*/
private static JPropertiesSetting m_instance = new JPropertiesSetting();

/**
* 私有构造函数.
*/
private JPropertiesSetting() {
this.m_file = new File(PFILE);
this.m_lastModifiedTime = this.m_file.lastModified();
if (this.m_lastModifiedTime == 0) {
System.out.println(PFILE + " file not found ");
}
this.m_props = new Properties();
try {
m_props.load(new FileInputStream(PFILE));
}
catch (Exception e) {
e.printStackTrace();
}

}

/**
* 静态工厂方法
* @return ConfigManager 单例模式提供
*/
synchronized public static JPropertiesSetting getInstance() {
return m_instance;
}

/**
* 读取指定的属性项
* @param pStrName String 属性的名称
* @param pObjDefaultValue Object 默认值
* @return Object
*/
final public Object getItemValue(String pStrItemName,
Object pObjDefaultValue) {
long newTime = this.m_file.lastModified();
//检查属性文件是否被更新过.如果被更新过那么重新获取最新版本.
if (newTime == 0) {
if (this.m_lastModifiedTime == 0) {
System.out.println(PFILE + " file does not exist !");
}
else {
System.out.println(PFILE + " file was deleted !");
}
return pObjDefaultValue;

}
else if (newTime > this.m_lastModifiedTime) {
this.m_props.clear();
try {
m_props.load(new FileInputStream(PFILE));
}
catch (Exception e) {
e.printStackTrace();
}

}
this.m_lastModifiedTime = newTime;
Object val = this.m_props.getProperty(pStrItemName);
if (val == null) {
return pObjDefaultValue;
}
else {
return val;
}

}

/**
* 读取指定的属性项
* @param pItemName String
* @param value String
*/
final public Object getItemValue(String pItemName) {

return this.getItemValue(pItemName, null);
}

/**
* 设置配置项名称及其值
* @param pItemName String
* @param value String
*/
final public void setItemValue(String pItemName, String value) {
this.m_props.setProperty(pItemName, value);
return;
}

}
hackangcn 2006-11-02
  • 打赏
  • 举报
回复
读取资源文件只是一部分


现在已经实现了,我现在在后台动态添加一个资源文件,点一下鼠标就可以立马使用了

得益于struts源码
175cm 2006-11-01
  • 打赏
  • 举报
回复
呵呵!学习!楼主自己搞定了
hackangcn 2006-11-01
  • 打赏
  • 举报
回复
this.getClass().getClassLoader().getResourceAsStream("ApplicationResources_zh_CN.properties");

这样子就ok了
hackangcn 2006-11-01
  • 打赏
  • 举报
回复
to wfengxyy()

你这样得出来的is是null,我看了struts源码,读取方法你和差不多
wfengxyy 2006-10-27
  • 打赏
  • 举报
回复
不重新启动,那你肯定要deplay 重新编译了
hackangcn 2006-10-27
  • 打赏
  • 举报
回复
那如果我修改了ApplicationResources_zh_CN.properties以后,可以动态的加载它吗,就是说不重启,就可以用bean:message使用它吗?
wfengxyy 2006-10-27
  • 打赏
  • 举报
回复
Properties base = new Properties();
InputStream is = null;
is = getClass().getResourceAsStream("ApplicationResources_zh_CN.properties");
base.load(is);
然后通过base.getProperty("#####")就可以读取资源文件了
不知道是不是你想要的
hackangcn 2006-10-27
  • 打赏
  • 举报
回复
看了struts的actionservlet文件的源码

protected void initModuleMessageResources(ModuleConfig config)
throws ServletException {

MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs();
for (int i = 0; i < mrcs.length; i++) {
if ((mrcs[i].getFactory() == null)
|| (mrcs[i].getParameter() == null)) {
continue;
}
if (log.isDebugEnabled()) {
log.debug(
"Initializing module path '"
+ config.getPrefix()
+ "' message resources from '"
+ mrcs[i].getParameter()
+ "'");
}

String factory = mrcs[i].getFactory();
MessageResourcesFactory.setFactoryClass(factory);
MessageResourcesFactory factoryObject =
MessageResourcesFactory.createFactory();
factoryObject.setConfig(mrcs[i]);

MessageResources resources =
factoryObject.createResources(mrcs[i].getParameter());
resources.setReturnNull(mrcs[i].getNull());
resources.setEscape(mrcs[i].isEscape());
getServletContext().setAttribute(
mrcs[i].getKey() + config.getPrefix(),
resources);
}

}


是不是要改写这个文件?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧