<%@ page contentType="text/html; charset=gb2312"%> 如何让JSON穿梭在服务器于浏览器之间
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
如何让JSON穿梭在服务器于浏览器之间
     发布者: 发布时间:2008-03-12
一个新的轮子,现在网络上充斥这一大堆的轮子.我也做了一个.一半是研究,一半是想做给自己用
目前实现的功能
1JSON转换成java对象(按一定的规则提交)
什么意思呢,就是你能够将你在浏览其中提交的JSON直接转换成一个java对象供应用程序调用

2java对象转换成JSON
可以将servlet中的java对象转换成一个JSON对象给浏览器中的js调用,而如果在浏览器中调用这个JSON的一些方法.那么调用的其实就是java对象的方法,那么就相当于你在servlet中调用了这个java对象的方法.
举个简单的例子:
java对象的定义代码
Java代码复制代码
  1.   public class  testObject    
  2.   {            
  3.   String prot1;   
  4.   String showProt1()   
  5.   {   
  6.       //在控制台输出prot1的值  
  7.    System.out.println(prot1);   
  8.    //返回prot1的值  
  9.    return prot1;   
  10.   }   
  11.   void setProt1(String prot1)   
  12.   {   
  13.    this.prot1 = prot1;   
  14.   }   
  15.   void String getProt1()   
  16.   {   
  17.    return prot1;   
  18.   }   
  19. }   

实例化java对象并将其提供给浏览器获取的java代码
Java代码复制代码
  1. //实例化对象  
  2. testObject to = new testObject();   
  3. //提供对象给浏览器调用  
  4. //第一个参数为浏览器中获取java对象对应的JSON对象的别名  
  5. //意思就是在浏览器里可以通过$ha.getObject("testObject")来获得to对象的JSON代码  
  6. this.putReturnObject("testObject",to);   

通过上面的简单代码你就可以通过以下的语句来采用hocate框架获得testObject对象的实例to的JSON映射
js代码:
Java代码复制代码
  1. var JSTO = $ha.getObject("testObject");  

接着你可以通过调用JSTO.prot1来获取java对象中prot1中的值
也可以通过var prot1 = JSTO.showProt1();来获得,接着你会看到你的servlet的控制台会有prot1的值的输出,实际上
他是在你的servlet中调用了to对象的showProt1方法(to.showProt1()).
那么就实现了在脚本中编写对java对象的操作的代码和在java程序里编写对java对象操作的代码相同的目的

3浏览器中的简单引用
实际应用中不需要想DWR或者其他框架那样引用一个java对象的js脚本,而是你在servlet中配置好相应的要为浏览器提供的java对象,
就可以通过$ha.getObject来完成对象的获取.并可以直接使用和java对象相同的方法,总的来说编码的过程中是不需要引用特定脚本的.

4对属性的绑定.
在使用的过程中你可以通过为任意Form标签或者Form内的可输入标签增加bind属性将这些标签中的值绑定到相应的JSON对象上.
例如你有一个登陆form,需要提供username,password两个参数
那么你可以使用为form标签增加bind属性将其绑定到一个特定的JSON对象上
或者为form中的<input>标签增加bind属性将其绑定到一个特定的JSON对象的一个特定的属性上
例子:
登陆java对象的定义
Java代码复制代码
  1. public class  loginData    
  2. {            
  3. String username;   
  4. String password两个参数;   
  5. //省略若干set/get方法......  

实例化java对象并将其提供给浏览器获取的java代码
Java代码复制代码
  1. //实例化对象  
  2. loginData ld = new loginData();   
  3. //提供对象给浏览器调用  
  4. //第一个参数为浏览器中获取java对象对应的JSON对象的别名  
  5. //意思就是在浏览器里可以通过$ha.getObject("loginData")来获得ld对象的JSON代码  
  6. this.putReturnObject("loginData",ld);   

如果你的这个JSON对象是通过$ha.getObject获得的那么你就可以在页面中通过bind属性的自动绑定够能修改这个
JSON中的数据,而将这个JSON提交到servlet中的时候就会相应的修改servlet中的java对象的值.你所要做的就是
$ha.getObject获取对象,然后bind值,然后将这个JSON提交出去.
js代码获得一个java对象loginData的JSON实例
Java代码复制代码
  1. var loginData = $ha.getObject("loginData");   

页面代码
Java代码复制代码
  1. <form bind="loginData">   
  2.     <input id="username" type="text">   
  3.     <input id="password" type="password">   
  4. </form>   

那么实际使用中当用户在id为username的input元素上输入数据的时候会相应的修改JSON对象loginData中username中的数据
那么在登陆的时候就可以直接发送loginData这个JSON对象给服务器,那么在服务器中你就可以获得一个实例化好的loginData的java对象

5自动验证体系
对EMail.数字.等等的自动验证
<input name="text2" type="text" id="validate" datatype="Email" autovalidate="true" />
通过增加datatype属性和autovalidate属性
那么在提供$hv.error和$hv.correct的callback函数可以自动的验证客户的输入是否合法
这两个回调函数都回传入一个参数,那个就是被验证对象的ID属性
Java代码复制代码
  1. //验证函数  
  2. $hv.error = function(v1)   
  3. {   
  4.     alert(v1+"中的参数不正确!");   
  5. }   
  6. $hv.correct = function(v1)   
  7. {   
  8.     alert(v1+"中的参数正确!");   
  9. }   
  10.    

当用户输入的数据为合法的Email字符串的时候,就会调用$hv.correct中的回调函数,接着弹出一个提示框显示提示.
当用户输入的数据为非法的Email字符串的时候,就会调用$hv.error中的回调函数,接着弹出一个提示框显示提示.
而你也可以通过$hv.validated('validate')的方法来手工验证数据.

6JSON对象的调用验证
这里所说的JSON对象是指你用servlet中获得的java对象的一个JSON映射
例子请参照(2)中的那个例子.
由于java对参数的要求是很严格的.所以参数类型必须符合定义中的规范
而通过JSON提交上去的参数如何验证呢?
hocate ajax框架提供了客户端的验证能力
1 验证参数类型是否正确
2 验证参数个数是否正确
例如(2)中的例子
调用JSTO.setProt1(...)方法
如果你提供里一个JSTO.setProt1()无参数调用,那么在验证参数个数的时候就会在浏览器中报错,因为这个方法是需要一个String作为参数的
如果你提供JSTO.setProt1(Object)调用就会验证你的这个Object是否是String类型如果不是会报错.

7为参数提供对象支持
例如有个从服务器获取的JSON对象test有一个方法setObject(testObject kkk),其中testObject是一个我们自己定义的java类.
那么如何提交调用这个方法呢,在java中他传入的是一个java对象啊.
我们可以通过var to = $hv.getObject('testObject');来获得一个testObject对象在浏览器中的JSON映射,接着我们用js为其填
入相应的值.
最后在调用方法的时候test.setObject (to);就可以将这个to对象提交到servlet中,servlet会自动把它转换成一个java的testObject对象供编程使用

不知道这个轮子大家满意不.我只是针对自己的使用习惯做了相应的功能开发.
大家提提意见
演示地址:http://www.hocate.org/ajaxdemo
代码和引用的包请到svn://www.hocate.org/hocate/中checkout
/src/ajax-js中是需要引用的js库
/hocate.jar是需要在java项目中引用的java包

TAG:
JSON



(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
Python AJAX Server
Python AJAX Server
JFreeChart综合应用
解决ajax 提交中文后的乱码问题
Java和JSP编程应该注意的六个常见问题
基础:Java初学者都必须理解的六大问题
 
最近评论:
        
鍥炲
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号