XML建模
ConfigModel
ActionModel
ForwardModel
ConfigModelFactory
三种命名法
UserName 帕斯卡
userName 驼峰
user-name 匈牙利
RuntimeException
XxxFactory
java代码调试
XML建模
1.根据xml文件建立对应的实体类模型(子节点采用map保存)
2.编写对应工厂类进行xml解析
2.1.从根节点的子节点进行解析
3.一定要有返回值
案例代码展示
前言:将xml转换成java类
.根据xml文件,建立模型,根据xml文件标签 创建实体类
1 第一步 根据xml文件根目录,根节点,子节点 建模
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[
<!ELEMENT config (action*)>
<!ELEMENT action (forward*)>
<!ELEMENT forward EMPTY>
<!ATTLIST action
path CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ATTLIST forward
path CDATA #REQUIRED
redirect (false|true) #REQUIRED
name CDATA #REQUIRED
>
]>
<!--
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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2.创建对应的实体类(根据xml标签 ,属性 ,元素 ,建立模型)代码块
private String path;
private String type;
private Map<String, ForwardModel> forwardModels=new HashMap<String, ForwardModel>();
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;
}
//一个actioc标签中可以有多个forward标签
public void push(ForwardModel forwardModel) {
this.forwardModels.put(forwardModel.getName(), forwardModel);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
3.工厂类
public class ConfigModelFactory {
private static final String DEFAULT_PATH="/config.xml";
private ConfigModelFactory() {
}
public static ConfigModel createConfig() {
return createConfig(DEFAULT_PATH);
}
public static ConfigModel createConfig(String xmlpath) {
ConfigModel configModel=new ConfigModel();
//根据路径读取xml
InputStream is=ConfigModelFactory.class.getResourceAsStream(xmlpath);
SAXReader read=new SAXReader();
try {
Document doc = read.read(is);
ActionModel actionModel=new ActionModel();
//读取action节点
List<Element> actionNodes = doc.selectNodes("/config/action");
for (Element actionNode : actionNodes) {
//读取action的属性
String actionPath = actionNode.attributeValue("path");
String actionType = actionNode.attributeValue("type");
actionModel.setPath(actionPath);
actionModel.setType(actionType);
//读取action节点
List<Element> forwardNodes = actionNode.selectNodes("forward");
for (Element forwardNode : forwardNodes) {
ForwardModel forwardModel=new ForwardModel();
//读取forward节点的属性
String forwardName = forwardNode.attributeValue("name");
String forwardPath = forwardNode.attributeValue("path");
String forwardRedirect = forwardNode.attributeValue("redirect");
forwardModel.setName(forwardName);
forwardModel.setPath(forwardPath);
forwardModel.setRedirect(Boolean.parseBoolean(forwardRedirect));
actionModel.push(forwardModel);
}
configModel.push(actionModel);
}
} catch (Exception e) {
e.printStackTrace();
}
return configModel;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
4.调用
public static void main(String[] args) {
ConfigModel config = ConfigModelFactory.createConfig();
System.out.println(config.get("/regAction"));
————————————————
版权声明:本文为CSDN博主「码农翻身当老板」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46588016/article/details/106970900