XML 什麼是XML - Tomcat - Http XML:eXtensible Markup Language (可擴展標記語言)。 XML 是一種標記語言,很類似 HTML。 XML 的設計宗旨是傳輸數據,而非顯示數據。 XML的使命,就是以一個統一的格式,組織有關係的數據。為不同平臺下的應用 ...
XML
-
-
XML 的設計宗旨是傳輸數據,而非顯示數據。
-
XML的使命,就是以一個統一的格式,組織有關係的數據。為不同平臺下的應用程式服務,獨立於軟體和硬體的信息傳輸工具。
-
XML相較於HTML,語法更加嚴格。
文檔聲明
-
version屬性指定XML版本,固定值是1.0。
-
必須在文件的第一行書寫文檔聲明。
-
-
encoding指定的字元集,是告訴解析器使用什麼字元集進行解碼,而編碼是由文本編輯器決定的
-
通常的寫法:<?xml version="1.0" encoding="utf-8" ?>
-
這樣就要求保存文件時,必須用utf-8編碼保存。此時要求XML文檔的作者確認當前編輯器保存文檔的編碼方式。
語法規則
① XML聲明要麼不寫,要寫就寫在第一行,並且前面沒有任何其他字元,並且必須嚴格遵循語法
② 只能有一個根標簽,所有的其他標簽都必須聲明在根標簽內部
③ 標簽必須正確結束,不能交叉嵌套
⑤ 嚴格區分大小寫
⑥ 開始標簽中,可以自定義添加屬性。但,如果有屬性就必須有值,且必須加引號
⑦ 標簽不能以數字開頭
⑧ 註釋不能嵌套, 註釋採用:
⑨ XML中可以使用HTML中的轉義字元
XML實體中不允許出現"&","<",">"等特殊字元,否則XML語法檢查時將出錯,請使用轉義字元
CDATA區
-
當XML文檔中需要寫一些程式代碼、SQL語句或其他不希望XML解析器進行解析的內容時,就可以寫在CDATA區中
-
XML解析器會將CDATA區中的內容原封不動的輸出
-
CDATA區的定義格式:<![CDATA[…]]>
① 處理指令,簡稱PI (processing instruction)。處理指令用來指揮解析引擎如何解析XML文檔內容。
② 處理指令必須以 <? 作為開頭,以 ?> 作為結尾,XML聲明語句就是最常見的一種處理指令。
例如,在XML文檔中可以使用xml-stylesheet指令,通知XML解析引擎,應用xsl文件顯示xml文檔內容。
③ XSL對於XML來說就相當於CSS對HTML一樣,XSL是XML的文件樣式。
XSL 指擴展樣式表語言(EXtensible Stylesheet Language)。
-
-
Dom4j是由早期開發JDOM的人分離出來而後獨立開發的。與JDOM不同的是,dom4j使用介面和抽象基類,雖然Dom4j的API相對要複雜一些,但它提供了比JDOM更好的靈活性。
-
dom4j是一個非常優秀的Java XML API,具有性能優異、功能強大和極易使用的特點。現在很多軟體都採用dom4j,例如Hibernate。
-
使用dom4j開發,需導入dom4j相應的jar包dom4j-1.6.1.jar。所以使用第一步:導包!
-
//1、創建解析器對象 SAXReader reader = new SAXReader(); //2、使用解析器將xml文件轉換為記憶體中的document對象 Document document = reader.read("teachers.xml"); //相對在項目根路徑下查找xml文件 //3、通過文檔對象可以獲取文檔的根標簽 Element rootElement = document.getRootElement(); //4、根據根標簽獲取所有的根標簽的子標簽集合 List<Element> elements = rootElement.elements(); //5、遍歷集合中的標簽,並將所有的數據解析出來 for (Element element : elements) { //每次遍歷就代表一個teacher信息 System.out.println("正在遍歷的標簽名:"+element.getName()); System.out.println("正在遍歷標簽的id屬性值:"+element.attributeValue("id")); //獲取teacher的子標簽的內容 String tname = element.elementText("tname"); System.out.println("tname:"+tname); String age = element.elementText("tage"); System.out.println("tage:"+age);
}
修改
//添加一個新的student節點 Element newEle = rootElement.addElement("teacher"); //創建一個良好的xml格式 OutputFormat format = OutputFormat.createPrettyPrint(); //寫入文件 XMLWriter xmlWriter = new XMLWriter(new FileWriter("teachers.xml"),format); xmlWriter.write(document); xmlWriter.close();
新建
//1.創建文檔 Document document = DocumentHelper.createDocument(); //2.添加根元素 Element root = document.addElement("teachers"); //3.添加元素節點 Element tcEle = root.addElement("teacher"); Element tcEle2 = root.addElement("teacher");
-
-
XPath通過元素和屬性進行查找,
說明 | |
---|---|
/AAA | 選擇根元素AAA |
/AAA/CCC | 選擇AAA下的所有CCC子元素 |
/AAA/DDD/BBB | 選擇AAA的子元素DDD的所有BBB子元素 |
//BBB | 選擇所有BBB元素 |
//DDD/BBB | 選擇所有父元素是DDD的BBB元素 |
/AAA/CCC/DDD/* | 選擇所有路徑依附於/AAA/CCC/DDD的元素 |
/*/*/*/BBB | 選擇所有的有3個祖先元素的BBB元素 |
//* | 選擇所有元素 |
/AAA/BBB[1] | 選擇AAA的第一個BBB子元素 |
/AAA/BBB[last()] | 選擇AAA的最後一個BBB子元素 |
//@id | 選擇所有元素的id屬性 |
//BBB[@id] | 選擇有id屬性的BBB元素 |
//BBB[@name] | 選擇有name屬性的BBB元素 |
//BBB[@*] | 選擇有任意屬性的BBB元素 |
//BBB[not(@*)] | 選擇沒有屬性的BBB元素 |
//BBB[@id='b1'] | 選擇含有屬性id且其值為'b1'的BBB元素 |
//BBB[@name='bbb'] |
使用
① 導包:jaxen-1.1-beta-6.jar
③ 獲取所有符合條件的節點
-
document.selectNodes(String xpathExpression) :返回List集合
-
舉例:document.selectNodes("/students/student")
-
-
document.selectSingleNode(String xpathExpression) :獲取符合條件的單個節點。即一個Node對象。如果符合條件的節點有多個,那麼返回第一個。
-
舉例:document.selectSingleNode("/students/student[@id='1']")
-
-
-
安裝版:需要安裝,一般不考慮使用。
-
解壓版: 直接解壓縮使用,我們使用的版本。
-
-
-
conf:這是一個非常非常重要的目錄,這個目錄下有四個最為重要的文件:
-
server.xml:配置整個伺服器信息。例如修改埠號。預設HTTP請求的埠號是:8080
-
tomcat-users.xml:存儲tomcat用戶的文件,這裡保存的是tomcat的用戶名及密碼,以及用戶的角色信息。可以按著該文件中的註釋信息添加tomcat用戶,然後就可以在Tomcat主頁中進入Tomcat Manager頁面了;
-
web.xml:部署描述符文件,這個文件中註冊了很多MIME類型,即文檔類型。這些MIME類型是客戶端與伺服器之間說明文檔類型的,如用戶請求一個html網頁,那麼伺服器還會告訴客戶端瀏覽器響應的文檔是text/html類型的,這就是一個MIME類型。客戶端瀏覽器通過這個MIME類型就知道如何處理它了。當然是在瀏覽器中顯示這個html文件了。但如果伺服器響應的是一個exe文件,那麼瀏覽器就不可能顯示它,而是應該彈出下載視窗才對。MIME就是用來說明文檔的內容是什麼類型的!
-
context.xml:對所有應用的統一配置,通常我們不會去配置它。
-
-
lib:Tomcat的類庫,裡面是一大堆jar文件。
-
logs:這個目錄中都是日誌文件,記錄了Tomcat啟動和關閉的信息,如果啟動Tomcat時有錯誤,那麼異常也會記錄在日誌文件中。
-
temp:存放Tomcat的臨時文件,這個目錄下的東西可以在停止Tomcat後刪除!
-
webapps:存放web項目的目錄,其中每個文件夾都是一個項目;如果這個目錄下已經存在了目錄,那麼都是tomcat自帶的項目。其中ROOT是一個特殊的預設項目
-
work:運行時生成的文件,最終運行的文件都在這裡。通過webapps中的項目生成的,可以把這個目錄下的內容刪除,再次運行時會生再次生成work目錄。當客戶端用戶訪問一個JSP文件時,Tomcat會通過JSP生成Java文件,然後再編譯Java文件生成class文件,生成的java和class文件都會存放到這個目錄下。
-
LICENSE:許可證。
-
在命令行中運行catalina run或者 Tomcat解壓目錄下雙擊startup.bathttp://localhost:8080
情況一:如果雙擊startup.bat後視窗一閃而過,請查看JAVA_HOME是否配置正確。
startup.bat會調用catalina.bat,而catalina.bat會調用setclasspath.bat,setclasspath.bat會使用JAVA_HOME環境變數,所以我們必須在啟動Tomcat之前把JAVA_HOME配置正確。
情況二:如果啟動失敗,提示埠號被占用,則將預設的8080埠修改為其他未使用的值,例如8989等。
打開:解壓目錄\conf\server.xml,找到第一個Connector標簽,修改port屬性
web伺服器在啟動時,實際上是監聽了本機上的一個埠,當有客戶端向該埠發送請求時,web伺服器就會處理請求。但是如果不是向其所監聽的埠發送請求,web伺服器不會做任何響應。例如:Tomcat啟動監聽了8989埠,而訪問的地址是http://localhost:8080
-
-
Libraries:存放的是Tomcat及JRE中的jar包。
-
build:自動編譯.java文件的目錄。
-
WebContent:存放的是需要部署到伺服器的文件
-
META-INF:是存放工程自身相關的一些信息,元文件信息,通常由開發工具和環境自動生成。
-
MANIFEST.MF:配置清單文件
-
-
WEB-INF:這個目錄下的文件,是不能被客戶端直接訪問的。
-
lib:用於存放該工程用到的庫。粘貼過來以後,不再需要build path
-
web.xml:web工程的配置文件,完成用戶請求的邏輯名稱到真正的servlet類的映射。
-
classes:存放Java位元組碼文件的目錄。
-
-
-
-
實際上,Eclipse在使用Tomcat時,並沒有將項目部署到Tomcat的目錄下,而是在其工作空間中,創建了一個Tomcat的鏡像,Eclipse啟動的Tomcat是他自己配置的鏡像。
-
Eclipse鏡像所在目錄:你的工作空間目錄.metadata.plugins\org.eclipse.wst.server.core\tmp0
總結:啟動伺服器以後,我們的web項目會部署到伺服器目錄的wtpwebapps文件夾的目錄下。index.jsp也是直接聲明在此項目目錄下的。
HTTP
-
-
HTTP就是一個通信規則,這個規則規定了客戶端發送給伺服器的報文格式,也規定了伺服器發送給客戶端的報文格式。實際我們要學習的就是這兩種報文。客戶端發送給伺服器的稱為”請求報文“,伺服器發送給客戶端的稱為”響應報文
瀏覽器與伺服器之間的通信過程要經歷四個步驟
Host: localhost:8080 主機虛擬地址 Connection: keep-alive 長連接 Upgrade-Insecure-Requests: 1 請求協議的自動升級[http的請求,伺服器卻是https的,瀏覽器自動會將請求協議升級為https的] User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36 - 用戶系統信息 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 - 瀏覽器支持的文件類型 Referer: http://localhost:8080/05_web_tomcat/login.html - 當前頁面的上一個頁面的路徑[當前頁面通過哪個頁面跳轉過來的]: 可以通過此路徑跳轉回上一個頁面, 廣告計費,防止盜鏈 Accept-Encoding: gzip, deflate, br - 瀏覽器支持的壓縮格式 Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7 - 瀏覽器支持的語言
POST請求要求將form標簽的method的屬性設置為post
報文格式(4部分)
-
響應首行(響應行);
-
響應頭信息(響應頭);
-
空行;
-
-
-
404:
- 304 (未修改) 自從上次請求後,請求的網頁未修改過。伺服器返回此響應時,不會返回網頁內容。
- 405 (方法禁用) 禁用請求中指定的方法。
HTTP內容類型:當前響應體的數據類型。
① 需要指出的是在瀏覽器和伺服器之間傳輸的數據類型並非都是文本類型,還包括圖片、視頻、音頻等多媒體類型。這些多媒體類型是使用MIME類型定義的。
MIME類型 | |
---|---|
超文本標記語言文本 | .html,.htm text/html |
普通文本 | .txt text/plain |
RTF文本 | .rtf application/rtf |
GIF圖形 | .gif image/gif |
JPEG圖形 | .jpeg,.jpg image/jpeg |
au聲音文件 | .au audio/basic |
MIDI音樂文件 | mid,.midi audio/midi,audio/x-midi |
RealAudio音樂文件 | .ra, .ram audio/x-pn-realaudio |
MPEG文件 | .mpg,.mpeg video/mpeg |
AVI文件 | .avi video/x-msvideo |
GZIP文件 | .gz application/x-gzip |
TAR文件 |
1xx(臨時響應) 表示臨時響應並需要請求者繼續執行操作的狀態代碼。 代碼 說明 100 (繼續) 請求者應當繼續提出請求。伺服器返回此代碼表示已收到請求的第一部分,正在等待其餘部分。 101 (切換協議) 請求者已要求伺服器切換協議,伺服器已確認並準備切換。 2xx (成功) 表示成功處理了請求的狀態代碼。 代碼 說明 200 (成功) 伺服器已成功處理了請求。通常,這表示伺服器提供了請求的網頁。 201 (已創建) 請求成功並且伺服器創建了新的資源。 202 (已接受) 伺服器已接受請求,但尚未處理。 203 (非授權信息) 伺服器已成功處理了請求,但返回的信息可能來自另一來源。 204 (無內容) 伺服器成功處理了請求,但沒有返回任何內容。 205 (重置內容) 伺服器成功處理了請求,但沒有返回任何內容。 206 (部分內容) 伺服器成功處理了部分 GET 請求。 3xx (重定向) 表示要完成請求,需要進一步操作。 通常,這些狀態代碼用來重定向。 代碼 說明 300 (多種選擇) 針對請求,伺服器可執行多種操作。伺服器可根據請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇。 301 (永久移動) 請求的網頁已永久移動到新位置。伺服器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。 302 (臨時移動) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。 303 (查看其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,伺服器返回此代碼。 304 (未修改) 自從上次請求後,請求的網頁未修改過。伺服器返回此響應時,不會返回網頁內容。 305 (使用代理) 請求者只能使用代理訪問請求的網頁。如果伺服器返回此響應,還表示請求者應使用代理。 307 (臨時重定向) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。 4xx(請求錯誤) 這些狀態代碼表示請求可能出錯,妨礙了伺服器的處理。 代碼 說明 400 (錯誤請求) 伺服器不理解請求的語法。 401 (未授權) 請求要求身份驗證。 對於需要登錄的網頁,伺服器可能返回此響應。 403 (禁止) 伺服器拒絕請求。 404 (未找到) 伺服器找不到請求的網頁。 405 (方法禁用) 禁用請求中指定的方法。 406 (不接受) 無法使用請求的內容特性響應請求的網頁。 407 (需要代理授權) 此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。 408 (請求超時) 伺服器等候請求時發生超時。 409 (衝突) 伺服器在完成請求時發生衝突。伺服器必須在響應中包含有關衝突的信息。 410 (已刪除) 如果請求的資源已永久刪除,伺服器就會返回此響應。 411 (需要有效長度) 伺服器不接受不含有效內容長度標頭欄位的請求。 412 (未滿足前提條件) 伺服器未滿足請求者在請求中設置的其中一個前提條件。 413 (請求實體過大) 伺服器無法處理請求,因為請求實體過大,超出伺服器的處理能力。 414 (請求的 URI 過長) 請求的 URI(通常為網址)過長,伺服器無法處理。 415 (不支持的媒體類型) 請求的格式不受請求頁面的支持。 416 (請求範圍不符合要求) 如果頁面無法提供請求的範圍,則伺服器會返回此狀態代碼。 417 (未滿足期望值) 伺服器未滿足”期望”請求標頭欄位的要求。 5xx(伺服器錯誤) 這些狀態代碼表示伺服器在嘗試處理請求時發生內部錯誤。 這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。 代碼 說明 500 (伺服器內部錯誤) 伺服器遇到錯誤,無法完成請求。 501 (尚未實施) 伺服器不具備完成請求的功能。例如,伺服器無法識別請求方法時可能會返回此代碼。 502 (錯誤網關) 伺服器作為網關或代理,從上游伺服器收到無效響應。 503 (服務不可用) 伺服器目前無法使用(由於超載或停機維護)。通常,這隻是暫時狀態。 504 (網關超時) 伺服器作為網關或代理,但是沒有及時從上游伺服器收到請求。 505 (HTTP 版本不受支持) 伺服器不支持請求中所用的 HTTP 協議版本。 HttpWatch狀態碼Result is 200 - 伺服器成功返回網頁,客戶端請求已成功。 302 - 對象臨時移動。伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。 304 - 屬於重定向。自上次請求後,請求的網頁未修改過。伺服器返回此響應時,不會返回網頁內容。 401 - 未授權。請求要求身份驗證。 對於需要登錄的網頁,伺服器可能返回此響應。 404 - 未找到。伺服器找不到請求的網頁。 2xx - 成功。表示伺服器成功地接受了客戶端請求。 3xx - 重定向。表示要完成請求,需要進一步操作。客戶端瀏覽器必須採取更多操作來實現請求。例如,瀏覽器可能不得不請求伺服器上的不同的頁面,或通過代理伺服器重覆該請求。 4xx - 請求錯誤。這些狀態代碼表示請求可能出錯,妨礙了伺服器的處理。 5xx - 伺服器錯誤。表示伺服器在嘗試處理請求時發生內部錯誤。 這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。