XML建模

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();
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值