1. XML建模
ConfigModel
ActionModel
ForwardModel
ConfigModelFactory
XXXFactory:XXX工厂类
2. 三种命名法
UserNameWord 帕斯卡
userName 驼峰
user-name 匈牙利
3. RuntimeException
/**
* forwardModels添加值
* @param forwardModel
*/
public void put(ForwardModel forwardModel) {
//传递过来准备添加的forwardModel的name值不允许重复;
if(forwardModels.containsKey(forwardModel.getName())) {
//提醒用户键位重复,停止添加值;
throw new RuntimeException("键位["+forwardModel.getName()+"]重复了!");
}
forwardModels.put(forwardModel.getName(), forwardModel);
}
/**
* 根据键位取值
* @param name
* @return
*/
public ForwardModel get(String name) {
if(!forwardModels.containsKey(name)) {
throw new RuntimeException("键位["+name+"不存在!");
}
return forwardModels.get(name);
}
4. XxxFactory
/**
* 从对应的xml文件中读取所有的节点信息,然后保存到对应的java对象中
* @author 墨与
*
*/
public class ConfigModelFactory {
//声明一个默认路径
private static String PATH="/config.xml";
/**
* 该工厂类创建configModel的方法应该在何种情况下被调用;
* ConfigModelFactory.createConfigModel(path);
* 根据传递的路径读取配置文件
* @throws DocumentException
*/
public ConfigModelFactory() {
}
/**
* 读取配置文件,创建ConfigModel对象
* @param path
* @return
* @throws DocumentException
*/
public static ConfigModel createConfigModel(String path) throws DocumentException {
InputStream is=null;
if(null==path) {
//用户没有传递路径过来
is=ConfigModelFactory.class.getResourceAsStream(PATH);
}else {
//用户传递了路径
is=ConfigModelFactory.class.getResourceAsStream(path);
}
//将文件转换为document对象
SAXReader sax=new SAXReader();
Document document = sax.read(is);
//创建ConfigModel
ConfigModel configModel=new ConfigModel();
//读取所有的action节点
List<Element> actionElement=document.selectNodes("config/action");
for (Element acEle : actionElement) {
//有多少个action就创建多少个ActionModel
ActionModel actionModel=new ActionModel();
String actionPath = acEle.attributeValue("path");
String actionType = acEle.attributeValue("type");
//给acionModel属性赋值
actionModel.setPath(actionPath);
actionModel.setType(actionType);
//得到当前的action节点的所有forward节点
List<Element> forwardElement = acEle.selectNodes("forward");
for (Element forEle : forwardElement) {
ForwardModel forwardModel=new ForwardModel();
String forwardNmae = forEle.attributeValue("name");
String forwarPath= forEle.attributeValue("path");
String redirect= forEle.attributeValue("redirect");
forwardModel.setName(forwardNmae);
forwardModel.setPath(forwarPath);
forwardModel.setRedirect(redirect);
actionModel.put(forwardModel);
}
configModel.put(actionModel);
}
return configModel;
}
}
5. java代码调试
public static void main(String[] args) throws Exception {
try {
ConfigModel configModel = ConfigModelFactory.createConfigModel(null);
System.out.println(configModel.get("/regAction").get("failed"));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}