xml建模
1.建模的由来
就是将指定的xml字符串当作对象来操作
		如果说当对一个指定的xml格式字符串完成了建模操作,
		好处在于,只需要调用指定的方法就可以完成预定的字符串获取;
2.建模的思路
		1、分析需要被建模的文件中有那几个对象
		2、每个对象拥有的行为以及属性
		3、定义对象从小到大(从里到外)
		4、通过23种的设计模式中的工厂模式,解析xml生产出指定对象
好处:
			提高代码的复用性
分析XML文件(有几个对象以及属性,定义对象从小到大(从里到外))
<?xml version="1.0" encoding="UTF-8"?>
<!-- config标签:可以包含0~N个action标签 -->
<config>
<!-- action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 type:字符串,非空 -->
<action path="/regAction" type="test.RegAction">
<!-- forward标签:没有子标签; name:字符串,同一action标签下的forward标签name值不能相同 ; path:以/开头的字符串
redirect:只能是false|true,允许空,默认值为false -->
<forward name="failed" path="/reg.jsp" redirect="false" />
<forward name="success" path="/login.jsp" redirect="true" />
</action> <action path="/loginAction" type="test.LoginAction">
<forward name="failed" path="/login.jsp" redirect="false" />
<forward name="success" path="/main.jsp" redirect="true" />
</action> </config>
定义XML模型对象
1.ForwardModel
public class ForwardModel {
//	<forward name="failed" path="/login.jsp" redirect="false" />
	private String name;
	private String path;
	private boolean  redirect;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public boolean isRedirect() {
		return redirect;
	}
	public void setRedirect(boolean redirect) {
		this.redirect = redirect;
	}
2.ActionModel
public class ActionModel {
//	<action path="/loginAction" type="test.LoginAction">
       private String path;
       private String type;
       private Map<String, ForwardModel> fmap=new HashMap<>();
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public Map<String, ForwardModel> getFmap() {
		return fmap;
	}
	public void setFmap(Map<String, ForwardModel> fmap) {
		this.fmap = fmap;
	}
	//添加
    public void push(ForwardModel forwardModel) {
    	fmap.put(forwardModel.getName(), forwardModel);
    }
    //通过name获取对象
    public ForwardModel pop(String name) {
    	return fmap.get(name);
    }
}
ConfigModel
 private Map<String, ActionModel> amap=new HashMap();
   public void push(ActionModel actionModel) {
	   amap.put(actionModel.getPath(), actionModel);
   }
   public ActionModel pop(String path) {
	   return amap.get(path);
   }   
ConfigModelFactory(工厂模式用来将资源文件生产指定的实体类)
public class ConfigModelFactory {
	public static ConfigModel  build() throws Exception {
		return configModel("config.xml");
	}
	/**
	 * 生产出有内容的实体类configModel
	 * @param xmlPath
	 * @return
	 * @throws Exception
	 */
	public static ConfigModel  configModel(String xmlPath) throws Exception {
		ConfigModel configModel=new ConfigModel();
		ActionModel actionModel=null;
		ForwardModel forwardModel=null;
		InputStream in=ConfigModelFactory.class.getResourceAsStream(xmlPath);
		SAXReader sax=new SAXReader();
		Document doc=sax.read(in);
	     List<Element>  actionEles= doc.selectNodes("/config/action");
	     for (Element actionEle : actionEles) {
			actionModel=new ActionModel();
			//给actionModel对象填充xml中的action标签的内容
			actionModel.setPath(actionEle.attributeValue("path"));
			actionModel.setType(actionEle.attributeValue("type"));
			List<Element>  forwardEles=actionEle.selectNodes("forward");
			for (Element forwardEle : forwardEles) {
				forwardModel=new ForwardModel();
				//给forwardModel对象填充xml中的forward标签的内容
				forwardModel.setName(forwardEle.attributeValue("name"));
				forwardModel.setPath(forwardEle.attributeValue("path"));
				forwardModel.setRedirect(!"false".equals(forwardEle.attributeValue(("redirect"))));
//				<forward name="failed" path="/reg.jsp" redirect="false" />
			//	redirect默认是true 重定向  只有填了false才是转发
				//forwardEle.attributeValue(("redirect"))拿到的是xml中你所填的值
			//	不填  重定向  "false".equals(forwardEle.attributeValue(("redirect")))是false
			//	填 true   重定向 "false".equals(forwardEle.attributeValue(("redirect")))是false
			//	填flase 转发 "false".equals(forwardEle.attributeValue(("redirect")))true;
				actionModel.push(forwardModel);
			}
			configModel.push(actionModel);
		}
		return configModel;
	}
	public static void main(String[] args) throws Exception {
		ConfigModel configModel=ConfigModelFactory.build();
		ActionModel actionModel=configModel.pop("/loginAction");
	     ForwardModel 	forwardModel=actionModel.pop("success");
	     System.out.println( actionModel.getType());
	     System.out.println(forwardModel.getPath());
	}
}
对web.xml进行建模,链接https://i.cnblogs.com/Files.aspx
xml建模的更多相关文章
- Xml解析作业与Xml建模andXml建模作业
		
作业:config.xml解析 1.获取所有action中的type的值 public static void main(String[] args) throws Exception { Input ...
 - XML建模实列
		
XML建模 建模的由来: 就是将指定的xml字符串当作对象来操作 好处在于,只需要调用指定的方法就可以完成预定的字符串获取: 建模的一个思路: 1.分析需要被建模的文件中有那几个对 ...
 - xml的建模
		
xml建模的思路 1.分析需要被建模的文件中有那几个对象 2.每个对象拥有的行为以及属性 3.定义对象从小到大(从里到外) 4.通过23种的设计模式中的工厂模式,解析xml生产出指定对象 建模的好处 ...
 - W3C XML Schema 教程
		
转自:http://www.blogjava.net/sham2k/articles/179825.html W3C XML Schema 教程 XML SCHEMA教程 本教程是笔者学习W3C的&l ...
 - UVM中的regmodel建模(一)
		
UVM中的regmodel继承自VMM的RAL(Register Abstract Layer),现在可以先将寄存器模型进行XML建模,再通过Synopsys 家的工具ralgen来直接生成regmo ...
 - javacv 340使用  人脸检测例子【转载】
		
Java下使用opencv进行人脸检测 工作需要,研究下人脸识别,发现opencv比较常用,尽管能检测人脸,但识别率不高,多数是用来获取摄像头的视频流的,提取里面的视频帧,实现人脸识别时通常会和其他框 ...
 - hive 下篇
		
由于spark on hive 问题,导致无法插入数据,暂时使用spark进行hive操作 向分区表插入数据 hive> show partitions customers;OKpartitio ...
 - uvm_reg_model——寄存器模型(一)
		
对于一个复杂设计,寄存器模型要能够模拟任意数量的寄存器域操作.UVM提供标准的基类库,UVM的寄存器模型来自于继承自VMM的RAL(Register Abstract Layer),现在可以先将寄存器 ...
 - 自定义简单算法MVC框架
		
什么是MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 它是一种软件设计典范,用一种业务逻辑.数据 ...
 
随机推荐
- 再遇BGP
			
第一次遇到BGP,是在大学的课堂上,现在再次看到它,有种深深的无奈,我只记得它的名字,忘记了它的样子. 那么什么是BGP呢? 翻译过来就是边界网关协议,一个用来网络数据进行选路的路由协议,使用TCP协 ...
 - leetcode_935. Knight Dialer_动态规划_矩阵快速幂
			
https://leetcode.com/problems/knight-dialer/ 在如下图的拨号键盘上,初始在键盘中任意位置,按照国际象棋中骑士(中国象棋中马)的走法走N-1步,能拨出多少种不 ...
 - [整理]ADB命令行学习笔记
			
global driver# 元素定位driver.find_element_by_id("id") # id定位driver.find_element_by_name(" ...
 - gitlab利用ssh方式拉取代码
			
问题1: Bad owner or permissions on .ssh/config的解决 当为本机配一个固定用户名远程登录某主机时,配置了一个config文件,但是在执行ssh免密码登录时报如下 ...
 - 从零开始--系统深入学习Android
			
http://www.cnblogs.com/tianjian/category/354587.html
 - python-opencv 分离图片(视频)中的某一颜色物体
			
看代码: import cv2 as cv import numpy as np def separate_color(frame): cv.imshow("原图", frame) ...
 - java中的编译时与运行时
			
----?基础知识 -- 编译时 编译器将源代码翻译成机器能够读懂的代码,如java中就是翻译成jvm能够读懂的字节码文件.简单说,编译时就是机器帮我们检查代码是否有出现语法错误,关键字写错之类的 ...
 - Linux文件查找find和locate
			
目 录 第1章 locate文件查找 1 1.1 概述 1 1.2 locate文件查找的特性 1 第2章 文件查找概述 1 第3章 1 3.1 文件名查找 1 3 ...
 - python 03 8/25-8/27 range 、randint
			
import random """字符串的操作中 三种方法,只包含左索引,不包含右索引""" hi= "bokeyuan pyth ...
 - CSS3---圆角设置
			
1.border-radius是向元素添加圆角边框.border-radius:10px; /* 所有角都使用半径为10px的圆角 */ border-radius: 5px 4px 3px ...