XML建模

建模分两步:
1、以面向对象的编程思想,描述xml资源文件。

2、将xml文件中内容封装进model实体对象。

 

导入文件:config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[<!ELEMENT config (action*)><!ELEMENT action (forward*)><!ELEMENT forward EMPTY><!ATTLIST actionpath CDATA #REQUIREDtype CDATA #REQUIRED><!ATTLIST forwardname CDATA #REQUIREDpath CDATA #REQUIREDredirect (true|false) "false">
]>
<!-- 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>

 

新建类:ConfigModel.java

package com.zking.model;import java.util.HashMap;
import java.util.Map;public class 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);}}

  

新建类:Actionmodel.java

package com.zking.model;import java.util.HashMap;
import java.util.Map;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 void push(ForwardModel forwardModel) {fmap.put(forwardModel.getName(), forwardModel);}public ForwardModel pop(String name) {return fmap.get(name);}}

  

新建类:ForwardModel.java

package com.zking.model;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;}}

  

新建类:ConfigModelFactory.java

package com.zking.model;import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;/** 23设计模式之一* 工厂模式*  设计模式是一种解决方案,就是为了处理java中所遇到的特定的一些问题*  	解决什么问题呢?*  它是用来将资源文件生产指定的实体类*  好处:*  提高了代码的复用性*/
public class ConfigModelFactory {public static ConfigModel build() throws DocumentException {return ConfigModel("/config.xml");}/** 生产出有类内容的实体类configmodel*/private static ConfigModel ConfigModel(String string) throws DocumentException {ConfigModel configModel=new ConfigModel();Actionmodel actionmodel=null;ForwardModel forwardModel=null;	InputStream in=	ConfigModelFactory.class.getResourceAsStream(string);SAXReader reader=new SAXReader();Document document=reader.read(in);List<Element> list= document.selectNodes("/config/action");for (Element element : list) {actionmodel=new Actionmodel();//给actionmodel对象填充xml中的action标签的内容actionmodel.setPath(element.attributeValue("path"));actionmodel.setType(element.attributeValue("type"));List<Element> list2= element.selectNodes("forward");for (Element element2 : list2) {forwardModel =new ForwardModel();	//给forwardmodel对象填充xml中的action标签的内容forwardModel.setName(element2.attributeValue("name"));forwardModel.setPath(element2.attributeValue("path"));forwardModel.setRedirect(!"false".equals(element2.attributeValue("redirect")));//<forward name="failed" path="/reg.jsp" redirect="false" />//resirect默认是true//只有填了false才是转发//element2.attributeValue("redirect")拿到的是xml中你所填的值//不填       重定向    	"false".equals(element2.attributeValue("redirect"))是false
//				填   true  定向		"false".equals(element2.attributeValue("redirect"))是false//填false  转发	false".equals(element2.attributeValue("redirect"))是true//				actionmodel.push(forwardModel);}configModel.push(actionmodel);}return configModel;}public static void main(String[] args) throws DocumentException {ConfigModel  configModel=ConfigModelFactory.build();Actionmodel actionmodel=configModel.pop("/loginAction");
//		System.out.println(actionmodel.getType());ForwardModel forwardModel=actionmodel.pop("success");System.out.println(actionmodel.getType());System.out.println(forwardModel.getPath());}}

  

注释:

本项目一共导用了两个jar包:dom4j-1.6.1.jar     jaxen-1.1-beta-6.jar  

 

转载于:https://www.cnblogs.com/BAYOUA/p/11018516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 方式安装部署 rocketMQ 、部署 图形化界面控制台、rocketMQ 控制台

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 直接上官网&#xff0c;找到工程&#xff0c;clone 到本地&#xff0c;地址&#xff1a;https://github.com/apache/rocketmq-extern…

迭代器(iterator)

Date: 2019-05-23 Author: Sun 为何要引入迭代器&#xff1f; ​ 通过列表生成式&#xff0c;我们可以直接创建一个列表&#xff0c;但是&#xff0c;受到内存限制&#xff0c;列表容量肯定是有限的&#xff0c;而且创建一个包含100万个元素的列表&#xff0c;不仅占用很大的存…

初识python之函数基础

课堂笔记&#xff1a; 1、什么是函数&#xff1f;函数相当于工具&#xff0c;需要事先准备好&#xff0c;在需要用时再使用。2、如何使用函数&#xff1f;函数必须先定义、后调用。3、函数的语法:# def 函数名(参数1,参数2...):# """# 注释# 函数的说明# 水…

java 的几种对象 (PO,VO,DAO,BO,POJO) 解释

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录&#x…

【随想】每日两题Day.22

题目&#xff1a;102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[…

帮助子女成功的十大路径

美国全国家长协会(National PTA)建议指出&#xff1a;作为家长您对你子女的成功起着非常重要的影响作用&#xff0c;并举出帮助子女成功的十种路径。 1、与子女沟通 如果我们尽早地与子女沟通&#xff0c;提供给他们信息与行为准则&#xff0c;获得子女的信任&#xff0c;在…

shell关闭指定进程

例如要关闭jupyter-notebook这个进程&#xff1a; ps -ef | grep jupyter-notebook | grep -v grep | cut -c 9-15 | xargs kill -9 说明&#xff1a;管道符“|”用来隔开两个命令&#xff0c;管道符左边命令的输出会作为管道符右边命令的输入。 “ps -ef” 查看所有进程  …

垃圾回收算法与垃圾回收器

Java与C等语言最大的技术区别&#xff1a;自动化的垃圾回收机制&#xff08;GC&#xff09; 为什么要了解GC和内存分配策略 1、面试需要 2、GC对应用的性能是有影响的&#xff1b; 3、写代码有好处 栈&#xff1a;栈中的生命周期是跟随线程&#xff0c;所以一般不需要关注 堆&a…

提高孩子睡眠质量 学业事半功倍

睡眠如同大脑的食物。在睡眠期间&#xff0c;许多重要的身体机能静静地发生著作用。省略睡眠是有害的&#xff0c;如果一个严重缺觉的人开着车&#xff0c;他会脸色苍白、喜怒无常、反应迟钝&#xff0c;可能是致命的危险。缺少睡眠让青少年很难与人相处&#xff0c;学业表现不…

实体类(VO,DO,DTO)的划分

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 从领域建模中的实体划分、项目中的实际应用情况两个角度&#xff0c;对这几个概念进行简析。 得出的主要结论是&#xff1a;在项目应用…

IIS新建站点服务器,localhost能登录但是IP访问登录不了。

IIS服务器新建站点之后&#xff0c;浏览页面&#xff0c;服务器本地是可以登录&#xff0c;但是localhost换成IP就无法访问。其他站点IP却可以访问。 1.如果浏览直接失败&#xff0c;说明端口号需要更换。 2.如果出现IP不能访问&#xff0c;localhost能访问&#xff0c;需要在高…

eclipse问题_Alt+/不给提示,只补充代码问题的解决方案

今天用eclipse敲代码的时候遇到的问题 我还以为是冲突什么的 还重新装了软件 最后才发现原来是快捷键设置的问题 解决方案&#xff1a; 1&#xff1a;打开菜单window→Preferences&#xff0c;然后在窗口的左侧树选择General->Keys 2&#xff1a;在下图中的5框的地方输入“w…

领域驱动设计:浅析 VO、DTO、DO、PO 概念、区别、用处

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 本篇文章主要讨论一下我们经常会用到的一些对象&#xff1a;VO、DTO、DO和PO。 由于不同的项目和开发人员有不同的命名习惯&#xff0c…

动脑的生活教育

心理学家华生曾经说过&#xff1a;“如果给我一打孩子&#xff0c;我可以把他们变成律师、医师、科学家&#xff0c;或是强盗、土匪。”华生认为&#xff0c;教育孩子就如同马戏团的驯兽师训练野兽一样&#xff0c;是“刺激”与“反应”的联结&#xff0c;不需要任何的“思考”…

前端知识点回顾之重点篇——CORS

CORS&#xff08;cross origin resource sharing&#xff09;跨域资源共享 来源&#xff1a;http://www.ruanyifeng.com/blog/2016/04/cors.html 它允许浏览器向跨源服务器&#xff0c;发出XMLHttpRequest请求&#xff0c;从而克服了AJAX只能同源使用的限制。 简介 CORS需要浏览…

案例:隐秘而低调的内存泄露(OOM)

内存泄露测试的整个过程如下&#xff1a;在手机里启动被测APP并打开DDMS。在DDMS中选中【com.example.android.hcgallery】之后单击按钮【show heap updates】&#xff0c;然后切换到标签页【VM Heap】&#xff0c;再单击按钮【Cause GC】。不断操作APP&#xff0c;并观察Heap。…

员工价值——如何体现自己价值,如何被自己的领导认可

到公司工作快三年了&#xff0c;比我后来的同事陆续得到了升职的机会&#xff0c;我却原地不动&#xff0c;心里颇不是滋味。终于有一天&#xff0c;冒着被解聘的危险&#xff0c;我找到老板理论。 “老板&#xff0c;我有过迟到、早退或乱章违纪的现象吗&#xff1f;”我问。 …

java: PO,VO,TO,BO,DAO,POJO 解释

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 O/R Mapping 是 Object Relational Mapping&#xff08;对象关系映射&#xff09;的缩写。通俗点讲&#xff0c;就是将对象与关系数据库绑…

[译]JavaScript 究竟是如何工作的?(第一部分)

原文地址&#xff1a;How Does JavaScript Really Work? (Part 1)原文作者&#xff1a;Priyesh Patel如果你是一个 JS 开发者或者是正在学习这门语言的学生&#xff0c;很大概率上你会遇到双字母词"V8"。在这篇文章中&#xff0c;我将会为你简述不同的 JS 引擎并深入…

vue实战(9):总结二

整理前一段所做的工作内容 0.其它 vue实战&#xff08;1&#xff09;&#xff1a;准备与资料整理vue实战&#xff08;2&#xff09;&#xff1a;初始化项目、搭建底部导航路由vue实战&#xff08;3&#xff09;&#xff1a;底部导航显示、搭建各模块静态页面、添加登录页页面与…