1. 程式人生 > >JavaWeb08-HTML篇筆記(一)

JavaWeb08-HTML篇筆記(一)

Java

1.1 上次課內容回顧:

JDBC        :
* JDBC的概述:
    * JDBC:Java Database Connectivity
* JDBC的API:
    * Connection:連接.
        * 獲得連接.
        * 執行事務的管理.
    * Statement:
        * 執行SQL語句.
            * int executeUpdate(String sql);
            * ResultSet executeQuery(String sql);
            * boolean execute(String sql);
    * ResultSet:
        * getXXX(int idx),getXXX(String name);
* JDBC完成CRUD的操作:
連接池:
* 自定義連接池:(了解)
    * 增強一個類中的某個方法有幾種方式:
        * 繼承:
            * 控制控制這個類的構造.
       * 裝飾者模式:
            * 增強的類和被增強類實現相同的接口.
            * 在增強類中獲得被增強的類引用.
                * 接口中方法過多,增強其中一個方法,其他方法都要重寫.
        * 動態代理:
            * 被增強的類實現了接口即可.
                * 編寫代碼的時候麻煩.
* DBCP:
* C3P0:
DbUtils:工具類:
* 使用DBUtils完成CRUD的操作

1.2 案例一:使用XML作為配置文件的方式完成模擬Tomcat.1.2.1 需求:
現在有一套頁面,這套頁面想被其他人訪問到.端口號可以進行修改的-(不修改源碼的基礎上).
1.2.2 分析:1.2.2.1 技術分析:
【Java基礎的網絡編程】
【XML的概述】
? 什麽是XML:
技術分享圖片
技術分享圖片

**** 允許用戶自定義標簽的!!!
? XML的作用:
* 傳輸 和 存取數據.
* 軟件的配置文件.
? XML的使用:
* XML的語法.
【XML的語法】
? XML的基本語法:
* XML必須有關閉標簽
* 區分大小寫
* 屬性需要有引號
* 標簽必須正確嵌套.
? XML的文檔聲明
* 文檔聲明:通常出現在XML的第一行第一列的位置!!!
* 寫法:
    * <?xml 屬性名=”屬性值” 屬性名=”屬性值” ...?>
        * version        :必須的. 使用”1.0”
        * encoding        :字符集. 是使用瀏覽器打開的時候采用的默認的字符集的編碼.
        * standalone        :描述XML文檔是否需要依賴其他的文件.
? XML的註釋
* <!-- XML的註釋 -->
? XML的元素
  • 元素(標簽)的命名規範:
    技術分享圖片
    ***** 名稱中不能包含冒號(:)
    ? XML的屬性
  • 屬性的名稱規範與元素一致.
    ***** 屬性需要使用引號!
    ? XML的特殊字符和CDATA區
  • XML的特殊字符:
    技術分享圖片
  • XML的CDATA區:(CDATA:Character Data)
  • <![CDATA[ 內容 ]]>
    【XML的解析】
    ? XML的解析:從XML文檔中獲得想要的數據(通過代碼完成的.)
    ? XML的解析的方式(*****):
  • DOM解析:DOM:Document Object Model.
  • SAX解析:Simple Api for XML.
  • DOM和SAX的區別:
    技術分享圖片
    ? 針對這兩種解析的方式,不同的公司提供了不同的API的實現.
  • JAXP :SUN公司提供的一套XML的解析的API.
  • JDOM :開源組織提供了一套XML的解析的API-jdom.
  • DOM4J :開源組織提供了一套XML的解析的API-dom4j.
  • pull :主要應用在Android手機端解析XML.
    ? DOM4J的入門案例步驟:
  • 【步驟一】導入jar包.dom4j-1.6.1.jar
  • 【步驟二】創建解析器
  • 【步驟三】解析文檔獲得代表文檔的Document對象.
  • 【步驟四】獲得跟節點.
  • 【步驟五】從跟節點下查找其他的節點.
  • 代碼實現:@Test
    br/>@Test
  • 獲得元素的內容:查詢的操作.
    */
    public void demo1() throws Exception{
    // 創建解析器
    SAXReader reader = new SAXReader();
    // 解析XML的文檔
    Document document = reader.read("xml/demo1.xml");
    // 獲得跟節點
    Element root = document.getRootElement();
    System.out.println(root.getName());
    // 查找跟節點下的子節點. element() elements();
    Element pElement = root.element("person"); // 查找的是第一個person元素
    // root.elements("person").get(1); // 查找的是第二個person元素
    Element nElement = pElement.element("name");
    Element aElement = pElement.element("age");
    Element sElement = pElement.element("sex");
    System.out.println(nElement.getText());
    System.out.println(aElement.getText());
    System.out.println(sElement.getText());
    }
    ? XPath:
  • dom4j支持XPath的jar包.
    • jaxen-1.1-beta-6.jar
  • dom4j的XPath支持的API:
    • List document.selectNodes(String xPath);
    • Node document.selectSingleNode(String xPath);
  • 代碼:@Test
    br/>@Test

    • DOM4J的XPath的寫法:
      /
      public void demo2() throws Exception{
      // 創建解析器:
      SAXReader reader = new SAXReader();
      // 解析XML返回Document對象.
      Document document = reader.read("xml/demo1.xml");
      /
      List<Node> list = document.selectNodes("//name");
      for (Node node : list) {
      Element element = (Element) node;
      System.out.println(element.getText());
      }*/

          List<Node> list = document.selectNodes("//person[‘@id‘]");
          for (Node node : list) {
                  Element element = (Element) node;
                  System.out.println(element.attributeValue("id"));
          }

      }
      1.2.3 代碼實現:
      【步驟一】:將基礎班的Socket編寫的代碼復制到工程中.
      【步驟二】:新建xml.在conf/server.xml
      【步驟三】:使用DOM4J解析XML
      public class MyServer {

      public static void main(String[] args) throws Exception {
      // 解析XML:
      // 創建解析器
      SAXReader reader = new SAXReader();
      // 解析XML文檔:
      Document document = reader.read("conf/server.xml");
      Element element = (Element)document.selectSingleNode("//Connector[‘@port‘]");
      String port = element.attributeValue("port");
      // ServerSocket 對象可以監聽端口
      ServerSocket serversocket = new ServerSocket(Integer.parseInt(port));
      while(true) {
      Socket socket = serversocket.accept(); // 等待客戶端的連接請求,一旦有請求過來,就結束阻塞,返回客戶端對象
      //System.out.println(socket.getInetAddress());
      // 一旦有客戶來訪問, 就另開一個新線程去提供服務, main線程繼續等待下一個客戶的連接
      new Thread(new MyService(socket)).start();
      }
      }
      }
      1.2.4 總結:1.2.4.1 XML的約束:
      ? XML的約束的額概述:

  • 什麽是XML的約束 :就是用來約束XML的文檔中可以出現哪些標簽,不能出現哪些標簽,標簽中是否有順序,出現的次數.
  • XML的約束 :用來規範XML的寫法.
    ***** XML的約束的種類及區別?
    • DTD 和 Schema :
      • 區別:
        1.DTD語法是自成一體的.Schema語法就是XML的語法.
        2.Schema的語法就是XML的語法所以更容易被解析器所解析.
        3.Schema支持名稱空間.
        4.Schema有比DTD更加強大的語義和語法的約束.
        ? DTD的語法 :(了解)
  • DTD的引入方式:

    • 內部的DTD:
      <!DOCTYPE persons [

    ]>

    • 外部的DTD:
      • 一種本地DTD:
        <!DOCTYPE persons SYSTEM "unknown.dtd">
      • 一種網絡DTD:
        <!DOCTYPE persons PUBLIC "//UNKNOWN/" "unknown.dtd">
  • DTD的語法:

    • 元素:

      • <!ELEMENT 元素名 元素類型>
        • 元素類型:
          • EMPTY
          • ANY
          • 子元素
            • 是否有序: 使用 逗號(,)或者豎線(|)表示.
            • 出現的次數:?:零次或一次 +:一次或多次 *:零次或多次
          • PCDATA
            • 屬性:
            • <!ATTLIST 元素名稱 屬性名稱 屬性的類型 屬性的約束>
            • 屬性的類型:
            • ID類型:表示屬性值需要是唯一的.
            • CDATA類型:普通的字符串.
            • 枚舉:
            • 屬性的約束:
              技術分享圖片
              ? Schema的語法:(了解)
              <?xml version="1.0" encoding="UTF-8"?>

          JavaWeb08-HTML篇筆記(一)