JavaWeb學習筆記1:XML&Tomcat

1-XML介紹

extendssible markup language 可擴展的標記語言
XML的作用:

  1. 可以用來保存數據
  2. 可以用來做配置文件
  3. 數據傳輸載體

具體的內容和功能都可以查看api來學習,很詳細
XML的倒轉樹形結構和html類似

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繼續學習,我會不斷學習並且寫下學習筆記的博客的。
  ——— 不積跬步,無以至千里;不積小流,無以成江海。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章