1. XML
英文:extendsible markup language:可扩展的标记语言
用途:
1. 可以用来保存数据
2. 可以用来做配置文件
3. 数据传输载体
结构:倒状树形结构
定义xml:后缀:.xml
1. 文档申明
简单申明: version :解析这个xml的时候,使用什么版本来解析
<? xml version = "1.0" ?>
encoding:解析xml中的文字时,使用什么编码来翻译
<? xml version = "1.0" encoding = "gbk" ?>
standalone:no:该文档依赖关联其他文档,yes:这是一个独立的文档
<? xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
2. encoding 详解
在解析这个xml的时候,使用什么编码来解析
使用notepad++保存文件的编码格式是utf-8,为了通用,建议使用Utf-8
windows默认的是gbk
3. 元素定义:标签
里面的标签,<>括起来就是元素,成对出现
文档声明的第一个元素叫做根元素
标签里面可以嵌套标签
标签可以自定义,尽可能的简单,见名知义
4. 简单元素&复杂元素
简单元素:元素里面包含了普通的文字
复杂元素:元素里面还可以嵌套其他的元素
5. 属性的定义
定义在元素的里面,<元素名称 属性名称=“属性的值”>
<?xml version="1.0" encoding="UTF-8"?> <stus> <stu id = 1> <name>wangjing</name> <password>2015141452156</password> </stu> <stu id = 2> <name>wj</name> <password>2015141452153</password> </stu> </stus>
6. xml的注释
<!-- -->:xml的注释,不能够放在文档的第一行,必须要放在声明的下面
7. CDATA区
严格来说,在XML中仅有<和&是非法的,省略号,引号,大于号是合法的,但是换成实体引用是一个好习惯
>:>
<:<
&:&
如果某段字符串中有过多的字符,并且包含了类似的标签或者关键字这种文字,不想让xml的解析器去解析,那么可以用CDATA来包装,不过很少看到,通常在服务器返回数据时候。
<des><![CDATA[<a href = "http://www.baidu.com">黑马</a>]]></des>
8. XML解析
有很多种,但是常用只有两种
DOM:document objet model 解析将所有的文档读入到内存中,形成树状结构,整个文档称为document对象,属性对应Attribute对象,所有的元素节点对应Element对象,文档也可以称之为Text对象,以上所有的对象都可以称之为Node节点。如果xml特点大,那么会造成内存溢出。可以对文档进行增删操作。
SAX:Simple API for Xml基于事件驱动。读取一行,解析一行,不会造成内存溢出。不可以进行增删,只能查询。
一些组织或者公司,针对以上两种解析方式,给出的解决方案有哪些
jaxp:sun公司,比较繁琐
jdom:
dom4j:使用比较广泛
9. Dom4j基本用法
a. 创建Sax读取对象
b. 指定解析的xml
c. 获取根元素
d. 根据根元素获取子元素或者下面的子孙元素
element():返回该元素下的第一个子元素
elements():返回该元素下的所有子元素
public class MainTestSAX { public static void main(String[] args){ try{ // 1. 创建sax对象 SAXReader reader = new SAXReader(); // 2. 指定解析的xml源 Document document = reader.read(new File("src/xml/demo.xml")); // 3. 得到元素 Element rootElement = document.getRootElement(); // 4. 获取根元素下面所有的子元素,stu元素 List<Element> elements = rootElement.elements(); // 5. 遍历所有的stu元素 for(Element element : elements){ String name = element.element("name").getText(); String password = element.element("password").getText(); System.out.println("name:" + name + ",password:" + password); } } catch(Exception e){ e.printStackTrace(); } } }
10. dom4j的Xpath的使用
1. dom4j里面支持Xpath的写法,xpath其实是xml
2. 步骤
a. 添加jar包依赖 jaxen-1.1-beta-6.jar
b. 在查找指定的节点时,根据xpath语法规则来查找
c. 后续的代码与前面的代码一致
public class XpathTest { public static void main(String[] args) { try { // 1。 创建sax对象 SAXReader reader = new SAXReader(); // 2. 指定解析的xml源 Document document = reader.read(new File("src/xml/demo.xml")); // 3. 得到元素 Element rootElement = document.getRootElement(); // 4. 如果使用xpath,必须引入相应的jar包 jaxen-1.1-beta-6.jar Element nameElement = (Element)rootElement.selectSingleNode("//name"); System.out.println(nameElement.getText()); // 5. 获取文档中所有的元素 List<Element> list = rootElement.selectNodes("//name"); for(Element element : list){ System.out.println(element.getText()); } } catch (Exception e) { e.printStackTrace(); } } }
11. XML约束
DTD:语法自成一派,早期出现,可读性比较差
<?xml version="1.0" encoding="UTF-8"?> <!-- 引入dtd来约束这个xml --> <!-- 文档类型 跟标签名字 网络上的dtd dtd的名称 dtd的路径 <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd"> --> <!-- 引入本地的DTD <!DOCTYPE stus SYSTEM "stus.dtd"> --> <!-- 直接在xml中加入DTD文档约束 --> <!DOCTYPE stus [ <!ELEMENT stus (stu)> <!ELEMENT stu (name,password)> <!ELEMENT name (#PCDATA)> <!ELEMENT password (#PCDATA)> ]> <stus> <!-- 这里是两个学生的基本信息 --> <stu> <name>wangjing</name> <password>2015141452156</password> </stu> <!-- <stu> <name>wagnjian</name> <password>2015141452153</password> </stu> --> <!-- <des><![CDATA[<a href = "http://www.baidu.com">黑马</a>]]></des> --> </stus>
<!ELEMENT stus (stu)+>:stus下面有一个或者多个元素 <!ELEMENT stu (name, password)>:stu下面有两个元素 <!ELEMENT name (#PCDATA)> <!ELEMENT password (#PCDATA)> <!ATTLIST stu id CDATA #IMPLIED>stu有一个属性,文本类型,可有可无 元素的个数 +:一个或者多个 *:零个或者多个 ?:两个或者一个 属性的类型定义 CDATA:属性必须是普通文字 ID:属性的值必须唯一 name | password:两个中只能包含一个子元素
Schema:其实就是一个xml,使用xml的语法规则,xml解析起来比较方便,为了替代DTD,但是Schema约束文本内容比DTD的内容还要多,所以目前也没有真正的替代DTD
<?xml version="1.0" encoding="UTF-8"?> <!-- xmlns:xml namespace:名称空间/命名空间 targetNamespace:目标名称空间,下面定义的那些元素都与这个名称空间绑定上 elementFormDefault:元素的格式化情况 --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itheima.com/teacher" elementFormDefault="qualified"> <element name="teachers"> <complexType> <sequence maxOccurs = "2"> <!-- "unbounded"无限多次数 --> <!-- 这是一个复杂元素 --> <element name="teacher"> <!-- 用于声明这个元素是复杂元素 --> <complexType> <sequence> <!-- 以下两个是简单元素 --> <element name="name" type="string"></element> <element name="age" type="int"></element> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema> <?xml version="1.0" encoding="UTF-8"?> <teachers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itheima.com/teacher" xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"> <teacher> <name>wangjing</name> <age>20</age> </teacher> <teacher> <name>wangjjun</name> <age>20</age> </teacher> </teachers>
名称空间的作用:一个xml指定它的约束规则,假設使用的是DTD,那么只能指定一个DTD,不能指定两个,但是如果一个xml的约束在schema里面,那么可以指定多个shema约束。多个时候需要指定元素使用的是那个约束规则。
有点类似java代码中的包名:函数名
名称空间的作用在于写元素时候,可以指定该元素使用的是哪一套约束规则。
<aa:name></aa:name> <bb:name></bb:name>
2. 程序架构
1. c/s(client/server):有一部分的代码卸载客户端,用户的体验比较好
缺点:服务器更新,客户端也需要更新,占用的资源比较大
2. B/S(browser/server):客户端只需要有浏览器就好,不需要更新
缺点:用户的体验不佳。
3. web服务器
客户端在浏览器的地址栏上输入地址,然后web服务器软件,接收请求,处理客户端的请求,返回资源,信息
web应用需要服务器支撑:index.html
WebLogic:BEA
Websphere:IBM
IIS:微软
Tomcat:apache:
直接解压,找到startup.bat,双击即可安装,如果一闪而过,则jdk的环境变量出现了问题。
bin:包含了一些jar,bat文件,startup.bat
conf:tomcat配置,server.xml web.xml
lib:tomcat运行时所需的jar文件
logs:运行时的日志文件
temp:临时文件
webapps:发布到tomcat服务器上的项目,存放在这个目录
work:jsp翻译成java文件存放地
访问另一个电脑文件的方法:
1. 将文件放到webapps目录下新建一个文件夹,重启tomcat,localhost:8080/文件夹名称/文件名
或者直接放到root目录下,localhost:8080/文件名
使用IP地址;访问:IP地址名:8080/文件夹名/文件名
2. 虚拟路径:使用localhost:8080打开tomcat首页,在左侧找到tomcat文档入口,点击进去以后,在左侧的configuration,再点击context,找到server.xml,用记事本打开,在host下面添加
<Context docBase = "D:Development_Toolapache-tomcat-7.0.52webappsxml" path = "/myxml"></Context>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context docBase = "D:Development_Toolapache-tomcat-7.0.52webappsxml" path = "/myxml"></Context> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
docBase:项目的路径地址
path:对应的虚拟路径,一定要以/开头
采用http://localhost:8081/myxml/person.xml的方式访问
3. 在D:Development_Toolapache-tomcat-7.0.52confCatalinalocalhost目录下新建person.xml文件
<?xml version='1.0' encoding='utf-8'?> <Context docBase = "D:Wet_Downloadxml"></Context>
采用http://localhost:8081/people/person.xml的方式访问
MyEclipse如何配置tomcat
开启MyEcliipse Tomcat v8.5,点击工程名,选择run as Myeclipse Server Application,再利用http://localhost:8082/JAVA/wang.html即可访问