JavaWeb-XML&Tomcat

總結回顧

1. JDBC 入門

2. JDBC工具類抽取 

3. CRUD 增刪查改 -- Statement


		
			//stu.getname();
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/stu", "root", "root");
			
			//2. 獲取statement對象
			Statement st = conn.createStatement();
			
			//3. 執行查詢,返回結果集
			String sql = "select * from stu";
			ResultSet rs = st.executeQuery(sql);
			
			while(rs.next()){
				String name = rs.getString("name");
				int age = rs.getInt("age");
				
				System.out.println(name +"   " + age );
			}

4. Dao模式

	定義一個接口, 定義一個實現類 , 把聲明與實現分開,放到不一樣的包下。

5. CRUD 增刪查改 -- PrepareStatement


		//stu.getname();
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/stu", "root", "root");
			
			String sql = "select * from stu where id = ?";
			
			//執行sql語句預處理
			PreparedStatement ps = conn.prepareStatement(sql);
			
			//對佔位符進行賦值
			ps.setInt(1, 10);
			
		
			//3. 執行查詢,返回結果集
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()){
				String name = rs.getString("name");
				int age = rs.getInt("age");
				
				System.out.println(name +"   " + age );
			}

Xml & Tomcat

Xml

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

XML 有什麼用?

  1. 能夠用來保存數據java

  2. 能夠用來作配置文件mysql

  3. 數據傳輸載體web

定義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的時候,使用什麼編碼去解析。 ---解碼。sql

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

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

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

  1. 讓encoding也是GBK 或者 gb2312 .tomcat

  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 中僅有字符 "<"和"&" 是非法的。省略號、引號和大於號是合法的,可是把它們替換爲實體引用是個好的習慣。

< < & &

若是某段字符串裏面有過多的字符, 而且裏面包含了相似標籤或者關鍵字的這種文字,不想讓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();
    }

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

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

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

    //要想使用Xpath, 還得添加支持的jar。selectSingleNode()獲取的是第一個 只返回一個。 
        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

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

    <!DOCTYPE stus [ <!ELEMENT stus (stu)> <!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

web服務器軟件:

* 服務器:安裝了服務器軟件的計算機
* 服務器軟件:接收用戶的請求,處理請求,作出響應
* web服務器軟件:接收用戶的請求,處理請求,作出響應。
	* 在web服務器軟件中,能夠部署web項目,讓用戶經過瀏覽器來訪問這些項目
	* web容器


* 常見的java相關的web服務器軟件:
	* webLogic:oracle公司,大型的JavaEE服務器,支持全部的JavaEE規範,收費的。
	* webSphere:IBM公司,大型的JavaEE服務器,支持全部的JavaEE規範,收費的。
	* JBOSS:JBOSS公司的,大型的JavaEE服務器,支持全部的JavaEE規範,收費的。
	* Tomcat:Apache基金組織,中小型的JavaEE服務器,僅僅支持少許的JavaEE規範servlet/jsp。開源的,免費的。


* JavaEE:Java語言在企業級開發中使用的技術規範的總和,一共規定了13項大的規範

* Tomcat:web服務器軟件
	1. 下載:http://tomcat.apache.org/
	2. 安裝:解壓壓縮包便可。
		* 注意:安裝目錄建議不要有中文和空格
	3. 卸載:刪除目錄就好了
	4. 啓動:
		* bin/startup.bat ,雙擊運行該文件便可
		* 訪問:瀏覽器輸入:http://localhost:8080 回車訪問本身
						  http://別人的ip:8080 訪問別人
		
		* 可能遇到的問題:
			1. 黑窗口一閃而過:
				* 緣由: 沒有正確配置JAVA_HOME環境變量
				* 解決方案:正確配置JAVA_HOME環境變量

			2. 啓動報錯:
				1. 暴力:找到佔用的端口號,而且找到對應的進程,殺死該進程
					* netstat -ano
				2. 溫柔:修改自身的端口號
					* conf/server.xml
					* <Connector port="8888" protocol="HTTP/1.1"
		               connectionTimeout="20000"
		               redirectPort="8445" />
					* 通常會將tomcat的默認端口號修改成80。80端口號是http協議的默認端口號。
						* 好處:在訪問時,就不用輸入端口號
	5. 關閉:
		1. 正常關閉:
			* bin/shutdown.bat
			* ctrl+c
		2. 強制關閉:
			* 點擊啓動窗口的×
	6. 配置:
		* 部署項目的方式:
			1. 直接將項目放到webapps目錄下便可。開發經常使用。
				* /hello:項目的訪問路徑-->虛擬目錄
				* 簡化部署:將項目打成一個war包,再將war包放置到webapps目錄下。
					* war包會自動解壓縮

			2. 配置conf/server.xml文件
				在<Host>標籤體中配置
				<Context docBase="D:\hello" path="/hehe" />
				* docBase:項目存放的路徑
				* path:虛擬目錄

			3. 在conf\Catalina\localhost建立任意名稱的xml文件。更爲方便。在文件中編寫
				<Context docBase="D:\hello" />
				* 虛擬目錄:xml文件的名稱
		
		* 靜態項目和動態項目:
			* 目錄結構
				* java動態項目的目錄結構:
					-- 項目的根目錄
						-- WEB-INF目錄:
							-- web.xml:web項目的核心配置文件
							-- classes目錄:放置字節碼文件的目錄
							-- lib目錄:放置依賴的jar包


		* 將Tomcat集成到IDEA中,而且建立JavaEE的項目,部署項目。

zongjie

xml

    1. 會定義xml

    2. 會解析xml

        dom4j  基本解析

        Xpath手法


tomcat

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

    2. 會設置虛擬路徑

    3. 給eclipse配置tomcat

​Dom.xml

<?xml version="1.0" ?>
<root>
	<head>
		<title>example</title>
	</head>

	<body>
		<p>p標籤</p>
		<a href="#">a標籤</a>
	</body>
</root>

MyServer

package cn.itcast.server;

import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {
	
	public static void main(String[] args) throws Exception {
		// ServerSocket 對象能夠監聽端口
		ServerSocket serversocket = new ServerSocket(8888);
		while(true) {
			Socket socket = serversocket.accept();	// 等待客戶端的鏈接請求,一旦有請求過來,就結束阻塞,返回客戶端對象
			//System.out.println(socket.getInetAddress());
			// 一旦有客戶來訪問, 就另開一個新線程去提供服務, main線程繼續等待下一個客戶的鏈接
			new Thread(new MyService(socket)).start();

		}
	}

}

MyService

package cn.itcast.server;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class MyService implements Runnable{

	private Socket socket;

	public MyService(Socket socket) throws Exception {
		this.socket = socket;
	}

	@Override
	public void run() {
		// 提供服務
		try{
			InputStream in = socket.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(in));
			String firstLine = reader.readLine();
			System.out.println(firstLine);
			String path = firstLine.split(" ")[1];
			System.out.println(path);
			// 從文件讀, 往瀏覽器寫 
			File file = new File("webapps"+path);
			FileInputStream fis = new FileInputStream(file);
			
			OutputStream os = socket.getOutputStream();
			os.write("HTTP/1.1 200 OK\r\n".getBytes());
			os.write("\r\n".getBytes());
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = fis.read(buffer))!=-1) {
				os.write(buffer, 0, len);
			}
			socket.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}	
}

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
    <constant name="struts.devMode" value="true"></constant>
	
    <constant name="struts.custom.i18n.resources" value="global"></constant>
	

</struts>
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息