1. 程式人生 > >Ajax 及裏面的XStream《黑馬程序員_超全面的JavaWeb視頻教程vedio》

Ajax 及裏面的XStream《黑馬程序員_超全面的JavaWeb視頻教程vedio》

客戶端 新的 請求 mes cit 局部刷新 查詢 數據交換格式 必須

1. ajax是什麽?
  * asynchronous javascript and xml:異步的js和xml
  * 它能使用js訪問服務器,而且是異步訪問!
  * 服務器給客戶端的響應一般是整個頁面,一個html完整頁面!但在ajax中因為是局部刷新,那麽服務器就不用再響應整個頁面!而只是數據!
    > text:純文本
    > xml:大家都熟悉!!!
    > json:它是js提供的數據交互格式,它在ajax中最受歡迎!

2. 異步交互和同步交互
  * 同步:
    > 發一個請求,就要等待服務器的響應結束,然後才能發第二個請求!中間這段時間就是一個字“卡”
    > 刷新的是整個頁面!
  * 異步:
    > 發一個請求後,無需等待服務器的響應,然後就可以發第二個請求!
    > 可以使用js接收服務器的響應,然後使用js來局部刷新!

3. ajax應用場景
  * 百度的搜索框
  * 用戶註冊時(校驗用戶名是否被註冊過)

4. ajax的優缺點
  優點:
  * 異步交互:增強了用戶的體驗!
  * 性能:因為服務器無需再響應整個頁面,只需要響應部份內容,所以服務器的壓力減輕了!

  缺點:
  * ajax不能應用在所有場景!
  * ajax無端的增多了對服務器的訪問次數,給服務器帶來了壓力!

==========================================
==========================================

ajax發送異步請求(四步操作)

1. 第一步(得到XMLHttpRequest)
  * ajax其實只需要學習一個對象:XMLHttpRequest,如果掌握了它,就掌握了ajax!!!
  * 得到XMLHttpRequest
    > 大多數瀏覽器都支持:var xmlHttp = new XMLHttpRequest();
    > IE6.0:var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    > IE5.5以更早版本的IE:var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

  * 編寫創建XMLHttpRequest對象的函數
  function createXMLHttpRequest() {
      try {
          return new XMLHttpRequest();
      } catch(e) {
          try {
          return new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
          try {
              return new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
              alert("哥們兒,你用的是什麽瀏覽器啊?");
              throw e;
          }
      }
      }
  }

2. 第二步(打開與服務器的連接)
  * xmlHttp.open():用來打開與服務器的連接,它需要三個參數:
    > 請求方式:可以是GET或POST
    > 請求的URL:指定服務器端資源,例如;/day23_1/AServlet
    > 請求是否為異步:如果為true表示發送異步請求,否則同步請求!
  * xmlHttp.open("GET", "/day23_1/AServlet", true);

3. 第三步(發送請求)
  * xmlHttp.send(null):如果不給可能會造成部份瀏覽器無法發送!
    > 參數:就是請求體內容!如果是GET請求,必須給出null。

4. 第四步()
  * 在xmlHttp對象的一個事件上註冊監聽器:onreadystatechange
  * xmlHttp對象一共有5個狀態:
    > 0狀態:剛創建,還沒有調用open()方法; 
    > 1狀態:請求開始:調用了open()方法,但還沒有調用send()方法
    > 2狀態:調用完了send()方法了;
    > 3狀態:服務器已經開始響應,但不表示響應結束了!
    > 4狀態:服務器響應結束!(通常我們只關心這個狀態!!!)
  * 得到xmlHttp對象的狀態:
    > var state = xmlHttp.readyState;//可能是0、1、2、3、4
  * 得到服務器響應的狀態碼
    > var status = xmlHttp.status;//例如為200、404、500
  * 得到服務器響應的內容1
    > var content = xmlHttp.responseText;//得到服務器的響應的文本格式的內容
    > var content = xmlHttp.responseXML;//得到服務器的響應的xml響應的內容,它是Document對象了!

  xmlHttp.onreadystatechange = function() {//xmlHttp的5種狀態都會調用本方法
      if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {//雙重判斷:判斷是否為4狀態,而且還要判斷是否為200
          // 獲取服務器的響應內容
      var text = xmlHttp.responseText;
      }
  };

==========================================
==========================================

第二例:發送POST請求(如果發送請求時需要帶有參數,一般都用POST請求)

* open:xmlHttp.open("POST" ....);
* 添加一步:設置Content-Type請求頭:
  > xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
* send:xmlHttp.send("username=zhangSan
&password=123");//發送請求時指定請求體 ========================================== ========================================== 第三例:註冊表單之校驗用戶是否註冊! 1. 編寫頁面: * ajax3.jsp > 給出註冊表單頁面 > 給用戶名文本框添加onblur事件的監聽 > 獲取文本框的內容,通過ajax4步發送給服務器,得到響應結果 * 如果為1:在文本框後顯示“用戶名已被註冊” * 如果為0:什麽都不做! 2. 編寫Servlet * ValidateUsernameServlet > 獲取客戶端傳遞的用戶名參數 > 判斷是否為itcast * 是:返回1 * 否:返回0 ========================================== ========================================== 響應內容為xml數據 * 服務器端: > 設置響應頭:ContentType,其值為:text/xml;charset=utf-8 * 客戶端: > var doc = xmlHttp.responseXML;//得到的是Document對象! ===================== 第四例:響應內容為xml數據 ========================================== ========================================== 第五例:省市聯動 1. 頁面
<select name="province"> <option>===請選擇省份===</option> </select> <select name="city"> <option>===請選擇城市===</option> </select> 2. ProvinceServlet * ProvinceServlet:當頁面加載完畢後馬上請求這個Servlet! > 它需要加載china.xml文件,把所有的省的名稱使用字符串發送給客戶端! 3. 頁面的工作 * 獲取這個字符串,使用逗號分隔,得到數組 * 循環遍歷每個字符串(省份的名稱),使用每個字符串創建一個
<option>元素添加到<select name="province">這個元素中 4. CityServlet * CityServlet:當頁面選擇某個省時,發送請求! * 得到省份的名稱,加載china.xml文件,查詢出該省份對應的元素對象!,把這個元素轉換成xml字符串,發送給客戶端 5. 頁面的工作 * 把<select name="city">中的所有子元素刪除,但不要刪除<option>===請選擇城市===</option> * 得到服務器的響應結果:doc!!! * 獲取所有的<city>子元素,循環遍歷,得到<city>的內容 * 使用每個<city>的內容創建一個<option>元素,添加到<select name="city"> ========================================== ========================================== XStream 1. 什麽作用 * 可以把JavaBean轉換為(序列化為)xml 2. XStream的jar包 * 核心JAR包:xstream-1.4.7.jar; * 必須依賴包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器); 3. 使用步驟 * XStream xstream = new XStream(); * String xmlStr = xstream.toXML(javabean); 4. 使用細節 * 別名:把類型對應的元素名修改了 > xstream.alias("china", List.class):讓List類型生成的元素名為china > xstream.alias("province", Province.class):讓Province類型生成的元素名為province * 使用為屬性:默認類的成員,生成的是元素的子元素!我們希望讓類的成員生成元素的屬性 > xstream.useAttributeFor(Province.class, "name"):把Province類的名為name成員,生成<province>元素的name屬性 * 去除Collection類型的成名:我們只需要Collection的內容,而不希望Collection本身也生成一個元素 > xstream.addImplicitCollection(Province.class, "cities"):讓Province類的名為cities(它是List類型的,它的內容還會生成元素)的成名不生成元素 * 去除類的指定成名,讓其不生成xml元素 > xstream.omitField(City.class, "description"):在生成的xml中不會出現City類的名為description的對應的元素! ========================================== ========================================== JSON 1. json是什麽 * 它是js提供的一種數據交換格式! 2. json的語法 * {}:是對象! > 屬性名必須使用雙引號括起來!單引不行!!! > 屬性值: * null * 數值 * 字符串 * 數組:使用[]括起來 * boolean值:true和false 3. 應用json * var person = {"name":"zhangSan", "age":18, "sex":"male"}; 4. json與xml比較 * 可讀性:XML勝出 * 解析難度:JSON本身就是JS對象(主場作戰),所以簡單很多 * 流行度:XML已經流行好多年,但在AJAX領域,JSON更受歡迎。 ----------------------------------- json-lib 1. 是什麽? * 它可以把javabean轉換成json串 2. jar包 * 略 3. 核心類 * JSONObject --> Map > toString(); > JSONObject map = JSONObject.fromObject(person):把對象轉換成JSONObject對象 * JSONArray --> List > toString() > JSONArray jsonArray = JSONObject.fromObject(list):把list轉換成JSONArray對象

Ajax 及裏面的XStream《黑馬程序員_超全面的JavaWeb視頻教程vedio》