1.Model I模式开发
1.Model I模式开发Web应用时,分为两种情况:
1.纯
jsp技术方式开发
2.JSP+
javaBean方式开发
2.Model I模式的不足:
1.JSP页面中嵌入大量Java代码,可读性差。
2.大量代码在JSP中难以复用。
3.后期维护及扩展的难度大。
2.Model II模式与MVC设计模式
1.Model II模式体现了基于MVC的设计模式,简单来说,Model II模式就是将数据显示、流程控制和业务逻辑处理分离,使之相互独立。
2.MVC设计模式
1.MVC设计模式由3个部分组成
Model:模型,主要用于数据和业务的处理。
View:视图,用于数据的显示。
Controller:控制器,用于进行流程控制。
2.MVC设计模式的特点
一个模型可以对应多个视图。
显示与逻辑控制的分离。
分层控制,减低了代码间的偶合。
3.DTD的概念和作用
1.DTD简介
DTD是Document Type Definition的缩写,即文档类型的定义。
2.DTD的作用如下
1.DTD使每个
xml文件可以携带一个自身格式的描述。
2.DTD使不同组织的人可以使用一个通用DTD来交换数据。
3.DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。
3.DTD的声明
语法:
<!DOCTYPE 根元素 [定义内容]>
示例:
<?xml version="1.0"?>
<!DOCTYPE poem[
<!ELEMENT poem (author,title,content) >
<!ELEMENT author (#PCDATA) >
<!ELEMENT title (#PCDATA) >
<!ELEMENT content (#PCDATA) >
]>
<poem>
<author>王维</author>
<title>鹿踩</title>
<content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
</poem>
将DTD嵌入XML文件中用于验证描述诗集的XML,称为内部DTD文档。
4.使用外部DTD验证XML
存储DTD的文件一般以.dtd作为文件的扩展名。
语法:
<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
DOCTYPE、SYSTEM是关键字。
示例:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE poems SYSTEM "poems.dtd">
<poems createYear="2011">
<poem>
<title>春晓</title>
<author>孟浩然</author>
<year>732</year>
<content>春眠不觉晓.....</content>
</poem>
</poems>
5.DTD元素
1.DTD元素定义语法:
<!ELEMENT NAME CONTENT>
ELEMENT是关键字
NAME是元素名称
CONTENT是元素类型
常用的元素类型如下:
#PCDATA,可以包含任何字符数据,但是不能在其中包含任何子元素,例如:
<!ELEMENT title (#PCDATA)>
纯元素类型,只包含子元素,并且这些子元素外没有文本,例如:
<!ELEMENT poems (poem*) >
2.DTD元素中某些符号的用途
符号 用途 示例 示例说明
() 用来给元素分组 (古龙|金庸|梁羽生),(王朔|余杰),毛毛 表示分为三组
| 在列出的对象中选择一个 (男人|女人) 表示"男人"或者"女人"必须出现,并且两者至少选一
, 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示"西瓜""苹果""香蕉"必须出现,并且按这个顺序出现
* 该对象允许出现0到多次 (爱好*) 表示"爱好"可以出现0次到多次
? 该对象可以出现0次到1次 (菜鸟?) 表示"菜鸟"可以出现0次到1次
+ 该对象最少出现1次到多次 (成员+) 表示"成员"必须出现,而且可以出现多次
6.DTD属性
1.DTD属性声明语法如下:
<!ATTLIST 元素名称 属性名称 属性类型 属性默认值>
2.DTD元素中属性类型的描述如下:
属性类型 说明
CDATA 表示字符数据
ID 表示唯一ID
IDREF 表示为另一个元素的id
IDREFS 表示其他id的列表
ENTITY 表示一个实体
ENTITLES 表示一个实体列表
3.DTD元素中属性值的描述
值 说明
#REQUIRED 属性值是必须的
#IMPLIED 属性值不是必须的
#FIXED 属性值是固定的
4.XML文档解析
1.DOM4J概述
DOM4J是一个易用的,开源的库,可以实现对XML文档的解析。
2.使用DOM4J操作XML数据
1.Document对象相关
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
2.节点相关
1.获取文档的根元素
Element rootElm = document.getRootElement();
2.取得某节点的单个子节点
Element memberElm = root.element("member"); //"member"是节点名
3.取得节点的文字
String text = memberElm.getText();
4.取得某节点下名为"member"的所有子节点并遍历
List nodes = rootElm.elements("member");
for(Iterator it = nodes.iterator();it.hasNext();){
Element elm = (Element)it.next();
}
5.对某节点下的所有子节点进行遍历
for(Iterator it = root.elementIterator;it.hasNext();){
Element element = (Element)it.next();
}
6.在某节点下添加子节点
Element ageElm = newMemberElm.addElement("age");
7.设置节点文字
ageElm.setText("29");
8.删除某节点
parentElm.remove(childElm); //childElm是待删除的节点,parentElm是其父节点。
9.添加一个CDATA节点
Element contentElm = infoElm,addElement("content");
contentElm.addCDATA(diary.getContent());
contentElm.getText(); //特别说明:获取街道的CDATA值与获取节点的值是用一个方法
contentElm.clearContent();//清除节点中的内容,CDATA亦可
3.属性相关
1.取得某节点下的某属性
Element root = document.getRootElement();
Attribute attribute = root.attribute("size"); //属性名name
2.获取属性的文字
String text = attribute.getText();
3.遍历某节点的所有属性
Element root = document.getRootElement();
for(Iterator it = root.attributeIterator();it.hasNext()){
Attribute attribute = (Attribute)it.next();
String text = attribute.getText();
System.out.PRintln(text);
}
4.设置某节点的属性和文字
newMemberElm.addAttribute("name","sitinspring");
5.设置属性的文字
Attribute attribute = root.attribute("name");
attribute.setText("sitinspring");