JAVA

          人生若只如初見,何事秋風悲畫扇。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            50 隨筆 :: 25 文章 :: 157 評論 :: 0 Trackbacks
          好久沒有做過關于AJAX的東西了,平時做的也無非就是通過XHP要么用GET(請求部分是追加到URL中的并且瀏覽器對其長度有會有限制)方法要么通過POST(請求參數內容可以放到請求體中并且無量的限制)方法。傳遞的無非是些參數值(以名=值的方式出現as : name=jkallen)要么就是DOM對象了。再發到到服務端后做些處理再返回到客戶端顯示對應結果。

          今天看到了一個好東東,就是通過JSON(JavaScript Object Notation)向服務器發送數據。它是一種輕量級的數據交換格式,使用了類似于C語言家族的習慣。


          JSON具有以下這些形式:

          a :??對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。

          b:?? 數組是值(value)的有序集合。一個數組以“[”(左中括號)開始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔。

          c:?? 值(value)可以是雙引號括起來的字符串(string)、數值(number)、 ture、false、 null、對象(object)或者數組(array)。這些結構可以嵌套。

          d:?? 字符串(string)是由雙引號包圍的任意數量Unicode字符的集合,使用反斜線轉義。一個字符(character)即一個單獨的字符串(character string)。

          不多說了,關于JSON其實在 www.json.org 上講得太好了!上面不但有每個JAVA的源文件,而且每個文件都有與之對應的JAVA DOC!還有不少實例!

          我就選了json in java? and? json in javascript 二個鏈接?,從這二個地方可以下到JSON的javascript包和Java包。

          Javascript 包的應用如下:

          首先創建一個符合json的對象,并通過XHP發送到sever

          < script?type = " text/javascript " ?src = " json.js " ></ script >
          < script?type = " text/javascript " >

          var ?xmlHttp;

          function ?createXMLHttpRequest()? {
          ????
          if ?(window.ActiveXObject)? {
          ????????xmlHttp?
          = ? new ?ActiveXObject( " Microsoft.XMLHTTP " );
          ????}
          ?
          ????
          else ? if ?(window.XMLHttpRequest)? {
          ????????xmlHttp?
          = ? new ?XMLHttpRequest();
          ????}

          }

          ????
          function ?doJSON()? {
          ????
          var ?car? = ?getCarObject();
          ????
          ????
          // Use?the?JSON?JavaScript?library?to?stringify?the?Car?object
          ???? var ?carAsJSON? = ?JSON.stringify(car);
          ????alert(
          " Car?object?as?JSON:\n? " ? + ?carAsJSON);
          ????
          ????
          var ?url? = ? " JSONExample?timeStamp= " ? + ? new ?Date().getTime();
          ????
          ????createXMLHttpRequest();
          ????xmlHttp.open(
          " POST " ,?url,? true );
          ????xmlHttp.onreadystatechange?
          = ?handleStateChange;
          ????xmlHttp.setRequestHeader(
          " Content-Type " ,? " application/x-www-form-urlencoded " );????
          ????xmlHttp.send(carAsJSON);
          }

          ????
          function ?handleStateChange()? {
          ????
          if (xmlHttp.readyState? == ? 4 )? {
          ????????
          if (xmlHttp.status? == ? 200 )? {
          ????????????parseResults();
          ????????}

          ????}

          }


          function ?parseResults()? {
          ????
          var ?responseDiv? = ?document.getElementById( " serverResponse " );
          ????
          if (responseDiv.hasChildNodes())? {
          ????????responseDiv.removeChild(responseDiv.childNodes[
          0 ]);
          ????}

          ????
          ????
          var ?responseText? = ?document.createTextNode(xmlHttp.responseText);
          ????responseDiv.appendChild(responseText);
          }


          function ?getCarObject()? {
          ????
          return ? new ?Car( " Dodge " ,? " Coronet?R/T " ,? 1968 ,? " yellow " );
          }


          function ?Car(make,?model,?year,?color)? {
          ????
          this .make? = ?make;
          ????
          this .model? = ?model;
          ????
          this .year? = ?year;
          ????
          this .color? = ?color;
          }


          </ script >

          那個json.js就是我們下下來的包啦!

          我們再看看在server端的處理

          package ?ajaxbook.chap3;

          import ?java.io. * ;
          import ?java.net. * ;
          import ?java.text.ParseException;
          import ?javax.servlet. * ;
          import ?javax.servlet.http. * ;
          import ?org.json.JSONObject;

          public ? class ?JSONExample? extends ?HttpServlet? {
          ????
          ????
          protected ? void ?doPost(HttpServletRequest?request,?HttpServletResponse?response)
          ????
          throws ?ServletException,?IOException? {
          ????????String?json?
          = ?readJSONStringFromRequestBody(request);
          ????????
          ????????
          // Use?the?JSON-Java?binding?library?to?create?a?JSON?object?in?Java
          ????????JSONObject?jsonObject? = ? null ;
          ????????
          try ? {
          ????????????jsonObject?
          = ? new ?JSONObject(json);
          ????????}

          ????????
          catch (ParseException?pe)? {
          ????????????System.out.println(
          " ParseException:? " ? + ?pe.toString());
          ????????}

          ????????
          ????????String?responseText?
          = ? " You?have?a? " ? + ?jsonObject.getInt( " year " )? + ? " ? "
          ????????????
          + ?jsonObject.getString( " make " )? + ? " ? " ? + ?jsonObject.getString( " model " )
          ????????????
          + ? " ? " ? + ? " ?that?is? " ? + ?jsonObject.getString( " color " )? + ? " ?in?color. " ;
          ????????
          ????????response.setContentType(
          " text/xml " );
          ????????response.getWriter().print(responseText);
          ????}


          ????
          private ?String?readJSONStringFromRequestBody(HttpServletRequest?request) {
          ????????StringBuffer?json?
          = ? new ?StringBuffer();
          ????????String?line?
          = ? null ;
          ????????
          try ? {
          ????????????BufferedReader?reader?
          = ?request.getReader();
          ????????????
          while ((line? = ?reader.readLine())? != ? null )? {
          ????????????????json.append(line);
          ????????????}

          ????????}

          ????????
          catch (Exception?e)? {
          ????????????System.out.println(
          " Error?reading?JSON?string:? " ? + ?e.toString());
          ????????}

          ????????
          return ?json.toString();
          ????}

          }


          那個不起眼的org.json.JSONObject就是我們從JSON.ORG上下下來的JAVA包!它上面也有JSONObject的JAVA DOC所以不用擔心不知道用啦!

          OK到此全部搞定啦!

          可以看到這樣比我們平時通過XHP傳遞一個DOM對象(通過連接串來創建XML串)要方便些!再說通過連接串來處理也不是生成XML數據結構的健壯技術!

          參考資料
          foundations-of-ajax
          ????????????????????
          www.json.org

          相關鏈接:? Ajax---與服務器通信(請求參數作為XML發送)
          posted on 2006-03-28 22:28 Jkallen 閱讀(18137) 評論(9)  編輯  收藏 所屬分類: AJAX

          評論

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2006-03-29 08:58 JeffChen
          MARK!  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應)[未登錄] 2007-08-24 23:35 duma
          出自:< foundations of ajax>  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2008-01-13 11:20 link
          怎么判斷服務器沒有響應IE的請求啊?
          因為我要寫一個簡單的程序,向服務器發請求,是向服務器要圖片,偶爾會出現叉叉,我想客戶端這里應該是發出了請求的,只是服務器沒有響應罷了。為了呈現給用戶看起來舒服,我想判斷如果服務器沒相應,客戶端圖片就不要換了,這樣就不會出現紅叉叉。給用戶造成一種假象
          請問怎么解決阿?  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2008-06-06 10:58 3wdotec
          有沒有php版本的呀  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2008-06-20 23:34 easyranger
          你這個沒有實現cross-domain的啊  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2008-10-24 18:23 why
          我用這個程序的時候發現不能識別JSON對象,這是什么原因?請您幫幫忙  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2008-12-14 18:04 1分錢
          好東西啊,支持  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2009-01-06 16:31 33
          44  回復  更多評論
            

          # re: Ajax---通過JSON與服務器通信(發送請求和處理響應) 2009-08-29 15:10 小勇
          在服務器端只要Json這一個包就行了嗎?  回復  更多評論
            

          主站蜘蛛池模板: 榆中县| 阿坝| 苏尼特左旗| 彭山县| 内乡县| 阜宁县| 金乡县| 玉门市| 通化县| 珲春市| 铜山县| 宁海县| 乌拉特前旗| 南康市| 宣城市| 永清县| 金秀| 广汉市| 通海县| 湖北省| 颍上县| 星子县| 延庆县| 蒲江县| 灵璧县| 青海省| 确山县| 石景山区| 资阳市| 密云县| 河源市| 冀州市| 通城县| 班戈县| 瓦房店市| 绍兴县| 建阳市| 徐汇区| 永吉县| 平陆县| 河间市|