Xml & Tomcat

Xml & Tomcat

Xml

eXtendsible markup language 可擴展的標記語言html

XML 有什麼用?

  1. 能夠用來保存數據
  2. 能夠用來作配置文件
  3. 數據傳輸載體

定義xml

其實就是一個文件,文件的後綴爲 .xmlweb

文檔聲明

簡單聲明,version : 解析這個xml的時候,使用什麼版本的解析器解析
<?xml version="1.0" ?>

encoding : 解析xml中文字的時候,使用什麼編碼來翻譯
<?xml version="1.0" encoding="gbk" ?>

standalone : no - 該文檔會依賴關聯其餘文檔,yes - 這是一個獨立的文檔
<?xml version="1.0" encoding="gbk" standalone="no" ?>

encoding詳解

在解析這個xml的時候,使用什麼編碼去解析。 ---解碼。面試

Xml進行存儲時不是存儲文字,而是存儲這些文字對應的二進制。那麼這些文字對應的二進制究竟是多少呢?根據文件使用的編碼來獲得。

默認文件保存的時候,使用的是GBK的編碼保存。apache

因此要想讓咱們的xml可以正常的顯示中文,有兩種解決辦法api

  1. 讓encoding也是GBK或者gb2312瀏覽器

  2. 若是encoding是 utf-8,那麼保存文件的時候也必須使用utf-8tomcat

保存的時候見到的ANSI對應的實際上是咱們的本地編碼GBK。服務器

爲了通用,建議使用UTF-8編碼保存,以及encoding都是 utf-8微信

元素定義(標籤)

  1. 其實就是裏面的標籤,<> 括起來的都叫元素,成對出現。以下:markdown

    <stu> </stu>
  2. 文檔聲明下來的第一個元素叫作根元素 (根標籤)

  3. 標籤裏面能夠嵌套標籤

  4. 空標籤

    既是開始也是結束。 通常配合屬性來用。
    
     <age/>
    
     <stu>
         <name>張三</name>
         <age/>
     </stu>
  5. 標籤能夠自定義。

    XML 命名規則
    XML 元素必須遵循如下命名規則:

    名稱能夠含字母、數字以及其餘的字符
    名稱不能以數字或者標點符號開始
    名稱不能以字符 「xml」(或者 XML、Xml)開始
    名稱不能包含空格

    命名儘可能簡單,作到見名知義

簡單元素 & 複雜元素

  • 簡單元素

元素裏面包含了普通的文字

  • 複雜元素

元素裏面還能夠嵌套其餘的元素

屬性的定義

定義在元素裏面, <元素名稱 屬性名稱="屬性的值">

<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"?>
    <!-- 
        //這裏有兩個學生
        //一個學生,名字叫張三, 年齡18歲, 學號:10086
        //另一個學生叫李四  。。。
     -->

xml的註釋,不容許放置在文檔的第一行。 必須在文檔聲明的下面。

CDATA區

  • 非法字符

    嚴格地講,在 XML 中僅有字符 "<"和"&" 是非法的。省略號、引號和大於號是合法的,可是把它們替換爲實體引用是個好的習慣。

    < <
    & &

若是某段字符串裏面有過多的字符,而且裏面包含了相似標籤或者關鍵字的這種文字,不想讓xml的解析器去解析,那麼可使用CDATA來包裝。不過這個CDATA通常比較少看到,一般在服務器給客戶端返回數據的時候。

<des><![CDATA[<a href="http://www.baidu.com">這是一個描述</a>]]></des>

XML 解析

其實就是獲取元素裏面的字符數據或者屬性數據。

XML解析方式(面試常問)

有不少種,可是經常使用的有兩種。

  • DOM

  • SAX

針對這兩種解析方式的API

一些組織或者公司, 針對以上兩種解析方式, 給出的解決方案有哪些?

jaxp sun公司 比較繁瑣
    jdom
    dom4j 使用比較普遍

Dom4j 基本用法

element.element("stu") : 返回該元素下的第一個stu元素
    element.elements(); 返回該元素下的全部子元素。
  1. 建立SaxReader對象

  2. 指定解析的xml

  3. 獲取根元素。

  4. 根據根元素獲取子元素或者下面的子孫元素

    try {
         //1. 建立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();
     }

Dom4j 的 Xpath使用

dom4j裏面支持Xpath的寫法。 xpath實際上是xml的路徑語言,支持咱們在解析xml的時候,可以快速的定位到具體的某一個元素。

  1. 添加jar包依賴

    jaxen-1.1-beta-6.jar

  2. 在查找指定節點的時候,根據XPath語法規則來查找

  3. 後續的代碼與之前的解析代碼同樣。

    //要想使用Xpath,還得添加支持的jar 獲取的是第一個 只返回一個。 
         Element nameElement = (Element) rootElement.selectSingleNode("//name");
         System.out.println(nameElement.getText());
         System.out.println("----------------");
         //獲取文檔裏面的全部name元素 
         List<Element> list = rootElement.selectNodes("//name");
         for (Element element : list) {
             System.out.println(element.getText());
         }

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>

DTD

語法自成一派,早起就出現的,可讀性比較差。
  1. 引入網絡上的DTD

    <!-- 引入dtd 來約束這個xml -->
     <!--    文檔類型  根標籤名字 網絡上的dtd   dtd的名稱   dtd的路徑
     <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd"> -->
  2. 引入本地的DTD

    <!-- 引入本地的DTD  : 根標籤名字 引入本地的DTD  dtd的位置 -->
     <!-- <!DOCTYPE stus SYSTEM "stus.dtd"> -->
  3. 直接在XML裏面嵌入DTD的約束規則

    <!-- xml文檔裏面直接嵌入DTD的約束法則 -->
     <!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有一個屬性 文本類型, 該屬性無關緊要
    
    
     元素的個數:
    
         + 一個或多個
         * 零個或多個
         ? 零個或一個
    
     屬性的類型定義 
    
         CDATA : 屬性是普通文字
         ID : 屬性的值必須惟一
    
    
     <!ELEMENT stu (name , age)>     按照順序來 
     <!ELEMENT stu (name | age)>   兩個中只能包含一個子元素

    Schema

    其實就是一個xml,使用xml的語法規則,xml解析器解析起來比較方便,是爲了替代DTD。
    可是Schema約束文本內容比DTD的內容還要多,因此目前也沒有真正意義上的替代DTD。

    約束文檔:
     <!-- xmlns  :  xml namespace : 名稱空間 /  命名空間
     targetNamespace :  目標名稱空間 。 下面定義的那些元素都與這個名稱空間綁定上。 
     elementFormDefault : 元素的格式化狀況。  -->
     <schema xmlns="http://www.w3.org/2001/XMLSchema" 
         targetNamespace="http://www.itheima.com/teacher" 
         elementFormDefault="qualified">
         <element name="teachers">
             <complexType>
                 <sequence maxOccurs="unbounded">
                     <!-- 這是一個複雜元素 -->
                     <element name="teacher">
                         <complexType>
                             <sequence>
                                 <!-- 如下兩個是簡單元素 -->
                                 <element name="name" type="string"></element>
                                 <element name="age" type="int"></element>
                             </sequence>
                         </complexType>
                     </element>
                 </sequence>
             </complexType>
         </element>
     </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.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若是想指定它的約束規則,假設使用的是DTD,那麼這個xml只能指定一個DTD,不能指定多個DTD。可是若是一個xml的約束是定義在schema裏面,而且是多個schema,那麼是能夠的。簡單的說:一個xml能夠引用多個schema約束,可是隻能引用一個DTD約束。
名稱空間的做用就是在寫元素的時候,能夠指定該元素使用的是哪一套約束規則。默認狀況下若是隻有一套規則,那麼均可以這麼寫。

<name>張三</name>

aa,bb對應兩種規則

<aa:name></aa:name>
    <bb:name></bb:name>

程序架構

網頁遊戲

  • C/S(client/server)

QQ 微信 LOL

優勢:

有一部分代碼寫在客戶端,用戶體驗比較好。

缺點:

服務器更新,客戶端也要隨着更新,佔用資源大。
  • B/S(browser/server)

網頁遊戲,Web微信 ...

優勢:

客戶端只要有瀏覽器就能夠了,佔用資源小,不用更新。

缺點:

用戶體驗不佳。

服務器

其實服務器就是一臺電腦,配置比通常的要好。

Web服務器軟件

客戶端在瀏覽器的地址欄上輸入地址,而後web服務器軟件,接收請求,而後響應消息。
處理客戶端的請求,返回資源 | 信息

Web應用 須要服務器支撐 index.html

Tomcat  apache
WebLogic BEA
Websphere IBM  
IIS   微軟

Tomcat安裝

  1. 直接解壓 ,而後找到bin/startup.bat

  2. 能夠安裝

啓動以後,若是可以正常看到黑窗口,代表已經成功安裝,爲了確保萬無一失,最好在瀏覽器的地址欄上輸入 : http://localhost:8080 ,若是有看到內容就代表成功了。

  1. 若是雙擊了startup.bat, 看到一閃而過的情形,通常都是JDK的環境變量沒有配置。

Tomcat目錄介紹

bin

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

conf

tomcat的配置   server.xml  web.xml

lib

tomcat運行所需的jar文件

logs

運行的日誌文件

temp

臨時文件

webapps

發佈到tomcat服務器上的項目就存放在這個目錄

work(目前不用管)

jsp翻譯成的class文件存放在這個目錄

如何把一個項目發佈到tomcat中

需求: 如何能讓其餘的電腦訪問我這臺電腦上的資源 stu.xml

localhost : 本機地址

1. 拷貝這個文件到webapps/ROOT底下,在瀏覽器裏面訪問:

http://localhost:8080/stu.xml

* 在webaps下面新建一個文件夾xml,而後拷貝文件放置到這個文件夾中


http://localhost:8080/xml/stu.xml
http://localhost:8080 : 其實對應的是到webapps/root
http://localhost:8080/xml/ : 對應是 webapps/xml

使用IP地址訪問:

    http://本機ip/xml/stu.xml

2. 配置虛擬路徑

使用localhost:8080 打開tomcat首頁,在左側找到tomcat的文檔入口,點擊進去後,在左側接着找到Context入口,點擊進入。

http://localhost:8080/docs/config/context.html
  1. 在conf/server.xml找到host元素節點。

  2. 加入如下內容。

    <!-- docBase :  項目的路徑地址 如: D:\xml\person.xml
     path : 對應的虛擬路徑 必定要以/打頭。
     對應的訪問方式爲: http://localhost:8080/a/person.xml -->
     <Context docBase="D:\xml" path="/a"></Context>
  3. 在瀏覽器地址欄上輸入: http://localhost:8080/a/person.xml

3. 配置虛擬路徑

  1. 在tomcat/conf/catalina/localhost/ 文件夾下新建一個xml文件,名字能夠本身定義。 person.xml

  2. 在這個文件裏面寫入如下內容


  3. 在瀏覽器上面訪問

    http://localhost:8080/person/xml的名字便可

給Eclipse配置Tomcat

  1. 在server裏面 右鍵新建一個服務器,選擇到apache分類,找到對應的tomcat版本,接着一步一步配置便可。
  2. 配置完畢後,在server裏面,右鍵剛纔的服務器,而後open,找到上面的Server Location,選擇 Use Tomcat installation...
  3. 建立web工程,在WebContent下定義html文件,右鍵工程,run as server

總結:

xml

    1. 會定義xml

    2. 會解析xml

        dom4j  基本解析

        Xpath手法


tomcat

    1. 會安裝 ,會啓動 , 會訪問。

    2. 會設置虛擬路徑

    3. 給eclipse配置tomcat

很久沒用markdown的語法規則來寫筆記什麼的了,有些都忘了...有時間仍是要系統的再學一下。不少代碼塊的內容在MarkdownPad2上能顯示可是在博客園的後臺預覽處看不到...很頭疼慢慢調試弄了好久...仍是MarkdownPad2左右分隔的看起來方便...

相關文章
相關標籤/搜索