JavaWeb學習day01(XML&Tomcat)

Xml & Tomcat

Xml

eXtendsible markup language 可擴展的標記語言

XML 有什麼用?

  1. 可以用來保存數據

  2. 可以用來做配置文件

  3. 數據傳輸載體

在這裏插入圖片描述

定義xml

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

文檔聲明

	簡單聲明, 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的時候,使用什麼編碼去解析。 —解碼。

電腦的文件在保存的時候並不是真正的存儲文字, 而是存儲這些文字對應的二進制 。 那麼這些文字對應的二進制到底是多少呢? 根據文件使用的編碼來得到。

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

所以要想讓我們的xml能夠正常的顯示中文,有兩種解決辦法

  1. 讓encoding也是GBK 或者 gb2312 .

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

  3. 保存的時候見到的ANSI 對應的其實是我們的本地編碼 GBK。

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

元素定義(標籤)

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

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

  3. 標籤裏面可以嵌套標籤

  4. 空標籤

    既是開始也是結束。 一般配合屬性來用。
    
    <age/>
    
    
    <stu>
    	<name>張三</name>
    	<age/>
    </stu>
    
  5. 標籤可以自定義。

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

    名稱可以含字母、數字以及其他的字符
    名稱不能以數字或者標點符號開始
    名稱不能以字符 “xml”(或者 XML、Xml)開始
    名稱不能包含空格

    命名儘量簡單,做到見名知義

簡單元素 & 複雜元素

  • 簡單元素

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

  • 複雜元素

元素裏面還可以嵌套其他的元素

屬性的定義

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


張三
18


李四
28

xml註釋:

與html的註釋一樣。

<!-- --> 
如: 	
	<?xml version="1.0" encoding="UTF-8"?>
	<!-- 
		//這裏有兩個學生
		//一個學生,名字叫張三, 年齡18歲, 學號:10086
		//另外一個學生叫李四  。。。
	 -->

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

CDATA區

  • 非法字符

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

  <   &lt;
  >   &gt;
  &   &amp;

如果某段字符串裏面有過多的字符, 並且裏面包含了類似標籤或者關鍵字的這種文字,不想讓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. 根據根元素獲取子元素或者下面的子孫元素

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MainTest {

	public static void main(String[] args) {
		// TODO 自動生成的方法存根
	
		try {
			//1.創建sax讀取對象
			SAXReader reader = new SAXReader();	
			//2.指定解析的xml源
			Document document = reader.read(new File("src/xml/demo.xml"));
			//3.得到元素
			//得到根元素
			Element rootElement = document.getRootElement();
			System.out.println(rootElement.getName());
			//獲取根元素下面的子元素的子元素
			System.out.println(rootElement.element("stu").element("age").getName());
			//獲取根元素下面的子元素的子元素的值
			System.out.println(rootElement.element("stu").element("age").getStringValue());
			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();
				System.out.println(name+" "+age);
			}
			
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}

SaxReader 創建好對象 。

Document
Element

  1. 看文檔

  2. 記住關鍵字 。

  3. 有對象先點一下。

  4. 看一下方法的返回值。

  5. 根據平時的積累。 getXXX setXXX

Dom4j 的 Xpath使用

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

  1. 添加jar包依賴

    jaxen-1.1-beta-6.jar

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

  3. 後續的代碼與以前的解析代碼一樣。

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XpathTest {

	public static void main(String[] args) {
		// TODO 自動生成的方法存根
	
		try {
			//1.創建sax讀取對象
			SAXReader reader = new SAXReader();	
			//2.指定解析的xml源
			Document document = reader.read(new File("src/xml/demo.xml"));
			//3.得到元素
			//得到根元素
			Element rootElement = document.getRootElement();
			
			//要想使用Xpath,還得添加支持的jar。獲取的是第一個,只返回一個。
			Element nameElement = (Element) rootElement.selectSingleNode("//name");
			System.out.println(nameElement.getText());
			
			//獲取文檔中的所有name元素
			List<Element> list = rootElement.selectNodes("//name");
			for(Element element : list) {
				System.out.println(element.getText());
			}
			
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}

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

    1. 引入本地的DTD

  2. 直接在XML裏面嵌入DTD的約束規則

     <!ELEMENT stu (name,age)>
     <!ELEMENT name (#PCDATA)>
     <!ELEMENT age (#PCDATA)>
    

    ]>

    張三 18
     <!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:name></aa:name>
<bb:name></bb:name>

程序架構

網頁遊戲

  • C/S(client/server)

QQ 微信 LOL

優點:

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

缺點:

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

網頁遊戲 , WebQQ …

優點:

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

缺點:

用戶體驗不佳。 

服務器

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

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://192.168.37.48:8080/xml/stu.xml
  • http://ip地址:8080/文件夾/文件

2. 配置虛擬路徑

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

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

  2. 加入以下內容。

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

3. 配置虛擬路徑

  1. 在tomcat/conf/catalina/localhost/ 文件夾下新建一個xml文件,名字可以自己定義。 person.xml

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

    <?xml version='1.0' encoding='utf-8'?>

  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

發佈了73 篇原創文章 · 獲贊 67 · 訪問量 4534
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章