这是公司网上业务项目中用的一个知识点,虽然是xml的知识,但没在实际项目这样用过:
过程描述:在类路径下,先建立一个 xml文档,applystate.xml,写一个继承ServletContextListener的类
在项目启动时,把xml加载进内存,这样做可以避免多次读写磁盘的操作。之后可以直接从内存中得到xml,添加与你业务相关的逻辑。
辅助类:
public class Constant {
//文件存放路径
public static String applystate="/applystate.xml";
//声明一个byte数组,存放applystate.xml的二进制数据
public static byte[] applystatebyte;
配置文件:config.properties
applystate=/applystate.xml
监听接口:ServletContextListener,项目启动时执行ServletContextListener的contextInitialized,把xml文件装载进内存,下面是部分代码:
public class StartupListener extends ContextLoaderListener implements ServletContextListener{
/**
*
*/
public StartupListener() {
super();
}
public void contextInitialized(ServletContextEvent event){
// Orion starts Servlets before Listeners, so check if the config
// object already exists
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("/config.properties"));
Constant.applyxmlfile = new String(properties.getProperty("applyxmlfile"));
String temp ;
InputStream in = null;
BufferedReader br = null;
String xml = "";
try{
in = getClass().getResourceAsStream(Constant.applystate);
br = new BufferedReader(new InputStreamReader(in));
xml = "";
while((temp=br.readLine())!=null){
xml += temp.trim();
}
Constant.applystatebyte= xml.getBytes();
}catch(Exception e){
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
ApplyXmlUtil类:从内存中加载xml文件,和添加新节点,最后写入,和返回xml格式的String
代码(和公司的一些业务逻辑有关了。。。。。):
package com.gzepro.gdcrj.util;
import java.io.ByteArrayInputStream;
import java.text.SimpleDateFormat;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import cn.hnisi.eecmis.vo.ApplyProgress;
import cn.hnisi.eecmis.vo.VRyCjsq;
import cn.hnisi.eecmis.vo.VRyDcsq;
import com.gzepro.util.Constant;
public class ApplyXmlUtil {
public static String convertApplyToXmlString(ApplyProgress apply) throws Exception{
SAXBuilder dbuilder = new SAXBuilder();
Document doc = dbuilder.build(new ByteArrayInputStream(
Constant.applystatebyte));
SimpleDateFormat sdf_time = new SimpleDateFormat(
Constant.datetime_fomate);
SimpleDateFormat sdf = new SimpleDateFormat(Constant.date_fomate);
//获取根元素
Element root = doc.getRootElement();
//获取出境申请信息记录
VRyCjsq[] cjsqs=apply.getCjsqs();
//获取单程申请信息记录
VRyDcsq[] dcsqs=apply.getDcsqs();
Element elements =null;
if((cjsqs==null||cjsqs.length==0)&&(dcsqs==null||dcsqs.length==0)){
root.getChild("getdata").setText("0");
root.getChild("nodatamsg").setText("没有找到记录");
}else{
root.getChild("getdata").setText("1");
if(cjsqs.length>0){
//遍历出境申请信息记录
for(int i=0;i<cjsqs.length;i++){
elements=new Element("data");
VRyCjsq cjsq=cjsqs[i];
//业务编号
if(cjsq.getYwbh()!=null&&cjsq.getYwbh().trim().length()>0){
elements.addContent(new Element("ywbh").setText(cjsq.getYwbh().trim()));
}
//申请时间
if(cjsq.getSlrq()!=null){
System.out.println(cjsq.getSlrq().getTime());
elements.addContent(new Element("sqsj").setText(sdf.format(cjsq.getSlrq().getTime())));
}
//材料类型
if(cjsq.getSqlb()!=null&&!cjsq.getSqlb().equals("")){
elements.addContent(new Element("cllb").setText(cjsq.getSqlb()));
}
//姓名
if(cjsq.getZwxm()!=null&&cjsq.getZwxm().trim().length()>0){
elements.addContent(new Element("xm").setText(cjsq.getZwxm().trim()));
}
//身份证号码
if(cjsq.getSfzh()!=null&&cjsq.getSfzh().trim().length()>0){
elements.addContent(new Element("sfzhm").setText(cjsq.getSfzh().trim()));
}
//处理环节
if(cjsq.getCurrenthj()!=null&&cjsq.getCurrenthj().trim().length()>0){
elements.addContent(new Element("clhj").setText(cjsq.getCurrenthj().trim()));
}
//审批结果
if(cjsq.getSpjg()!=null&&cjsq.getSpjg().trim().length()>0){
elements.addContent(new Element("spjg").setText(cjsq.getSpjg()));
}
//分数
elements.addContent(new Element("fs").setText("0"));
root.addContent(elements);
}//end for
}
if(dcsqs!=null){
//遍历单程申请信息记录
for(int i=0;i<cjsqs.length;i++){
elements = new Element("data");
VRyDcsq dcsq=dcsqs[i];
//业务编号
if(dcsq.getYwbh()!=null&&dcsq.getYwbh().trim().length()>0){
elements.addContent(new Element("ywbh").setText(dcsq.getYwbh().trim()));
}
//申请时间
if(dcsq.getSlrq()!=null){
elements.addContent(new Element("sqsj").setText(sdf.format(dcsq.getSlrq().getTime())));
}
//材料类型
if(dcsq.getSqlb()!=null&&dcsq.getSqlb().trim().length()>0){
elements.addContent(new Element("cllx").setText(dcsq.getSqlb()));
}
//姓名
if(dcsq.getZwxm()!=null&&dcsq.getZwxm().trim().length()>0){
elements.addContent(new Element("xm").setText(dcsq.getZwxm().trim()));
}
//身份证号码
if(dcsq.getSfzh()!=null&&dcsq.getSfzh().trim().length()>0){
elements.addContent(new Element("sfzhm").setText(dcsq.getSfzh().trim()));
}
//审批结果
if(dcsq.getSpjg()!=null&&dcsq.getSpjg().trim().length()>0){
elements.addContent(new Element("spjg").setText(dcsq.getSpjg().trim()));
}
//分数
if(dcsq.getFs()!=null&&dcsq.getFs().equals("")){
elements.addContent(new Element("fs").setText(dcsq.getFs().toString()));
}
root.addContent(elements);
}//end for
}
}
/**
* 输出
*/
XMLOutputter output = new XMLOutputter();
output.setEncoding("GBK");
output.setIndent(true);
output.setNewlines(true);
output.setIndentSize(4);
output.setExpandEmptyElements(true);
return output.outputString(doc);
}
}