XML&tomcat

此博客用于个人学习,来源于网上,对知识点进行一个整理。

1.XML:

eXtendsible markup language 可扩展的标记语言

作用:

1.可以用来保存数据

2.可以用来做配置文件

3.数据传输载体

在这里插入图片描述

2.定义XML:

其实就是一个以 xml 为后缀的文件

1.文档声明:

-version:		解析xml的解析器版本
 encoding:		解析xml的编码格式
 standalone:	yes——该文档会关联其他文档,no——该文档是一个独立文档

<?xml version="1.0" encoding="gbk" standalone="no" ?>

2.encoding 详解:

解析 xml 的编码格式

不是指文件的文字, 而是存储这些文字对应的二进制 。 那么这些文字对应的二进制到底是多少呢? 可以根据文件使用的编码来得到,一般文件的默认保存是gbk格式。

所以要想让我们的 xml 能够正常的显示中文,有两种解决办法

  1. 让 encoding 也是 GBK 或者 gb2312 .

  2. 如果 encoding 是 utf-8 , 那么保存文件的时候也必须使用 utf-8

  3. 保存的时候见到的 ANSI 对应的其实是我们的本地编码 GBK。

为了通用,建议使用 UTF-8 编码保存,以及 encoding 都是 utf-8

3.元素定义(标签):
<stu>
	<name>张三</name>
    <age/>
</stu>

1.用<>起来的称为元素(标签),一般成对出现。

<stu></stu>
<name></name>

2.文档声明下来的第一个元素叫根元素(根标签)。

<stu></stu>

3.标签里面可以嵌套标签。

<stu><name></name></stu>

4.空标签:即是开始也是结束,配合属性使用。

<age/>

5.标签可以自定义,定义规则如下:

​ a.名称可以含字母、数字以及其他的字符

​ b.名称不能以数字或者标点符号开始

​ c.名称不能以字符 “xml”(或者 XML、Xml)开始

​ d.名称不能包含空格

​ e.命名尽量简单,做到见名知义

4.简单元素&复杂元素:

简单元素:里面包含着文字。

复杂元素:元素里面还可以嵌套其他的元素。

5.属性的定义:

定义在元素里面, <元素名称 属性名称=“属性的值”></元素名称>

<stus>
	<stu id="10086">
    	<name>张三</name>
        <age>18</age>
    </stu>
    <stu id="10087">
    	<name>李四</name>
        <age>20</age>
    </stu>
</stus>

3.注释:

与 html 的注释相似,不能放在文档第一行,必须在声明下面。

<!-- --> 
如: 

	<?xml version="1.0" encoding="UTF-8"?>
	<!-- 
		//这里有两个学生
		//一个学生,名字叫张三, 年龄18岁, 学号:10086
		//另外一个学生叫李四  。。。
	 -->

4.CDATA 区:

非法字符:严格地讲,在 XML 中仅有字符 “<“和”&” 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

&lt;	<	小于
&gt;	>	大于
&amp;	&	和号
&apos;	'	省略号
&quot;	"	引号

如果某段字符中包含着标签,不想被解析器解析为文字,可以 CDATA 来包装,不过这种情况比较少见,一般是存在于数据传输的时候会出现。

<desc>![CDATA[<a href="www.baidu.com">百度一下,你就知道</a>]]</desc>

5.XML 解析:

获取元素里面的字符数据和属性数据

1.XML 解析方式:

  • DOM

    document object model

    将整个文档读到内存中,形成树状结构。整个文档称为 document 对象,属性为 attribute 对象,所有的元素节点对应 element 对象,文本也可以称为 text 对象,以上四种统称为 Node 节点。如果 xml 特别大,会造成内存溢出。可以对文档的内容进行增删操作。

  • SAX

    simple API for XML

    将文档的语句一句一句读进内存中,不会造成内存溢出,但是无法对内存进行增删操作。

在这里插入图片描述

2.针对于两种解析方式的 API:

jaxp sun公司,比较繁琐

jdom,dom4j 使用比较广泛

3.dom4j 的基本用法:

try {
		//1.创建sax对象
		SAXReader reader = new SAXReader();
		//2.创建xml连接源
		Document document = reader.read(new File("src/XML/stus.xml"));
		//3.获取元素
		Element element= document.getRootElement();
		//获取根元素stu
		System.out.println(element.element("stu").getName());
		//获取age元素
		System.out.println(element.element("stu").element("age").getName());
		//获取所有stu元素
		List<Element> elements = element.elements();
		for(Element e : elements) {
			String name = e.element("name").getText();
			String age = e.element("age").getText();
			String address = e.element("address").getText(); 
			System.out.println("name=="+name+" age=="+age+" address=="+address);
		}
	} catch (Exception e) {
		// TODO 自动生成的 catch 块
		e.printStackTrace();
	}

基本步骤:

1.创建 saxreader 对象。

2.创建 xml 的连接源。

3.获取元素。

  • element.element(“元素名”):获取一个根元素,返回值为一个 Element 对象。
  • element.elements():获取所有根元素,返回值为一个 List 列表。

4.获取元素的值。

  • element.element(“元素名”).getText():获取元素名的数据。

4.dom4j 中 Xpath 的使用:

Xpath 是 dom4j 的路径语言,可以快速定位需要的标签,而不是像之前的基本用法一样,一个一个套。

使用步骤:

1.导入 jar 包。

2.查找节点的代码进行修改。

3.后续代码与前面的代码相似。

try {
		//1.创建sax对象
		SAXReader reader = new SAXReader();
		//2.创建xml连接源
		Document document = reader.read(new File("src/XML/stus.xml"));
		//3.获取一个name元素,返回的是第一个name元素
		Element element = (Element) document.selectSingleNode("//name");
		System.out.println(element.getText());
		//4.获取所有name元素,返回所有的name元素
		List<Element> elements = document.selectNodes("//name"); 
		for (Element e : elements) {
			System.out.println(e.getText());
		}
	} catch (Exception e) {
		// TODO 自动生成的 catch 块
		e.printStackTrace();
	}

5.XML 约束:

如下的文档, 属性的 ID 值是一样的。 这在生活中是不可能出现的。 并且第二个学生的姓名有好几个。 一般也很少。那么怎么规定 ID 的值唯一, 或者是元素只能出现一次,不能出现多次? 甚至是规定里面只能出现具体的元素名字。

<stus>
	<stu id="10086">
		<name>张三</name>
		<age>18</age>
		<address>深圳</address>
	</stu>
	<stu id="10086">
		<name>李四</name>
		<name>李五</name>
		<name>李六</name>
		<age>28</age>
		<address>北京</address>
	</stu>
</stus>

6.XML 的两种约束:

  • DTD

    语法自成一派, 早起就出现的。 可读性比较差。

    1.声明DTD文件:

    <stus>
    	<stu id = "3118002264">
    		<name>张三</name>
    		<age>18</age>
    		<address>台山</address>
    	</stu>
    </stus>
    

    由上面的 xml 文件可知,有五个元素 stus,stu,name,age,address,stu 内有属性 id。

    <!ELEMENT stus (stu)> 				:stus包含着一个stu
    <!ELEMENT stu (name,age,address)>	:stu包含着三个元素,分别是name,age,address,顺序不可以改变
    <!ELEMENT name (#PCDATA)>			:简单元素
    <!ELEMENT age (#PCDATA)>			
    <!ELEMENT address (#PCDATA)>
    <!ATTLIST stu id CDATA #IMPLIED>	:属性id属于stu标签,是文本类型,该属性可有可无
    

    2.导入到 xml 里面进行约束,一共有三种方式:

    一,引用网络上的 dtd
    <文档类型 根标签名字 网络上的dtd dtd的名称 dtd的路径>

    <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd">
    

    二,导入本地的 dtd

    ​ <文档类型 跟标签 本地的dtd dtd的位置>

    <!DOCTYPE stus SYSTEM "stus.dtd">
    

    三,直接在 xml 文件里面声明

    <!DOCTYPE stus [
     		<!ELEMENT stus (stu)> 
    		<!ELEMENT stu (name,age,address)>
    		<!ELEMENT name (#PCDATA)>
    		<!ELEMENT age (#PCDATA)>
    		<!ELEMENT address (#PCDATA)>
    		<!ATTLIST stu id CDATA #IMPLIED>
     	]>
    

    3.dtd 的一些声明规则:

    	1.元素的个数:
    		+ 一个或多个
    		*  零个或多个
    		? 零个或一个
    	2.属性的类型定义: 
    		CDATA : 属性是普通文字
    		ID : 属性的值必须唯一
    	3.<!ELEMENT stu (name , age)>		按照顺序来 
    	  <!ELEMENT stu (name | age)>   两个中只能包含一个子元素Schema
    
  • Schema

    其实就是一个 xml , 使用 xml 的语法规则, xml 解析器解析起来比较方便 , 是为了替代 DTD 。
    但是 Schema 约束文本内容比 DTD 的内容还要多,所以目前也没有真正意义上的替代 DTD。

    Schema 的约束文档:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 
    	xmlns;(xml nameplace)xml全称空间,命名空间
    	targetNamespace:目标名称空间 ,下面定义的那些元素都与这个名称空间绑定上。
    	elementFormDefault:元素的格式化情况。
     -->
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
    	targetNamespace="http://www.example.org/teachers"  
    	elementFormDefault="qualified">
    	
    	<!-- 复杂元素 -->
    	<element name="teachers">
    		<!-- 使用这两个标签可以套用,实现复杂元素的使用 -->
    		<complexType>
    			<!-- maxOccurs这个属性可以指定最大数量,unbounded表示无限 -->
    			<sequence maxOccurs="unbounded">
    				<element name="teacher">
    					<complexType>
    						<sequence>
    							<!-- 简单元素 -->
    							<element name="name" type="string"></element>
    							<element name="age" type="int"></element>
    							<element name="object" type="string"></element>
    						</sequence>
    					</complexType>
    				</element>
    			</sequence>
    		</complexType>
    	</element>	
    </schema>
    

    Schema 的实例文档:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
    	xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间。
    	xsi:schemaLocation : 有两段,前半段是名称空间,也是目标空间的值, 后面是约束文档的路径。
    	 -->
    <teachers
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://www.example.org/teachers"
    	xsi:schemaLocation="http://www.example.org/teachers teachers.xsd"
    >
    	<teacher>
    		<name>张三</name>
    		<age>20</age>
    		<object>数学</object>
    	</teacher>
    	<teacher>
    		<name>李四</name>
    		<age>20</age>
    		<object>数学</object>
    	</teacher>
    	<teacher>
    		<name>王五</name>
    		<age>20</age>
    		<object>数学</object>
    	</teacher>
    </teachers>
    

    名称空间的作用:

    ​ 一个 xml 如果想指定它的约束规则,假设使用的是 DTD ,那么这个 xml 只能指定一个 DTD,不能指定多个 DTD 。但是如果一个 xml 的约束是定义在 schema 里面,并且是多个 schema,那么是可以的。简单的说:一个 xml 可以引用多个 schema 约束。但是只能引用一个 DTD 约束。名称空间的作用就是在写元素的时候,可以指定该元素使用的是哪一套约束规则。默认情况下 ,如果只有一套规则,那么都可以这么写。

    <name>张三</name>
    
    <aa:name></aa:name>
    <bb:name></bb:name>
    

6.程序架构:

  • C/S(client/server)

    微信,QQ,LOL

    优点:有一部分代码写在客户端,用户体验比较好。

    缺点:服务器更新,客户端也要随着更新。占用资源大。

  • B/S(browser/server)

    网页游戏 , WebQQ

    优点:客户端只要有浏览器就可以了,占用资源小,不用更新。

    缺点:用户体验不佳。

  • 服务器

    其实服务器就是一台电脑,配置比一般的要好。

  • 服务器软件

    客户端在浏览器的地址栏上输入地址 ,然后web服务器软件,接收请求,然后响应消息。
    处理客户端的请求, 返回资源 | 信息

  • Web 应用

    需要服务器支撑。

    Tomcat apache

    WebLogic BEA
    Websphere IBM

    IIS 微软

7.Tomcat:

1.Tomcat 安装:

  1. 直接解压 ,然后找到 bin/startup.bat

  2. 可以安装

    启动之后,如果能够正常看到黑窗口,表明已经成功安装。如果是一闪而过,可以在 startup.bat 文件编辑最下面加上一个 pause,查看错误原因。 为了确保万无一失, 最好在浏览器的地址栏上输入 : http://localhost:8080 , 如果有看到内容就表明成功了。

  3. 如果双击了 startup.bat, 看到一闪而过的情形,一般都是 JDK 的环境变量没有配置。

    系统变量:

    JAVA_HOME : JDK 的安装目录

    CLASSPATH : .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(变量值前面有点号和分号,后边结尾也有分号)

    用户变量:

    PATH : %JAVA_HOME%\bin;(就是jdk的bin目录,记得后面有“;”号哦)

2.Tomcat 目录详解:

  • bin

    包含了一些 jar , bat 文件 。例如 startup.bat

  • conf

    tomcat 的配置 。例如 server.xml web.xm

  • lib

    tomcat 运行所需的jar包

  • logs

    运行的日志文件

  • temp

    运行的临时文件

  • webapps

    发布到 tomcat 服务器上的项目,就存放在这个目录。

  • work

    jsp 翻译成 class 文件存放地

3.如何将项目发布到 tomcat 上:

需求: 如何能让其他的电脑访问我这台电脑上的资源 。 stu.xml

本机地址:localhoot

1.拷贝这个文件到 webapps/ROOT 底下, 在浏览器里面访问:

http://localhost:8080/stu.xml

在 webaps 下面新建一个文件夹 xml , 然后拷贝文件放置到这个文件夹中:

http://localhost:8080/xml/stu.xml

使用 IP 地址访问:

http://电脑ip:8080/xml/stu.xml

注意:

http://localhost:8080 : 其实对应的是到 webapps/root

http://localhost:8080/xml/ : 对应是 webapps/xml

2.配置虚拟路径:

使用 localhost:8080 打开 tomcat 首页, 在左侧找到 tomcat 的文档入口, 点击进去后, 在左侧接着找到 Context 入口,点击进入。

http://localhost:8080/docs/config/context.html

​ a.在 conf/server.xml 找到 host 元素节点。

​ b.加入以下内容。

<!-- docBase:项目的路径地址 如: D:\xml02\person.xml
     path:对应的虚拟路径 一定要以/打头。
     对应的访问方式为:http://localhost:8080/a/person.xml -->

<Context docBase="D:\xml02" path="/a"></Context>

​ c.在浏览器地址栏上输入: http://localhost:8080/a/person.xml

3.配置虚拟路径:(同样也是配置虚拟路径)

​ a.在 tomcat/conf/catalina/localhost/ 文件夹下新建一个 xml 文件,名字可以自己定义。 person.xml

​ b.在这个文件里面写入以下内容

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="D:\xml02"></Context>

​ c.在浏览器上面访问

​ http://localhost:8080/person/xml 的名字即可

8.给 Eclipse 配置 Tomcat:

  1. 在 server 里面 右键新建一个服务器, 选择到 apache 分类, 找到对应的 tomcat 版本, 接着一步一步配置即可。

  2. 配置完毕后, 在 server 里面, 右键刚才的服务器,然后 open , 找到上面的 Server Location , 选择中间的 Use Tomcat installation。

  3. 创建 web 工程, 在 WebContent 下定义 html 文件, 右键工程, run as server 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值