XML与Tomcat笔记

XML

可扩展的标记语言

文档声明
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  • version表示解析这个xml文档时使用什么版本解析器
  • encoding表示xml的文字时使用什么编码翻译
  • standalone中的no表示这是一个依赖其它文档的文档, yes表示它是独立的文档
  • XML要求文档声明必须在第一行,哪怕是注释放在前面也不行
encoding解析
  • 默认文件保存使用的是GBK文件保存,要想XML正常显示中文,有两种方法:
  1. 让encoding是GBK
  2. encoding使用UTF-8,但在保存文件时也使用UTF-8。
    一般建议使用具有通用性的UTF-8
元素定义
  1. 文档声明后的第一个元素是根元素(根标签)
  2. 空标签一般用来设置属性
  3. 可自命名标签,需要遵守以下规则:
    1. 不能以"xml"开头,大写也不行
    2. 不能以数字、标点符号开头
    3. 可以包含数字、字母、其他字符
      最好做到见名知意
  4. 属性设置

<stu id=“111”>…</stu>
<元素名称 属性名=“属性值”>

非法字符

当标签里的数据有非法字符会出错
在这里插入图片描述
解决方法:

  1. <使用 &lt;
  2. >使用&gt;
  3. &用&amp;
  4. '使用&apos;
  5. "使用&quot;
CDATA

当出现大量关键字或类似标签时使用CDATA,一般多出现在服务器给客户端返回数据是出现

<b><![CDATA[<a href=“www.baidu.com”\ >百度</a>]]></b>

XML解析方式

有多种方式,常用的有以下两种:

  • DOM(document object model文档对象模型)
    把整个xml文件读取到内存中,形成一个树状结构。整个文档成为document对象,如图。不论文档、属性、元素、文本对象都可称之为Node节点。如果xml文档过大会造成内存溢出!但可以对文档进行增删改查操作。
    来自黑马老师
  • SAX(Simple API for Xml基于事件驱动)
    读取一行解析一行,不会造成内存溢出,但是只可以进行查询操作。 可以形象的理解为指针。
针对这两种解析方式的API
  • jaxp:比较繁琐
  • jdom
  • dom4j 使用比较广泛

DOM解析

public class Test1 {
	public static void main(String[] args) {
		//创建解析器对象
		SAXReader reader = new SAXReader();
		try {
			//读取XML文件,并获取document对象
			Document document = reader.read(new File("src/com/lxr/Demo.xml"));
			//获得根元素
			Element rootElement = document.getRootElement();
			readElement(rootElement);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public static void readElement(Element rootElement) {
		//获得根元素下的所有子元素
		List<Element> elements = rootElement.elements();
		for (Element e : elements) {
			System.out.println(e.getName() + ":" + e.getTextTrim());
			readElement(e);
		}
	}
}
XPath的使用
public class TestXPath {
	public static void main(String[] args) throws Exception {
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File("src/com/lxr/Demo.xml"));
		Element rootElement = document.getRootElement();
		//导入jar包
		Element element = (Element) rootElement.selectSingleNode("//name");
		System.out.println(element.getText());
		//获取文档里所有name元素
		List<Element> elementNames = rootElement.selectNodes("//name");
		for (Element e : elementNames) {
			System.out.println(e.getText());
		}
	}
}

详细可见XPath的API

dtd&schema约束
  • DTD
    可读性较差
    <!ELEMENT 元素名称 元素类型>
<!--这是一个dtd文件-->
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT stus (stu)+>
<!ELEMENT stu (name, age)><!--,是有顺序的,注意先后被约束了-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

其中+表示一个或多个元素标签,*表示0个或多个,?表示0个或1个,#PCDATA表示标签中必须有一个字符串。

引入dtd来约束XML文档:

  1. 外部关联

(1) 引入网络上的dtd:
<!–文档类型 根标签名 网络上的dtd dtd名称 dtd路径 -->
<!DOCTYPE stus PUBLIC “//UNKNOWN” "unknown.dtd"s>
(2) 引入本地的dtd:
<!DOCTYPE stus SYSTEM “TestDtd.dtd”>
(3) xml中直接嵌入dtd规则
<!DOCTYPE stus[<!–在XML中内部嵌套约束–>
<!ELEMENT stus (stu)>
<!ELEMENT stu (name, age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<stus>
<stu>
<name>张三&</name>
<age>20</age>
</stu>
</stus>

  • schema
    其实是一个xml,使用xml语法规则,xml解析器解析起来方便。为了替代dtd,但是schema阅读性比较差,约束文本内容比dtd还多,以至于没有真正意义上的替代dtd。
  1. 创建rules…xsd文件:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.lxr.com/teacher" 
	xmlns:tns="http://www.example.org/teacher" 
	elementFormDefault="qualified">
	<element name="teachers">
		<complexType>
			<sequence>
				<element name="teacher">
				<!-- 声明teacher元素是一个复杂元素 -->
					<complexType>
						<sequence>
							<!-- 以下是两个简单元素 -->
							<element name="name" type="string"></element>
							<element name="age" type="int"></element>
						</sequence>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>
  1. 其中的sequence表示有序,all表示无序,choice表示只能出现一个。complexType是复杂类型。
  2. xmlns: xml namespace 命名空间
  3. targetNamespace:目标命名空间,后面定义的元素都在这个命名空间上绑定。(上例中的teacher是目标约束文件名)
  4. elementFormDefault:元素的格式化情况
  1. 创建xml文件,并引入xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<teachers
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.lxr.com/teacher"
	xsi:schemaLocation="http://www.lxr.com/teacher rules.xsd"
>
	<teacher>
		<name>李四</name>
		<age>19</age>
	</teacher>
	<teacher>
		<name>王五</name>
		<age>21</age>
	</teacher>
</teachers>

其中xmlns:xsi是固定的,xmlns也是固定的,是xsd文件中的目标命名空间,xsi:schemaLocation的前半段是命名空间, 后半段是约束文件的路径。

命名空间作用

一个xml文件如果要指定约束规则,若为dtd约束则只能有一个,但可以引用多个schema约束
命名空间的作用就是在写元素的时候知道使用的是哪一套约束规则。
如果只有一套规则,那么默认情况下可以写成

<name>张三</name>。

若有多套规则,则必须指明是该元素使用哪一套,如:

<a:name>李四</a:name>
<b:name>李四</b:name>

程序架构

  • C/S(QQ、微信)
    优点:有一部分代码写在客户端,用户体验度较好。
    缺点:服务器更新,客户端也需要更新,占用资源大。
  • B/S(如网页游戏)
    优点:客户端只要有浏览器就行,占用资源小,不用更新。
    缺点:用户体验度差。
web服务器
  1. 服务器其实就是一台电脑,配置很高;
  2. 客户端在浏览器地址栏上输入地址,然后web服务器接收请求,响应消息。
  3. 用来处理客户端的请求,返回资源信息。
    TomCat apache
    WebLogic、
    Websphere、
    IIS
    TomCat安装配置就不详细写了,自己搜索趴!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值