Xml & Tomcat
Xml
eXtendsible markup language 可擴(kuò)展的標(biāo)記語言
XML 有什么用?
可以用來保存數(shù)據(jù)
可以用來做配置文件
數(shù)據(jù)傳輸載體
定義xml
其實(shí)就是一個文件非春,文件的后綴為 .xml
. 文檔聲明
簡單聲明, version : 解析這個xml的時候,使用什么版本的解析器解析
<?xml version="1.0" ?>
encoding : 解析xml中的文字的時候鸵膏,使用什么編碼來翻譯
<?xml version="1.0" encoding="gbk" ?>
standalone : no - 該文檔會依賴關(guān)聯(lián)其他文檔 陪蜻, yes-- 這是一個獨(dú)立的文檔
<?xml version="1.0" encoding="gbk" standalone="no" ?>
encoding詳解
在解析這個xml的時候饮焦,使用什么編碼去解析讥蟆。 ---解碼腋腮。
文字雀彼, 而是存儲這些文字對應(yīng)的二進(jìn)制 。 那么這些文字對應(yīng)的二進(jìn)制到底是多少呢即寡? 根據(jù)文件使用的編碼 來得到徊哑。
默認(rèn)文件保存的時候,使用的是GBK的編碼保存聪富。
所以要想讓我們的xml能夠正常的顯示中文莺丑,有兩種解決辦法
讓encoding也是GBK 或者 gb2312 .
如果encoding是 utf-8 , 那么保存文件的時候也必須使用utf-8
保存的時候見到的ANSI 對應(yīng)的其實(shí)是我們的本地編碼 GBK墩蔓。
為了通用窒盐,建議使用UTF-8編碼保存,以及encoding 都是 utf-8
元素定義(標(biāo)簽)
-
其實(shí)就是里面的標(biāo)簽钢拧, <> 括起來的都叫元素 蟹漓。 成對出現(xiàn)。 如下:
<stu> </stu>
文檔聲明下來的第一個元素叫做根元素 (根標(biāo)簽)
標(biāo)簽里面可以嵌套標(biāo)簽
-
空標(biāo)簽
既是開始也是結(jié)束源内。 一般配合屬性來用葡粒。 <age/> <stu> <name>張三</name> <age/> </stu>
-
標(biāo)簽可以自定義。
XML 命名規(guī)則
XML 元素必須遵循以下命名規(guī)則:名稱可以含字母膜钓、數(shù)字以及其他的字符
名稱不能以數(shù)字或者標(biāo)點(diǎn)符號開始
名稱不能以字符 “xml”(或者 XML嗽交、Xml)開始
名稱不能包含空格
命名盡量簡單,做到見名知義
簡單元素 & 復(fù)雜元素
- 簡單元素
元素里面包含了普通的文字
- 復(fù)雜元素
元素里面還可以嵌套其他的元素
屬性的定義
定義在元素里面颂斜, <元素名稱 屬性名稱="屬性的值"></元素名稱>
<stus>
<stu id="10086">
<name>張三</name>
<age>18</age>
</stu>
<stu id="10087">
<name>李四</name>
<age>28</age>
</stu>
</stus>
xml注釋:
與html的注釋一樣夫壁。
<!-- -->
如:
<?xml version="1.0" encoding="UTF-8"?>
<!--
//這里有兩個學(xué)生
//一個學(xué)生,名字叫張三沃疮, 年齡18歲盒让, 學(xué)號:10086
//另外一個學(xué)生叫李四 梅肤。。邑茄。
-->
xml的注釋姨蝴,不允許放置在文檔的第一行。 必須在文檔聲明的下面肺缕。
CDATA區(qū)
-
非法字符
嚴(yán)格地講左医,在 XML 中僅有字符 "<"和"&" 是非法的。省略號同木、引號和大于號是合法的浮梢,但是把它們替換為實(shí)體引用是個好的習(xí)慣。
< <
& &
如果某段字符串里面有過多的字符彤路, 并且里面包含了類似標(biāo)簽或者關(guān)鍵字的這種文字秕硝,不想讓xml的解析器去解析。 那么可以使用CDATA來[圖片上傳失敗...(image-7ad544-1539071984682)]包裝斩萌。 不過這個CDATA 一般比較少看到。 通常在服務(wù)器給客戶端返回數(shù)據(jù)的時候屏轰。
<des><![CDATA[<a >我愛黑馬訓(xùn)練營</a>]]></des>
XML 解析
其實(shí)就是獲取元素里面的字符數(shù)據(jù)或者屬性數(shù)據(jù)颊郎。
XML解析方式(面試常問)
有很多種,但是常用的有兩種霎苗。
DOM
SAX
針對這兩種解析方式的API
一些組織或者公司姆吭, 針對以上兩種解析方式, 給出的解決方案有哪些唁盏?
jaxp sun公司内狸。 比較繁瑣
jdom
dom4j 使用比較廣泛
Dom4j 基本用法
element.element("stu") : 返回該元素下的第一個stu元素
element.elements(); 返回該元素下的所有子元素。
創(chuàng)建SaxReader對象
指定解析的xml
獲取根元素厘擂。
根據(jù)根元素獲取子元素或者下面的子孫元素
try {
//1. 創(chuàng)建sax讀取對象
SAXReader reader = new SAXReader(); //jdbc -- classloader
//2. 指定解析的xml源
Document document = reader.read(new File("src/xml/stus.xml"));
//3. 得到元素昆淡、
//得到根元素
Element rootElement= document.getRootElement();
//獲取根元素下面的子元素 age
//rootElement.element("age")
//System.out.println(rootElement.element("stu").element("age").getText());
//獲取根元素下面的所有子元素 。 stu元素
List<Element> elements = rootElement.elements();
//遍歷所有的stu元素
for (Element element : elements) {
//獲取stu元素下面的name元素
String name = element.element("name").getText();
String age = element.element("age").getText();
String address = element.element("address").getText();
System.out.println("name="+name+"==age+"+age+"==address="+address);
}
} catch (Exception e) {
e.printStackTrace();
}
SaxReader 創(chuàng)建好對象 刽严。
Document
Element
看文檔
記住關(guān)鍵字 昂灵。
有對象先點(diǎn)一下。
看一下方法的返回值舞萄。
根據(jù)平時的積累眨补。 getXXX setXXX
Dom4j 的 Xpath使用
dom4j里面支持Xpath的寫法。 xpath其實(shí)是xml的路徑語言倒脓,支持我們在解析xml的時候撑螺,能夠快速的定位到具體的某一個元素。
-
添加jar包依賴
jaxen-1.1-beta-6.jar
在查找指定節(jié)點(diǎn)的時候崎弃,根據(jù)XPath語法規(guī)則來查找
后續(xù)的代碼與以前的解析代碼一樣甘晤。
//要想使用Xpath含潘, 還得添加支持的jar 獲取的是第一個 只返回一個。
Element nameElement = (Element) rootElement.selectSingleNode("http://name");
System.out.println(nameElement.getText());
System.out.println("----------------");
//獲取文檔里面的所有name元素
List<Element> list = rootElement.selectNodes("http://name");
for (Element element : list) {
System.out.println(element.getText());
}
XML 約束【了解】
如下的文檔安皱, 屬性的ID值是一樣的调鬓。 這在生活中是不可能出現(xiàn)的。 并且第二個學(xué)生的姓名有好幾個酌伊。 一般也很少腾窝。那么怎么規(guī)定ID的值唯一, 或者是元素只能出現(xiàn)一次居砖,不能出現(xiàn)多次虹脯? 甚至是規(guī)定里面只能出現(xiàn)具體的元素名字。
<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>
DTD
語法自成一派奏候, 早起就出現(xiàn)的循集。 可讀性比較差。
-
引入網(wǎng)絡(luò)上的DTD
-
引入本地的DTD
-
-
直接在XML里面嵌入DTD的約束規(guī)則
<!DOCTYPE stus [
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]><stus>
<stu>
<name>張三</name>
<age>18</age>
</stu>
</stus>
<!ELEMENT stus (stu)> : stus 下面有一個元素 stu 蔗草, 但是只有一個
<!ELEMENT stu (name , age)> stu下面有兩個元素 name ,age 順序必須name-age
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST stu id CDATA #IMPLIED> stu有一個屬性 文本類型咒彤, 該屬性可有可無
元素的個數(shù):
+ 一個或多個
* 零個或多個
? 零個或一個
屬性的類型定義
CDATA : 屬性是普通文字
ID : 屬性的值必須唯一
<!ELEMENT stu (name , age)> 按照順序來
<!ELEMENT stu (name | age)> 兩個中只能包含一個子元素
Schema
其實(shí)就是一個xml , 使用xml的語法規(guī)則咒精, xml解析器解析起來比較方便 镶柱, 是為了替代DTD 。
但是Schema 約束文本內(nèi)容比DTD的內(nèi)容還要多模叙。 所以目前也沒有真正意義上的替代DTD
約束文檔:
<!-- xmlns : xml namespace : 名稱空間 / 命名空間
targetNamespace : 目標(biāo)名稱空間 歇拆。 下面定義的那些元素都與這個名稱空間綁定上。
elementFormDefault : 元素的格式化情況范咨。 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.com/teacher"
elementFormDefault="qualified">
<element name="teachers">
<complexType>
<sequence maxOccurs="unbounded">
<!-- 這是一個復(fù)雜元素 -->
<element name="teacher">
<complexType>
<sequence>
<!-- 以下兩個是簡單元素 -->
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
實(shí)例文檔:
<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns:xsi : 這里必須是這樣的寫法故觅,也就是這個值已經(jīng)固定了。
xmlns : 這里是名稱空間渠啊,也固定了输吏,寫的是schema里面的頂部目標(biāo)名稱空間
xsi:schemaLocation : 有兩段: 前半段是名稱空間,也是目標(biāo)空間的值 替蛉, 后面是約束文檔的路徑评也。
-->
<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>zhangsan</name>
<age>19</age>
</teacher>
<teacher>
<name>lisi</name>
<age>29</age>
</teacher>
<teacher>
<name>lisi</name>
<age>29</age>
</teacher>
</teachers>
名稱空間的作用
一個xml如果想指定它的約束規(guī)則, 假設(shè)使用的是DTD 灭返,那么這個xml只能指定一個DTD 盗迟, 不能指定多個DTD 。 但是如果一個xml的約束是定義在schema里面熙含,并且是多個schema罚缕,那么是可以的。簡單的說: 一個xml 可以引用多個schema約束怎静。 但是只能引用一個DTD約束邮弹。
名稱空間的作用就是在 寫元素的時候黔衡,可以指定該元素使用的是哪一套約束規(guī)則。 默認(rèn)情況下 腌乡,如果只有一套規(guī)則盟劫,那么都可以這么寫
<name>張三</name>
<aa:name></aa:name>
<bb:name></bb:name>
程序架構(gòu)
網(wǎng)頁游戲
- C/S(client/server)
QQ 微信 LOL
優(yōu)點(diǎn):
有一部分代碼寫在客戶端, 用戶體驗比較好与纽。
缺點(diǎn):
服務(wù)器更新侣签,客戶端也要隨著更新。 占用資源大急迂。
- B/S(browser/server)
網(wǎng)頁游戲 影所, WebQQ ...
優(yōu)點(diǎn):
客戶端只要有瀏覽器就可以了。 占用資源小僚碎, 不用更新猴娩。
缺點(diǎn):
用戶體驗不佳。
服務(wù)器
其實(shí)服務(wù)器就是一臺電腦勺阐。 配置比一般的要好卷中。
Web服務(wù)器軟件
客戶端在瀏覽器的地址欄上輸入地址 ,然后web服務(wù)器軟件渊抽,接收請求蟆豫,然后響應(yīng)消息。
處理客戶端的請求腰吟, 返回資源 | 信息
Web應(yīng)用 需要服務(wù)器支撐无埃。 index.html
Tomcat apache
WebLogic BEA
Websphere IBM
IIS 微軟
Tomcat安裝
直接解壓 徙瓶,然后找到bin/startup.bat
可以安裝
啟動之后毛雇,如果能夠正常看到黑窗口侦镇,表明已經(jīng)成功安裝灵疮。 為了確保萬無一失, 最好在瀏覽器的地址欄上輸入 : http://localhost:8080 , 如果有看到內(nèi)容 就表明成功了壳繁。
- 如果雙擊了startup.bat, 看到一閃而過的情形震捣,一般都是 JDK的環(huán)境變量沒有配置。
Tomcat目錄介紹
bin##
> 包含了一些jar , bat文件 闹炉。 startup.bat
conf##
?
tomcat的配置 server.xml web.xml
lib
tomcat運(yùn)行所需的jar文件
logs
運(yùn)行的日志文件
temp
臨時文件
webapps##
發(fā)布到tomcat服務(wù)器上的項目蒿赢,就存放在這個目錄。
work(目前不用管)
jsp翻譯成class文件存放地
?
如何把一個項目發(fā)布到tomcat中
需求: 如何能讓其他的電腦訪問我這臺電腦上的資源 渣触。 stu.xml
localhost : 本機(jī)地址
1. 拷貝這個文件到webapps/ROOT底下羡棵, 在瀏覽器里面訪問:
http://localhost:8080/stu.xml
* 在webaps下面新建一個文件夾xml , 然后拷貝文件放置到這個文件夾中
?
http://localhost:8080/xml/stu.xml
http://localhost:8080 : 其實(shí)對應(yīng)的是到webapps/root
http://localhost:8080/xml/ : 對應(yīng)是 webapps/xml
使用IP地址訪問:
http://192.168.37.48:8080/xml/stu.xml
2. 配置虛擬路徑
使用localhost:8080 打開tomcat首頁, 在左側(cè)找到tomcat的文檔入口嗅钻, 點(diǎn)擊進(jìn)去后皂冰, 在左側(cè)接著找到 Context入口店展,點(diǎn)擊進(jìn)入。
http://localhost:8080/docs/config/context.html
在conf/server.xml 找到host元素節(jié)點(diǎn)秃流。
加入以下內(nèi)容赂蕴。
<!-- docBase : 項目的路徑地址 如: D:\xml02\person.xml
path : 對應(yīng)的虛擬路徑 一定要以/打頭。
對應(yīng)的訪問方式為: http://localhost:8080/a/person.xml -->
<Context docBase="D:\xml02" path="/a"></Context>
- 在瀏覽器地址欄上輸入: http://localhost:8080/a/person.xml
3. 配置虛擬路徑
在tomcat/conf/catalina/localhost/ 文件夾下新建一個xml文件舶胀,名字可以自己定義概说。 person.xml
-
在這個文件里面寫入以下內(nèi)容
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="D:\xml02"></Context> -
在瀏覽器上面訪問
給Eclipse配置Tomcat
在server里面 右鍵新建一個服務(wù)器, 選擇到apache分類峻贮, 找到對應(yīng)的tomcat版本席怪, 接著一步一步配置即可。
配置完畢后纤控, 在server 里面挂捻, 右鍵剛才的服務(wù)器,然后open 船万, 找到上面的Server Location , 選擇中間的 Use Tomcat installation...
創(chuàng)建web工程刻撒, 在WebContent下定義html文件, 右鍵工程耿导, run as server
總結(jié):
xml
1. 會定義xml
2. 會解析xml
dom4j 基本解析
Xpath手法
tomcat
1. 會安裝 声怔,會啟動 , 會訪問舱呻。
2. 會設(shè)置虛擬路徑
3. 給eclipse配置tomcat
?