JavaWeb学习笔记1:XML&Tomcat

1-XML介绍

extendssible markup language 可扩展的标记语言
XML的作用:
1、可以用来保存数据
2、可以用来做配置文件
3、数据传输载体

XML的倒转树形结构和html类似
具体的内容和功能都可以查看api来学习,很详细

2-XML文档声明
  1. 简单声明,version:解析这个xml的时候,使用什么版本的解析
    如:<?xml version="1.0">
  2. encoding:解析xml中的文字时,什么编码存,什么编码解析
    如:<?xml version="1.0" encoding="gbk">
  3. standalone:no - 使该文档关联其他的文档
    如:<?xml version="1.0" encoding="gbk" standalone="no"?>
3-XML 元素定义、属性定义

xml元素定义
元素属性

4-XML 注释、CDATA区

如果不加注释,只能放在标签中才能正常显示,否则错误。此时可以加注释解决
一般在数据传输的时候出现,平时比较少见到
有2个非法字符(< &)必须用转义字符来代替
如果某段字符串里有过多的字符,并且里面包含了过多的标签或者关键字的这种文字,不想让xml的解析器去解析,那么可以使用CDATA来包装,不过这个CDATA一般比较少看到
用法:<![CDATA[内容]]>

5-XML 解析方式(DOM&SAX)

其实就是获取元素里面的字符数据或者属性数据 两种方法:DOM&SAX。DOM解析会把所有的文档存到内存中形成树状结构 自上而下,解析方式有很多种,但是常用的就是这两种:
DOM&SAX
同样的,解析手段:jaxp,jdom,dom4j(最常用)

6-XML dom4J入门

1、创建SAXReader对象
2、指定解析的xml
3、获取根元素
4、根据根元素获取子元素或者下面的子孙元素
element.element("stu"); //返回根元素下的第一个stu元素
element.elements("stu");//返回根元素下的所有stu元素

具体代码:

SAXReader sax = null;
Document dom = null;
try {
	String filePath = "src/xml/demo.xml";
	sax = new SAXReader();
	dom = sax.read(filePath);
	
	//返回xml文件的相对路径
	//System.out.println(dom.getName());
	
	//获得根元素对象的地址再获取根元素名
	//System.out.println(dom.getRootElement().getName());
	
	//获得Element集合(所有的stu元素),并获取元素下的数据
	List<Element> element = dom.getRootElement().elements();
	for (Element element2 : element) {
		System.out.print(element2.element("name").getText()+"\t");
		System.out.print(element2.element("age").getText()+"\t");
		System.out.print(element2.element("address").getText());
		System.out.println();
	}
} catch (Exception e) {
	e.printStackTrace();
}
7-XML Xpath入门

遇到新知识,新对象的时候:
1.看文档  2.记关键字  3.有对象先"."一下  4.看返回值  5.平时的积累

dom4j里面支持xpath的写法,xpath其实是xml的路径语言,支持我们在解析xml的时候,能够快速的定位判断具体的某一个元素。

  1. 添加jar包依赖 jaxen-1.1-beta-6.jar
  2. 在查找指定节点的时候,根据xpath语法规则来查找
  3. 后续的代码与以前的解析代码一样

具体代码:

SAXReader sax = null;
Document dom = null;
try {
	String filePath = "src/xml/demo.xml";
	sax = new SAXReader();
	dom = sax.read(filePath);
	Element re = dom.getRootElement();
	
	//要想使用Xpath,还得添加支持的jar,获取的是第一个,只返回一个
	Element nameElement = (Element)re.selectSingleNode("//name");
	System.out.println(nameElement.getText());
	
	System.out.println("--------------------");
	List<Element> list = re.selectNodes("//name");
	for (Element element : list) {
		System.out.println(element.getText());
	}
} catch (Exception e) {
	e.printStackTrace();
}
8-XML XML约束

在开发过程中有的属性和数据只能唯一,或者要受限制,所以要用约束

  1. DTD:一种约束的方式,但是xml解析器不能解析,并且可读性较差,语法自成一派
  2. Schema:其实就是xml,使用xml的语法规则,xml解析器解析起来比较方便,但是文本内容多,所以也没有真正意义上替代DTD
9-XML DTD

DTD

  1. 引入网络上的DTD

    文档类型 根标签名字 网络上的dtd dtd的名称 dtd的路径
    < !DOCTYPE stus PUBLIC “//UNKNOWN/”> “unknown.dtd”>

  2. 引入本地的DTD

    引入本地的DTD:根标签名字 引入本地的DTD dtd的位置
    < !DOCTYPE stus SYSTEM “stus.dtd”>
    dtd文件代码如下:
    < !ELEMENT stus (stu)>
    < !ELEMENT stu (name,age,address)>
    < !ELEMENT name (#PCDATA)>
    < !ELEMENT age (#PCDATA)>
    < !ELEMENT address (#PCDATA)>
    引入之后,xml文件中stu只能有一个,否则会错误

  3. 直接在XML里面嵌入DTD的约束规则

    xml文档里面直接嵌入DTD的约束法则
    < !DOCTYPE stus[
    < !ELEMENT stus (stu)+> stus下面有一个元素stu,但只有一个
    < !ELEMENT stu (name,age)> stu下面有两个元素name,age
    < !ELEMENT name (#PCDATA)>
    < !ELEMENT age (#PCDATA)>
    < !ATTLIST stu id CDATA #IMPLIED> stu有一个属性,文本类型,该属性可有可无]>
    元素的个数:+ 一个或多个 * 零个或多个 ? 零个或一个
    属性的类型:CDATA:属性是普通文字 ID:属性的值必须唯一

10-XML Schema

Schema的书写,先写元素,再逐渐写层级
teacher.xsd:

<!-- xmlns:xml namespace:名称空间 
targetNamespace:下面定义的元素都与这个名称空间绑定
elementFormDefault:元素的格式化情况	-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.example.org/teacher" 
	xmlns:tns="http://www.example.org/teacher" 
	elementFormDefault="qualified">
	<!-- 为复杂元素 -->
	<element name="teachers">
		<complexType>
			<sequence>
				<!-- 为复杂元素:默认只有一个 -->
				<element name="teacher">
					<complexType>
						<sequence maxOccurs="unbounded">
							<!-- 为简单元素 -->
							<element name="name"></element>
							<element name="age"></element>
						</sequence>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>

teacher.xml:

<!-- xmlns:xsi:这里必须是这样的写法,也就是这个值已经固定了
xmlns:这里是名称空间,也固定了,写的是chema里面的顶部目标名称空间
xsi:schemaLocation:有两段:前半段是名称空间,也是目标空间的值,后面的约束文档的路径 -->
<teachers
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.example.org/teacher"
	xsi:schemaLocation="http://www.example.org/teacher teacher.xsd">
	<teacher>
		<name>张三</name>
		<age>28</age>
	</teacher>
</teachers>

命名空间的作用:一个xml如果想绑定它的约束规则,假设使用DTD,那么这个xml只能绑定一个DTD,不能绑定多个DTD,但是可以绑定多个Schema。

命名空间的作用就是可以绑定元素使用的约束规则,默认情况下如果使用一套规则,那么可以这么写:

<name>张三</name>
<aa:name></aa:name>
<bb:name></bb:name>
11-程序架构(BS&CS)

C/S(client/server)
  例如:QQ 微信 LOL…
  优点:有一部分代码写在客户端,用户体验较好
  缺点:服务器更新,客户端也随着更新,占用资源大
B/S(browser/server)
  例如:网页游戏 webQQ qq邮箱…
  优点:客户端只要有浏览器就可以了,占用资源小,不用更新
  缺点:用户体验不佳

12-Web服务器

服务器就是一台电脑,配置比一般的要好
客户端在浏览器的地址栏上输入地址,web服务器软件,接受请求,然后响应
过程:1:安装Tomcat 2:发布项目到Tomcat 3:Elipse配置

13-dom4J总结

使用dom4j时,不同的层级意义:

Document doc = saxR.read("src/xml/teacher.xml");
System.out.println(doc.getName());	//此时还未进入xml,所以输出相对路径
Element element = doc.getRootElement();

//阶段一:
System.out.println(element.getName());	//进入xml根元素,输出根元素名
System.out.println(element.getText());	//进入xml根元素,此时两种方法一样

//阶段二:
System.out.println(element.element("teacher").getName());	//进入teacher元素,输出teacher
System.out.println(element.element("teacher").getText());	//进入teacher元素,但无法取出子元素,所以输出换行符

//阶段三:
System.out.println(element.element("teacher").element("name").getText());
HPF-自我总结

  XML&Tomcat其实是在很早之前就学了,但是笔记一直没有发上来。这也是之前的笔记,所以发上来做个分享,同时以后自己有什么地方忘了也可以参考这里的笔记。主要是做一个记录。
  因为自己的懒惰,所以已经很长很长时间没有继续学习JavaWeb了,最近比较迷茫,想来想去,还是拾起JavaWeb继续学习,我会不断学习并且写下学习笔记的博客的。
  ——— 不积跬步,无以至千里;不积小流,无以成江海。

发布了15 篇原创文章 · 获赞 18 · 访问量 4579

猜你喜欢

转载自blog.csdn.net/oZuoShen123/article/details/105046949