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 阅读(18109) 评论(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这一个包就行了吗?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: