将一些基本的、频繁使用的数据保存为js文件,不仅可以大大减少对服务器的访问,而且有效地改善用户的体验,浏览网页变得非常地流畅。这对提高整个web应用系统的质量非常有好处。以下方法用于将查询结果保存到js文件中。
这里以pvo查询结果为例。
(注:pvo可以看成通用的DAO,查询结果是List<Map>对象,其中Map代表一条记录,List代表查询结果集,Map的key代表字段名。具体参见本人的“HashMap关系数据映射技术(简称PVO技术) ”)
/**
* @param realPath 文件路径
* 创建菜单数据文件,pvoDataMenu.js文件
*/
public void __writerPvoDataMenu(String realPath) {
List v = null;
try {
ProcessVO pvo = new ProcessVO(Db.instance().getCon());
try {
v = pvo.getSomeRecord("select sitemenu_id as id,parent_id,label,pagename,sortnum from sitemenu where user like 'abc' order by sortnum");
} finally {
pvo.closeCon();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
String path = realPath + File.separator + "resource" + File.separator + "js";
File fp = new File(path);
fp.mkdirs();
String jsFile = path + File.separator + "pvoDataMenu.js";
File file = new File(jsFile);
String js = "";
StringBuilder content = new StringBuilder();
content.append("var menu_v=new Array();");
content.append("var m=null;");
for (int i = 0; i < v.size(); i++) {
Map m = (Map) v.get(i);
content.append("m=new Map();");
content.append(jsMap(m));
content.append("menu_v.push(m);");
}
js = content.toString();
try {
file.delete();
file.createNewFile();
BufferedWriter bout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GBK"));
bout.write(js);
bout.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* @param m 一条记录,key是字段名或字段别名
*/
private String jsMap(Map m) {
String s = "";
Set set = m.keySet();
Object[] keys = set.toArray();
for (int i = 0; i < keys.length; i++) {
Object key = keys[i];
Object value = m.get(key);
if (value != null) {
if ("true".equals(value.toString()) || "false".equals(value.toString())) {
s = s + "m.put('" + key + "', " + value.toString() + ");";
} else {
s = s + "m.put('" + key + "', '" + value.toString() + "');";
}
} else {
s = s + "m.put('" + key + "', null);";
}
}
return s;
}