JavaWeb 27天 (Javaweb+SSH框架)
Android 11天基础+ 项目
AJAX + WebService 流行课程
web课程学习目的
1、客户端与服务器端 交互模型概念 --- Android 开发主要面向互联网应用
* 使用JavaWeb学习知识 开发一些服务器端程序(Android客户端)
2、社会上大量Android工程师,都是从其他行业转型过来的
很多Android岗位薪资10000+
学习JavaWeb 了解JavaEE 开发流程 --- 增添一部分JavaEE 经验
3、转型 .net php web开发相关技术,很容易上手
学习建议
1、学习尽量活跃一些,如果出现学习问题,主动提出
2、课上记笔记(课上讲的什么,写程序思路)
3、白天尽量跟着我练习 ,晚上回家不要跟着视频敲代码
4、不要睡太晚
5、纪律不要玩游戏、看电影 ---- 早上不要迟到
课程开发工具:MyEclipse8.5以上 + JDK6.0 版本
1、工作空间werkspace:存放工程源码 ---- 不要含有中文和空格
2、创建工程project:进行代码开发 (设置JRE) myeclipse自带JRE环境 ----- 建议:将JRE指向安装JDK环境
* JDK和JRE区别:JDK包含JRE,多了编译等工具
工程propertities 设置
properties -- Resource -- Text file Encoding 设置工程编码集 (在Java中字符流读取文件,默认编码集GBK --- 必须字节转换流)
properties -- Java build path --- Source 设置哪些目录.java被编译,.class保存到哪个目录
properties ---Java build path ---- libraries 当前工程运行需要jar包环境(JRE环境)
properties --- Java Compiler 编译器版本
java.lang.UnsupportedClassVersionError: Bad version number in .class file
*** 原因:编译版本高于运行版本
3、工作组(working set) :当工作空间中工程数量过多,设置多个工作组,将工程进行分组管理
* 将不用工程隐藏起来,方便操作
MyEclipse 快捷键列表
window- prefereneces - general - keys 设置工具所有快捷键
1、 ALT+/ 模板键 Content Assist (内容补全 代码、类名【自动导包】)
在实际开发中,可以将常用代码,自定义到模板中
window - preferences -- java - editor - templates
2、ctrl + 1 快速修复 Quick Fix
* 在发生错误的代码行,ctrl +1 快速修复建议
3. 快速导包 ctrl + shift + O
4、配置代码保存格式化
window - preferences - java - editor - save actions
5、块注释:ctrl + shift + / (shift + ctrl + \ 解除注释)
6、单行注释: ctrl + /
7、删除行 : ctrl + D
程序调试:
1、在程序运行时,通过system.out 或者 日志技术 输出关键数据信息进行调试
错误信息:1) 单一错误: 阅读错误信息,从上到下,查找第一行你编写代码
2) 复合错误 :查找最后一个Caused by代码
java.lang.ArithmeticException: / by zero
at cn.itcast.mytest.DebugTest.deal(DebugTest.java:42)
at cn.itcast.mytest.DebugTest.reverse(DebugTest.java:35)
at cn.itcast.mytest.DebugTest.main(DebugTest.java:22)
Exception in thread "main" java.lang.RuntimeException: java.lang.ArithmeticException: / by zero
at cn.itcast.mytest.DebugTest.deal(DebugTest.java:45)
at cn.itcast.mytest.DebugTest.reverse(DebugTest.java:35)
at cn.itcast.mytest.DebugTest.main(DebugTest.java:22)
Caused by: java.lang.ArithmeticException: / by zero
at cn.itcast.mytest.DebugTest.deal(DebugTest.java:42)
... 2 more
2、断点调试 break point 使程序在运行过程中停止下来
使用debug as 进行运行。切换断点调试模式 ,右键点击变量 watch命名查看变量值
F5(跳入) F6(跳过) F7(跳出) debug模式
F5: 进入当前行调用方法内部
F6: 在当前代码跳转下一行
F7: 在跳入方法后,跳出
F3 查看一个类源代码
F4 查看一个类继承关系
ctrl + shift + T 查找类
-----------------------------------------------------------------------------------------------------------------------------------
软件在开发完成后,需要经过测试,正式上线(投入使用)
白盒测试 :代码功能(逻辑结构) ---- 对代码可见
黑盒测试 :性能、安全性 ----- 对代码不可见,从软件外部输入数据进行测试
* 白盒测试工程师 读懂代码 ---- 测试工程师水平 高于开发工程师 (成本很高)
* 白盒测试 很难覆盖所有代码流程(代码覆盖率 很低)
白盒测试 交给 开发工程师自己来完成
单体测试是白盒测试一种,由程序员自己来完成 JUnit (Java Unit Java单元测试)
开发步骤
1、在工程导入junit测试框架
工程属性 --- java build path --- liberaries ---- add Liberary --- Junit4
2、编写非static 、void、无参数方法 (测试用例) --- @Test注解
3、run as --- junit test 进行执行
*** 通过双击方法名 右键 ,指定执行哪个方法
关于简易 加减乘除计算器 测试案例
4、通过断言Assert技术,自动检查测试结果
原理:用实际运行结果 和 预期运行结果 比较,如果相同 ---测试方法正确 Assert.assertEquals(预期结果,实际结果)
@Before: 在每个测试方法执行之前都要执行一次。
@After: 在每个测试方法执行之后要执行一次。
@BeforeClass: 所有测试开始之前运行 static
@AfterClass: 所有测试结束之后运行 static
@Ignore: 被忽略的测试方法
*** @Before 方法存放所有测试用例公用代码, @After 方法存放所有测试用例释放资源代码
****** 测试和开发不同,设计测试用例时,除了测试正确数据外,对非法数据进行测试
-------------------------------------------------------------------------------------------------------------------------------------------
XML 学习两天
第一天:XML文件语法格式和约束
第二天:XML解析
什么是标记语言? 在文本内容中嵌入 <></> , 来标记文本内容,使文本内容具有特定含义 ----- HTML 、XML
可扩展:标记可以自定义
XML 独立软件硬件:java 、net 、php 都可以支持XML, window、linux上都可以使用XML ----- 与软件和硬件无关
** XML 存储和传输数据
XML标签没有被预定义 ---- HTML <h1> 一号标题 <p> 段落 <br/> 换行 <a> 链接
* XML 中没有任何被预先定义好的标签,需要用户来定义
XML 企业应用
1、作为框架配置文件
<startup>
<A>
<A1></A1>
<A2></A2>
</A>
<B>
<B1></B1>
<B2></B2>
</B>
</startup>
* Javaweb SSH、Android 采用XML 作为配置文件
* 准确描述层级关系
2、存储和传输数据(跨平台)
例如:北京移动 发送电子账单给 上海移动,北京移动Java开发软件、上海移动.net开发软件 --- 北京发往上海数据采用XML描述(web service)
XML语法
1、文档声明
在XML文件内部第一行
<?xml version="" encoding="" standalone="" ?> -------- version必须写,encoding默认ISO-8859-1,standalone 没什么用(描述XML文档是否独立)
*** 使用记事本之类文本编辑工具,保存中文是 GBK编码方式,如果设置为encoding 为utf-8,需要手动进行编码 ---- 文件另存为 设置编码集
*** 使用Eclipse编辑XML,自动将文件保存为encoding指定编码
2、元素定义
元素必须结束 <a></a> 如果元素没有文本内容,可以采用自结束 <a/> ---- <br/> <hr/>
元素不能交叉嵌套 <a>welcome to <b>www.it315.org</a></b> --- 先开后关,后开先关
元素必须只能有一个根元素 ,为了格式良好
编写元素内部 回车换行等空白字符,会作为元素文本内容 --- 不会忽略
命名规范:严格区分大小写 <P> </p> 不能匹配 ,不能以数字开始, 不建议用_开始
3、属性定义
一个元素可以有 多个属性,每个属性是一个键值对 name="value"------- 这里value值必须使用单引号或者 双引号 括起来
子元素等价于属性(从解析结果上) <book><id>001</id><book> 等价于 <book id="001" ></book>
4、注释 ctrl+shift +C 快速注释 ---- 格式和HTML一样 <!-- -->
** 注释不能嵌套
5、特殊字符处理 两种方式
第一种 CDATA代码块 <![CDATA[ 内容 ]]>
第二种 对特殊字符进行转义 < < > > & &
* 使用CDATA和特殊转义字符 效果相同的,区别在Java编程解析时,CDATA获得原来内容,特殊转移字符获得转义后内容 ----- 优先使用CDATA
6、处理指令,指挥解析器,如何解析XML
* 常用来 指定CSS样式、XSLT样式
XML 应用了处理指令,引用CSS、XSLT 显示和HTML同样效果
CSS = HTML 样式表
XSL = XML 样式表
*****
所有 XML 元素都须有关闭标签
XML 标签对大小写敏感
XML 必须正确地嵌套顺序
XML 文档必须有根元素(只有一个)
XML 的属性值须加引号
特殊字符必须转义 --- CDATA
XML 中的空格、回车换行会解析时被保留
*****
XML 约束:使用一个文档,约束XML文件中定义内容格式
为什么学习约束:XML所有标签没有被预定义,规范XML内容格式,通过约束文档加以限制
常用约束技术: DTD 和 Schema
DTD(Document Type Definition),全称为文档类型定义。
* 通过DTD约束数据文件内容
统计数据文件中有多少个不同元素 ---- 在DTD文件中定义<!ELEMENT >进行描述
* ELEMENT 语法: <!ELEMENT 元素名 子元素>
DTD开发
1、XML数据文件
2、XML DTD约束文件
3、XML数据文件中 引用 DTD约束文件
使用内部DTD :DTD内容在XML数据文件内部
<!DOCTYPE 根元素 []>
使用外部DTD :单独DTD文件
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
使用公共DTD :DTD文件存放互联网网络路径上 ,必须是官方定义,具有指定名称
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
*** 公共DTD名称是固定 --- 从规范获得
DTD语法细节
1、<!ELEMENT > 元素
<!ELEMENT 元素名称 内容声明>
内容声明:
+ 子元素至少出现一次 <!ELEMENT persons (person+) >
? 子元素可以出现0次或1次 <!ELEMENT persons (person?) >
* 子元素出现任意次 <!ELEMENT persons (person*) >
() 子元素 <!ELEMENT person (name) > ---- person元素子元素name
, 顺序 <!ELEMENT person (id,name) > ---- 必须先有id子元素,再有name子元素
((|)) 分组 <!ELEMENT person ((id|name),age) > ----- id或者name,age子元素 ---- id和name作为一组选择其一
#PCDATA 文本元素内容
EMPTY 元素必须为空,不能有子元素 <!ELEMENT age EMPTY >
2、<!ATTLIST > 属性
<!ATTLIST 元素名称 属性名称 类型 约束 属性名称 类型 约束 ... >
类型: CDATA 任意文本 (value1|value2|value3) 几选一 ID 唯一约束
约束:#REQUIRED 必须的 、#IMPLIED 可选的 、#FIXED value 固定值 、value 默认值 :name CDATA "小丽"
常见组合: ID #REQUIRED 、CDATA #REQUIRED/#IMPLIED 、(value1|value2|value3) 默认值
****** DTD 的ID类型属性值,必须不能以数字开始
3、<!ENTITY> 实体
将XML数据中重复内容,提起出来,起一个别名,在XML文件中通过别名进行引用
<!ENTITY 实体名称 “实体内容” >
--------------------------------------------------------------------------------------------------------------------------------
XML Schema 技术
预先已经定义好XML元素和属性 ----- 定义Schema ----- 约束Schema实例文档
学习Schema不用学习另外语法,直接使用XML语法可以定义 ----- 学习这套预先已经定义好元素和属性使用
Schema与DTD区别,Schema比DTD好处?
1、Schema本身是一个XML ,DTD使用自己语法
2、Schema支持名称空间
3、Schema内置多种复杂和简单元素类型
schema扩展名 .xsd ,语法是XML
为什么要有名称空间 namespace ? 一个XML 可以引用 一个DTD,但是一个XML可以引用多个Schema, 所以当两个Schema定义一个相同元素时,在XML实例文档中应该制定元素来自哪个Schema,唯一名称空间标识Schema是唯一的 --------- 唯一标识
1、创建.xsd , 根元素schema
2、在schema xmlns="http://www.w3.org/2001/XMLSchema" 引用w3c 名称空间 --- 使用预定义元素和属性
3、开发Schema 统计有多少个不同元素 --- 每个元素对应一个 <element>
将元素分类,简单元素和复杂元素
复杂元素 ---- 含有complexType子元素 --------------- 具有子元素和属性元素 称为复杂元素
<element>
<complexType></complexType>
</elment>
简单元素 ---- type属性
<element type="" />
*** 在复杂元素内部可以写简单元素 强调元素顺序<sequence>
<element name="persons">
<complexType> <!-- 复杂元素 -->
<sequence>
<element name="person">
<complexType>
<sequence>
<element name="id" type="ID"></element>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType> <!-- 复杂元素 -->
</element>
</sequence> <!-- 子元素顺序 -->
</complexType>
</element>
4、为自定义元素指定名称空间
5、在XML实例文档中引入Schema,向根元素添加一些属性
xmlns="http://www.itcast.cn/0817" 引用schema指定名称空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 声明xml文档是一个Schema约束实例文档
xsi:schemaLocation="http://www.itcast.cn/0817 person.xsd" 指定schema文件硬盘位置
名称空间是干嘛的? 防止在一个文件中同时引用多个Schema,为了指定哪个元素来自哪个名称Schema文件,使用名称空间进行唯一标识
* 当名称空间过多时,可以通过前缀进行区分 xmlns:前缀名称
xmlns : 引用名称空间
targetNamespace : 定义当前名称空间
elementFormDefault元素用于指定局部元素是否受到该schema指定targetNamespace所指定的名称空间限定
attributeFormDefault元素用于指定局部属性是否受到该schema指定targetNamespace所指定的名称空间限定
* elementFormDefault设置unqualified ---- XML 实例文档中,根元素必须有前缀,子元素必须没有前缀
名称空间,是一个任意URI(统一资源标识符) --- 经常http:// 让人们感觉像一个网址 (不是网址,唯一URI,保证唯一就可以了)
* 用schema文件名 作为名称空间,常见保证唯一方法
默认名称空间:xmlns="xxx" ----- 一个XML实例文档,只能有一个默认名称空间
<?xml version="1.0" encoding="UTF-8"?>
<employees xmlns="http://www.example.org/employee"
xmlns:c="http://www.itcast.cn/company"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/employee employee.xsd
http://www.itcast.cn/company company.xsd"
>
<employee>
<name>张三</name>
<salary>3258.25</salary>
<c:company>
<c:name>传智播客</c:name>
</c:company>
</employee>
</employees>
-------------------------------------------------------------------------------------------------------------------------------
总结:
1、eclipse 工程属性配置 (编码集、配置JRE类库,设置编译版本)
2、eclipse 快捷键(keys设置、自定义模板、配置保存自动格式化)
3、断点调试看看
4、Junit 单元测试(编写测试用例、断言自动结果校验) --- 在当前工程引入junit环境
5、XML语法:总结那页PPT ---- 指令了解即可引入CSS
6、DTD 三种引入方式、<!ELEMENT > <!ATTLIST> <!ENTITY>
7、Schema 区分和DTD、编写Schema流程、名称空间含义
* 读取utf-8编码文件
* 将字符串倒序
Android 11天基础+ 项目
AJAX + WebService 流行课程
web课程学习目的
1、客户端与服务器端 交互模型概念 --- Android 开发主要面向互联网应用
* 使用JavaWeb学习知识 开发一些服务器端程序(Android客户端)
2、社会上大量Android工程师,都是从其他行业转型过来的
很多Android岗位薪资10000+
学习JavaWeb 了解JavaEE 开发流程 --- 增添一部分JavaEE 经验
3、转型 .net php web开发相关技术,很容易上手
学习建议
1、学习尽量活跃一些,如果出现学习问题,主动提出
2、课上记笔记(课上讲的什么,写程序思路)
3、白天尽量跟着我练习 ,晚上回家不要跟着视频敲代码
4、不要睡太晚
5、纪律不要玩游戏、看电影 ---- 早上不要迟到
课程开发工具:MyEclipse8.5以上 + JDK6.0 版本
1、工作空间werkspace:存放工程源码 ---- 不要含有中文和空格
2、创建工程project:进行代码开发 (设置JRE) myeclipse自带JRE环境 ----- 建议:将JRE指向安装JDK环境
* JDK和JRE区别:JDK包含JRE,多了编译等工具
工程propertities 设置
properties -- Resource -- Text file Encoding 设置工程编码集 (在Java中字符流读取文件,默认编码集GBK --- 必须字节转换流)
properties -- Java build path --- Source 设置哪些目录.java被编译,.class保存到哪个目录
properties ---Java build path ---- libraries 当前工程运行需要jar包环境(JRE环境)
properties --- Java Compiler 编译器版本
java.lang.UnsupportedClassVersionError: Bad version number in .class file
*** 原因:编译版本高于运行版本
3、工作组(working set) :当工作空间中工程数量过多,设置多个工作组,将工程进行分组管理
* 将不用工程隐藏起来,方便操作
MyEclipse 快捷键列表
window- prefereneces - general - keys 设置工具所有快捷键
1、 ALT+/ 模板键 Content Assist (内容补全 代码、类名【自动导包】)
在实际开发中,可以将常用代码,自定义到模板中
window - preferences -- java - editor - templates
2、ctrl + 1 快速修复 Quick Fix
* 在发生错误的代码行,ctrl +1 快速修复建议
3. 快速导包 ctrl + shift + O
4、配置代码保存格式化
window - preferences - java - editor - save actions
5、块注释:ctrl + shift + / (shift + ctrl + \ 解除注释)
6、单行注释: ctrl + /
7、删除行 : ctrl + D
程序调试:
1、在程序运行时,通过system.out 或者 日志技术 输出关键数据信息进行调试
错误信息:1) 单一错误: 阅读错误信息,从上到下,查找第一行你编写代码
2) 复合错误 :查找最后一个Caused by代码
java.lang.ArithmeticException: / by zero
at cn.itcast.mytest.DebugTest.deal(DebugTest.java:42)
at cn.itcast.mytest.DebugTest.reverse(DebugTest.java:35)
at cn.itcast.mytest.DebugTest.main(DebugTest.java:22)
Exception in thread "main" java.lang.RuntimeException: java.lang.ArithmeticException: / by zero
at cn.itcast.mytest.DebugTest.deal(DebugTest.java:45)
at cn.itcast.mytest.DebugTest.reverse(DebugTest.java:35)
at cn.itcast.mytest.DebugTest.main(DebugTest.java:22)
Caused by: java.lang.ArithmeticException: / by zero
at cn.itcast.mytest.DebugTest.deal(DebugTest.java:42)
... 2 more
2、断点调试 break point 使程序在运行过程中停止下来
使用debug as 进行运行。切换断点调试模式 ,右键点击变量 watch命名查看变量值
F5(跳入) F6(跳过) F7(跳出) debug模式
F5: 进入当前行调用方法内部
F6: 在当前代码跳转下一行
F7: 在跳入方法后,跳出
F3 查看一个类源代码
F4 查看一个类继承关系
ctrl + shift + T 查找类
-----------------------------------------------------------------------------------------------------------------------------------
软件在开发完成后,需要经过测试,正式上线(投入使用)
白盒测试 :代码功能(逻辑结构) ---- 对代码可见
黑盒测试 :性能、安全性 ----- 对代码不可见,从软件外部输入数据进行测试
* 白盒测试工程师 读懂代码 ---- 测试工程师水平 高于开发工程师 (成本很高)
* 白盒测试 很难覆盖所有代码流程(代码覆盖率 很低)
白盒测试 交给 开发工程师自己来完成
单体测试是白盒测试一种,由程序员自己来完成 JUnit (Java Unit Java单元测试)
开发步骤
1、在工程导入junit测试框架
工程属性 --- java build path --- liberaries ---- add Liberary --- Junit4
2、编写非static 、void、无参数方法 (测试用例) --- @Test注解
3、run as --- junit test 进行执行
*** 通过双击方法名 右键 ,指定执行哪个方法
关于简易 加减乘除计算器 测试案例
4、通过断言Assert技术,自动检查测试结果
原理:用实际运行结果 和 预期运行结果 比较,如果相同 ---测试方法正确 Assert.assertEquals(预期结果,实际结果)
@Before: 在每个测试方法执行之前都要执行一次。
@After: 在每个测试方法执行之后要执行一次。
@BeforeClass: 所有测试开始之前运行 static
@AfterClass: 所有测试结束之后运行 static
@Ignore: 被忽略的测试方法
*** @Before 方法存放所有测试用例公用代码, @After 方法存放所有测试用例释放资源代码
****** 测试和开发不同,设计测试用例时,除了测试正确数据外,对非法数据进行测试
-------------------------------------------------------------------------------------------------------------------------------------------
XML 学习两天
第一天:XML文件语法格式和约束
第二天:XML解析
什么是标记语言? 在文本内容中嵌入 <></> , 来标记文本内容,使文本内容具有特定含义 ----- HTML 、XML
可扩展:标记可以自定义
XML 独立软件硬件:java 、net 、php 都可以支持XML, window、linux上都可以使用XML ----- 与软件和硬件无关
** XML 存储和传输数据
XML标签没有被预定义 ---- HTML <h1> 一号标题 <p> 段落 <br/> 换行 <a> 链接
* XML 中没有任何被预先定义好的标签,需要用户来定义
XML 企业应用
1、作为框架配置文件
<startup>
<A>
<A1></A1>
<A2></A2>
</A>
<B>
<B1></B1>
<B2></B2>
</B>
</startup>
* Javaweb SSH、Android 采用XML 作为配置文件
* 准确描述层级关系
2、存储和传输数据(跨平台)
例如:北京移动 发送电子账单给 上海移动,北京移动Java开发软件、上海移动.net开发软件 --- 北京发往上海数据采用XML描述(web service)
XML语法
1、文档声明
在XML文件内部第一行
<?xml version="" encoding="" standalone="" ?> -------- version必须写,encoding默认ISO-8859-1,standalone 没什么用(描述XML文档是否独立)
*** 使用记事本之类文本编辑工具,保存中文是 GBK编码方式,如果设置为encoding 为utf-8,需要手动进行编码 ---- 文件另存为 设置编码集
*** 使用Eclipse编辑XML,自动将文件保存为encoding指定编码
2、元素定义
元素必须结束 <a></a> 如果元素没有文本内容,可以采用自结束 <a/> ---- <br/> <hr/>
元素不能交叉嵌套 <a>welcome to <b>www.it315.org</a></b> --- 先开后关,后开先关
元素必须只能有一个根元素 ,为了格式良好
编写元素内部 回车换行等空白字符,会作为元素文本内容 --- 不会忽略
命名规范:严格区分大小写 <P> </p> 不能匹配 ,不能以数字开始, 不建议用_开始
3、属性定义
一个元素可以有 多个属性,每个属性是一个键值对 name="value"------- 这里value值必须使用单引号或者 双引号 括起来
子元素等价于属性(从解析结果上) <book><id>001</id><book> 等价于 <book id="001" ></book>
4、注释 ctrl+shift +C 快速注释 ---- 格式和HTML一样 <!-- -->
** 注释不能嵌套
5、特殊字符处理 两种方式
第一种 CDATA代码块 <![CDATA[ 内容 ]]>
第二种 对特殊字符进行转义 < < > > & &
* 使用CDATA和特殊转义字符 效果相同的,区别在Java编程解析时,CDATA获得原来内容,特殊转移字符获得转义后内容 ----- 优先使用CDATA
6、处理指令,指挥解析器,如何解析XML
* 常用来 指定CSS样式、XSLT样式
XML 应用了处理指令,引用CSS、XSLT 显示和HTML同样效果
CSS = HTML 样式表
XSL = XML 样式表
*****
所有 XML 元素都须有关闭标签
XML 标签对大小写敏感
XML 必须正确地嵌套顺序
XML 文档必须有根元素(只有一个)
XML 的属性值须加引号
特殊字符必须转义 --- CDATA
XML 中的空格、回车换行会解析时被保留
*****
XML 约束:使用一个文档,约束XML文件中定义内容格式
为什么学习约束:XML所有标签没有被预定义,规范XML内容格式,通过约束文档加以限制
常用约束技术: DTD 和 Schema
DTD(Document Type Definition),全称为文档类型定义。
* 通过DTD约束数据文件内容
统计数据文件中有多少个不同元素 ---- 在DTD文件中定义<!ELEMENT >进行描述
* ELEMENT 语法: <!ELEMENT 元素名 子元素>
DTD开发
1、XML数据文件
2、XML DTD约束文件
3、XML数据文件中 引用 DTD约束文件
使用内部DTD :DTD内容在XML数据文件内部
<!DOCTYPE 根元素 []>
使用外部DTD :单独DTD文件
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
使用公共DTD :DTD文件存放互联网网络路径上 ,必须是官方定义,具有指定名称
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
*** 公共DTD名称是固定 --- 从规范获得
DTD语法细节
1、<!ELEMENT > 元素
<!ELEMENT 元素名称 内容声明>
内容声明:
+ 子元素至少出现一次 <!ELEMENT persons (person+) >
? 子元素可以出现0次或1次 <!ELEMENT persons (person?) >
* 子元素出现任意次 <!ELEMENT persons (person*) >
() 子元素 <!ELEMENT person (name) > ---- person元素子元素name
, 顺序 <!ELEMENT person (id,name) > ---- 必须先有id子元素,再有name子元素
((|)) 分组 <!ELEMENT person ((id|name),age) > ----- id或者name,age子元素 ---- id和name作为一组选择其一
#PCDATA 文本元素内容
EMPTY 元素必须为空,不能有子元素 <!ELEMENT age EMPTY >
2、<!ATTLIST > 属性
<!ATTLIST 元素名称 属性名称 类型 约束 属性名称 类型 约束 ... >
类型: CDATA 任意文本 (value1|value2|value3) 几选一 ID 唯一约束
约束:#REQUIRED 必须的 、#IMPLIED 可选的 、#FIXED value 固定值 、value 默认值 :name CDATA "小丽"
常见组合: ID #REQUIRED 、CDATA #REQUIRED/#IMPLIED 、(value1|value2|value3) 默认值
****** DTD 的ID类型属性值,必须不能以数字开始
3、<!ENTITY> 实体
将XML数据中重复内容,提起出来,起一个别名,在XML文件中通过别名进行引用
<!ENTITY 实体名称 “实体内容” >
--------------------------------------------------------------------------------------------------------------------------------
XML Schema 技术
预先已经定义好XML元素和属性 ----- 定义Schema ----- 约束Schema实例文档
学习Schema不用学习另外语法,直接使用XML语法可以定义 ----- 学习这套预先已经定义好元素和属性使用
Schema与DTD区别,Schema比DTD好处?
1、Schema本身是一个XML ,DTD使用自己语法
2、Schema支持名称空间
3、Schema内置多种复杂和简单元素类型
schema扩展名 .xsd ,语法是XML
为什么要有名称空间 namespace ? 一个XML 可以引用 一个DTD,但是一个XML可以引用多个Schema, 所以当两个Schema定义一个相同元素时,在XML实例文档中应该制定元素来自哪个Schema,唯一名称空间标识Schema是唯一的 --------- 唯一标识
1、创建.xsd , 根元素schema
2、在schema xmlns="http://www.w3.org/2001/XMLSchema" 引用w3c 名称空间 --- 使用预定义元素和属性
3、开发Schema 统计有多少个不同元素 --- 每个元素对应一个 <element>
将元素分类,简单元素和复杂元素
复杂元素 ---- 含有complexType子元素 --------------- 具有子元素和属性元素 称为复杂元素
<element>
<complexType></complexType>
</elment>
简单元素 ---- type属性
<element type="" />
*** 在复杂元素内部可以写简单元素 强调元素顺序<sequence>
<element name="persons">
<complexType> <!-- 复杂元素 -->
<sequence>
<element name="person">
<complexType>
<sequence>
<element name="id" type="ID"></element>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType> <!-- 复杂元素 -->
</element>
</sequence> <!-- 子元素顺序 -->
</complexType>
</element>
4、为自定义元素指定名称空间
5、在XML实例文档中引入Schema,向根元素添加一些属性
xmlns="http://www.itcast.cn/0817" 引用schema指定名称空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 声明xml文档是一个Schema约束实例文档
xsi:schemaLocation="http://www.itcast.cn/0817 person.xsd" 指定schema文件硬盘位置
名称空间是干嘛的? 防止在一个文件中同时引用多个Schema,为了指定哪个元素来自哪个名称Schema文件,使用名称空间进行唯一标识
* 当名称空间过多时,可以通过前缀进行区分 xmlns:前缀名称
xmlns : 引用名称空间
targetNamespace : 定义当前名称空间
elementFormDefault元素用于指定局部元素是否受到该schema指定targetNamespace所指定的名称空间限定
attributeFormDefault元素用于指定局部属性是否受到该schema指定targetNamespace所指定的名称空间限定
* elementFormDefault设置unqualified ---- XML 实例文档中,根元素必须有前缀,子元素必须没有前缀
名称空间,是一个任意URI(统一资源标识符) --- 经常http:// 让人们感觉像一个网址 (不是网址,唯一URI,保证唯一就可以了)
* 用schema文件名 作为名称空间,常见保证唯一方法
默认名称空间:xmlns="xxx" ----- 一个XML实例文档,只能有一个默认名称空间
<?xml version="1.0" encoding="UTF-8"?>
<employees xmlns="http://www.example.org/employee"
xmlns:c="http://www.itcast.cn/company"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/employee employee.xsd
http://www.itcast.cn/company company.xsd"
>
<employee>
<name>张三</name>
<salary>3258.25</salary>
<c:company>
<c:name>传智播客</c:name>
</c:company>
</employee>
</employees>
-------------------------------------------------------------------------------------------------------------------------------
总结:
1、eclipse 工程属性配置 (编码集、配置JRE类库,设置编译版本)
2、eclipse 快捷键(keys设置、自定义模板、配置保存自动格式化)
3、断点调试看看
4、Junit 单元测试(编写测试用例、断言自动结果校验) --- 在当前工程引入junit环境
5、XML语法:总结那页PPT ---- 指令了解即可引入CSS
6、DTD 三种引入方式、<!ELEMENT > <!ATTLIST> <!ENTITY>
7、Schema 区分和DTD、编写Schema流程、名称空间含义
* 读取utf-8编码文件
* 将字符串倒序