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.pswp.cn/news/448727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448727.shtml
英文地址,請注明出處:http://en.pswp.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;底部導航顯示、搭建各模塊靜態頁面、添加登錄頁頁面與…