JavaEE:Eclipse开发工具的相关使用和XML技术
Eclipse开发工具的知识点
1.工程的属性(properties)
1)Text file encoding 工程编码(在导入其他工程时,注意编码类型一致)
2)Java build path设置classpath位置,指定当前工程引入类库
source中指定.java文件和.class文件存放位置(Default output folder是存放.class的)
Libraries指定当前工程引用类库
3)Java Compiler指定.java采用哪个版本编译.class文件(指定编译器版本)
当jre版本低于编译器版本:会抛出Bad version number in .class file的异常
4)快捷键
alt+/ Content Assist模板键 用于将代码快速补全
ctrl+1 Quick Fix快速修复 用于提供代码修改建议
模板配置方式:window->preferences->java->editor->templates
*使用alt+/等快捷键无反应时,应修改快捷键设置
修改方式window->preferences->general->keys
*设置代码保存时进行格式化 window->preferences->java->editor->save actions
程序的调试和运行
1)程序调试思路
1、当代吗出错了——查看错误信息——找到错误发生位置
*技巧:从上到下找第一行你写的程序
2、根据经验猜测错误原因
例如以下程序,当使用System.out.println((char)b);打印的时候会出现乱码,我们可以根据以往的经验,判断是用System.out.write(b);打印
package cn.it.lsl; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class HelloWorld { public static void main(String[] args) throws IOException { InputStream fi = new FileInputStream("info.txt"); int b; while((b = fi.read()) != -1){ //System.out.println((char)b); System.out.write(b); } } }
3.通过System.out或者日志技术打印关键数据信息到控制台
eg:以下程序将发生错误,我们可以将关键数据输出到控制台,以便判断错误
package cn.it.lsl; public class HelloWorld { public static void main(String[] args) { String data = "abc"; int d = convert(data); } public static int convert(String data){ //通过System.out将关键数据输出到控制台 System.out.println("data:" + data); return Integer.parseInt(data); } }
4.通过Eclipse自带断电调试功能,查看关键位置数据——断点调试 Break Point——程序通过Debug as运行
查看某变量的数值,右键——watch
F5和F7一般一起使用,查看具体代码实现
F6单独使用直接跳到代码下一行
F3查看类代码
F4查看类继承关系
open call Hierarchy查看调用关系
单体测试
1.关于代码测试有白盒测试和黑盒测试两种
白盒测试测试代码结构和逻辑(可见代码测试),黑盒测试测试代码功能和性能(不可见代码测试)
*白盒测试局限性1、白盒测试不可能测试所有代码;2、白盒测试难度比较高
单体测试是一种白盒测试,测试代码功能模块 —— 测试代码单个功能
2.junit是java的单体测试技术
1)编写junit在工程引用junit类库
Properties-->Java Build Path-->Libraries-->Add Library-->JUnit
2)编写单体测试用例
*创建public void无参数的方法、在方法前添加@Test注解
eg:
package cn.lsl.test; import org.junit.Test; public class JunitTest { @Test public void test1(){ System.out.println("HelloWorld"); } @Test public void test2(){ int sum=0; for(int i=1; i<=100; i++){ sum += i; } System.out.println(sum); } }
3)每个测试方法相当于以前编写main函数,每个测试方法可以单独执行
3.在使用junit进行测试当方法非常多,每个方法输出内容到控制台,人们无法通过人工进行检查
*自动化结果检查 --- 断言 Assert
断言原理:调用方法,调用方法前,准备测试数据,测试数据运行结果 ------ 比较实际结果与预期结果是否相同
*编写单体测试时,不要仅测试正确的数据和结果,测试不正确数据(非法数据)
4.一些@XXX的含义
@Test:测试方法
@Ignore:被忽略的测试方法
@Before:在每个测试方法执行之前都要执行一次
@After:在每个测试方法执行之后要执行一次
@BeforeClass:所有测试开始之前运行 static
@AfterClass:所有测试结束之后运行 static
package cn.lsl.test; public class Calculator { public int add(int a, int b){ return a+b; } public int sub(int a, int b){ return a-b; } public int mul(int a, int b){ return a*b; } public int div(int a, int b){ if(b == 0){ throw new RuntimeException("除数不能为0"); } return a/b; } }
package cn.lsl.test; import junit.framework.Assert; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class CalcuatorTest { @Before public void before(){ System.out.println("before....."); } @After public void after(){ System.out.println("after....."); } @BeforeClass public static void beforeClass(){ System.out.println("before class..."); } @AfterClass public static void afterClass(){ System.out.println("after class..."); } @Test public void testAdd(){ System.out.println("testAdd...."); int a = 10; int b = 20; int expect = 30; Calculator calculator = new Calculator(); int result = calculator.add(a, b); //比较实际结果和预期结果的值 Assert.assertEquals(expect, result); } @Test public void testSub(){ int a = 10; int b = 20; Calculator calculator = new Calculator(); int result = calculator.sub(a, b); } @Test public void testMul(){ int a = 10; int b = 20; Calculator calculator = new Calculator(); int result = calculator.mul(a, b); } @Test @Ignore public void testDiv(){ System.out.println("testDiv...."); int a = 10; int b = 20; Calculator calculator = new Calculator(); int result = calculator.div(a, b); } }
XML语言
1.XML技术:与数据相关技术,在企业中xml技术常用来存储数据和传输数据,且XML与任何编程语言无关,可用于php、java、.net等任何编程语言
*通过标签来标记数据
2.什么是标记语言?
例如<xxx>aaa</xxx>,典型标记语言HTML ---- 用标记修饰文本信息
3.XML是可扩展标记语言,XML标签没有被预定义 (XML标记随意定义 --- 可扩展)
在HTML中预定义了很多标记,每个标记都有相应显示效果,xml所有标记没有被预定义
在xml中<name>HLG</name> --- 想确定name标记含义,需要对xml添加约束
4.XML典型存储和传输应用:
1)XML充当数据库,保存数据信息
2)在AJAX传输数据、WebService 网络中传输数据时,格式采用xml
5.XML语法
1)文档声明
任何xml必须具备文档声明 <?xml version="1.0" ?>
没有指定xml编码集 --- 默认采用ISO-8859-1编码 (不支持中文数据)
*当xml指定encoding="utf-8"是浏览器查看编码集 --- 浏览器查看编码集必须和文件保存编码集一致
*新建记事本程序采用默认编码集 --- 默认编码集gbk --- 使用utf-8编码
例如以下程序若是采用记事本编写,应另存为utf-8
eg:
<?xml version="1.0" encoding="utf-8" ?> <book> <id>100</id> <name>java编程思想</name> </book>
当声明standalone="yes"该xml是独立xml,不依赖外面其它文件,standalone="no"该xml依赖外部一些文件
2)元素
XML通过元素描述复杂关系模型数据
xml语法规范
(1)XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,所有xml元素必须结束
<abc></abc> ---- 在xml文件中如果标签中没有内容也应该用自结束<abc />
格式良好的XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子孙标签。
(2)标签不允许交叉嵌套
(3)有且仅有一个根元素
(4)xml文件中,空格和换行会被解析器进行解析的
例如:下面两段内容的意义是不一样的
第一段:
<a>www.baidu.com</a>
第二段
<a> www.baidu.com </a>
注意:由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。
(5)严格区分大小写,元素和属性名称不能以数字开始
3)属性
属性的值必须用单引号或者双引号引起来
eg:
<input type="text">
多学一招:在XML中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:
<input> <type>text</type> </input>
4)注释
xml注释与html注释相同<!-- -->注释不能嵌套
5)CDATA块
CDATA区域内保留不被解析器解析的内容 --- 通常存放特殊代码,这些代码造成xml格式混乱
eg:
<?xml version="1.0" encoding="UTF-8"?> <exams> <exam> <subject>测试一下大家HTML学的怎么样</subject> <question> <![CDATA[ 以下哪个标记不能直接输入内容<input type="text" /> <input type="password" /> <input type="file" /> <input type="hidden" /> <a href="aaa">link</a> ]]> </question> <answer>hidden</answer> </exam> <exam> <subject>测试一下大家HTML学的怎么样</subject> <question> <a>标记有什么作用 </question> <answer>链接</answer> </exam> </exams>
6)处理指令
通过PI指令控制xml显示样式(指令之前不能有注释)
当xml使用pi指令引用CSS --- 效果等同于HTML,进行页面数据展示
*通过xml进行显示数据,通过XSLT修饰xml数据显示(类似CSS)
eg:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="1.css"?> <exams> <exam> <subject>测试一下大家HTML学的怎么样</subject> <question> <![CDATA[ 以下哪个标记不能直接输入内容<input type="text" /> <input type="password" /> <input type="file" /> <input type="hidden" /> <a href="aaa">link</a> ]]> </question> <answer>hidden</answer> </exam> <exam> <subject>测试一下大家HTML学的怎么样</subject> <question> <a>标记有什么作用 </question> <answer>链接</answer> </exam> </exams>
1.css
@CHARSET "UTF-8";
subject{
font-size:30px;
}
answer{
color:red;
}
DTD
1.DTD快速入门
1)编写数据xml --- books.xml
2)编写dtd文件
*为文档每一个元素(不同名称) 编写一个 <!ELEMENT
语法格式:<!ELEMENT 元素名称 子元素>
如果元素内部为文本,则应该写#PCDATA
3)将xml文件与dtd文件关联起来
eg:
books.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE books SYSTEM "books.dtd"> <books> <book> <name>Java编程</name> <price>50</price> </book> </books> books.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT books (book)> <!ELEMENT book (name, price)> <!ELEMENT name (#PCDATA)> <!ELEMENT price (#PCDATA)>
2.DTD与XML三种关联方式
1)内部DTD ---- 语法 <!DOCTYPE 根元素 []>
eg:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE books[ <!ELEMENT books (book)> <!ELEMENT book (name, price)> <!ELEMENT name (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <books> <book> <name>Java编程</name> <price>50</price> </book> </books>
2)外部DTD (引用本地DTD) ---- 语法 <!DOCTYPE 根元素 SYSTEM "本地DTD文件位置">
3)公共DTD (引用网络上DTD) ---- 语法 <!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL">
3.DTD的语法细节
1)元素
<!ELEMENT 元素名称 声明内容>
(1)以下符号的含义
+:一个到多个
*:任意个(0到多个)
?:0或1个
|:多选一
eg:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE books[ <!ELEMENT books (book+)> <!ELEMENT book (name, price?)> <!ELEMENT name (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <books> <book> <name>Java编程</name> </book> <book> <name>Java编程</name> <price>50</price> </book> </books>
(2)元素内容
文类类型内容:#PCDATA
EMPTY:子元素内容如果为空,使用EMPTY
2)属性 (ATTLIST)定义
语法:<!ATTLIST 元素名称 属性列表>
属性列表:
属性名称 类型 约束
属性类型
(1)CDATA 文本类型属性
(2)(值1|值2|值3)三个选一个
(3)ID表示属性值唯一
约束:
(1)#REQUIERD 属性必须
(2)#IMPLED 属性可选
(3)fixed value 属性值固定
(4)default 默认值
3)实体
对于xml数据内容重复,可以抽取实体
语法:<!ENTITY 实体名称 "实体内容">
引用方式:&实体名称;
eg:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE books[ <!ELEMENT books (book+)> <!ELEMENT book (name, price+,public)> <!ELEMENT name (#PCDATA)> <!ELEMENT price EMPTY> <!--ID属性 不能以数字开始--> <!ATTLIST book bid ID #REQUIRED author (金庸|古龙) "古龙" > <!ELEMENT public (#PCDATA)> <!--将公共的重复内容 提取实体--> <!ENTITY cbs "出版社"> ]> <books> <book bid="b100" author="金庸"> <name>神雕侠侣</name> <price></price> <public>&cbs;</public> </book> <book bid="b200"> <name>Java</name> <price></price> <public>&cbs;</public> </book> </books>
Schema
一些概念:
XML Schema文件本身就是一个XML文件,但它的扩展名通常为.xsd
和XML文档一样,一个XML Schema文档也必须有一个根节点,但这个根节点的名称为Schema
1.Schema原理
预先定义元素和属性--->Schema文档(模式、约束文档)--->XML实例(实例文档)
步骤:
1)引用W3C元素和属性的名称空间,为了使用W3C预定义元素和属性
xmlns="http://www.w3.org/2001/XMLSchema"
2)定义Schema元素
想让xml实例使用schema中定义定义元素,为定义元素指定名称空间
targetNamespace="http://www.lsl.com"
3)在xml实例文件中引用自定义schema名称空间
xmlns="http://www.lsl.com"
4)声明xml文件是一个应用schema技术实例
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5)指定schema文件位置
xsi:schemaLocation="http://www.lsl.com books.xsd"
名称空间:http://www.lsl.com
schema文件位置:books.xsd
2.Schema快速入门
1、编写数据xml文件
2、编写schema文件 .xsd
1) 引入 W3C 名称空间 xmlns="http://www.w3.org/2001/XMLSchema"
每一个元素 对应 <element>
区分复杂元素和简单元素
2) 为schema定义元素指定名称空间 URI (URI可以是任何路径)
3、在xml实例数据文件中 ,引用自定义Schema
eg:
books.xml
<?xml version="1.0" encoding="UTF-8"?> <books xmlns="http://www.lsl.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.lsl.com books.xsd" > <book> <name>java</name> <price>100</price> </book> </books>
books.xsd
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.lsl.com" elementFormDefault="qualified" > <element name="books"> <complexType> <sequence> <element name="book" minOccurs="0" maxOccurs="unbounded"> <complexType> <sequence> <element name="name" type="string"></element> <element name="price" type="double"></element> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
elementFormDefault="unqualified"
1.如果schema将elementFormDefault="unqualified",xml文档实例引用名称空间必须使用前缀 --- 前缀修饰根元素
2.当前xml实例文档所有子元素必须不能用前缀
名称空间的作用 --- 唯一标识schema当中定义元素
引用两个schema文件
company.xml
<?xml version="1.0" encoding="UTF-8"?> <company xmlns="http://www.example.org/company" xmlns:dept="http://www.example.org/department" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd" > <employee age="20"> <dept:name>人力资源部</dept:name> <name>小刘</name> </employee> </company>
company.xsd
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/company" elementFormDefault="qualified"> <element name="company"> <complexType> <sequence> <element name="employee"> <complexType> <sequence> <any></any> <element name="name"></element> </sequence> <attribute name="age" type="int"></attribute> </complexType> </element> </sequence> </complexType> </element> </schema>
department.xsd
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/department" elementFormDefault="qualified"> <element name="name" type="string"></element> </schema>