阅读更多

25顶
4踩

Web前端
如何让JSON穿梭在服务器于浏览器之间
一个新的轮子,现在网络上充斥这一大堆的轮子.我也做了一个.一半是研究,一半是想做给自己用
目前实现的功能
1 JSON转换成java对象(按一定的规则提交)
  什么意思呢,就是你能够将你在浏览其中提交的JSON直接转换成一个java对象供应用程序调用
 
2 java对象转换成JSON
  可以将servlet中的java对象转换成一个JSON对象给浏览器中的js调用,而如果在浏览器中调用这个JSON的一些方法.那么调用的其实就是java对象的方法,那么就相当于你在servlet中调用了这个java对象的方法.
  举个简单的例子:
     java对象的定义代码
    
     public class  testObject 
     {         
		   String prot1;
		   String showProt1()
		   {
		       //在控制台输出prot1的值
			   System.out.println(prot1);
			   //返回prot1的值
			   return prot1;
		   }
		   void setProt1(String prot1)
		   {
			   this.prot1 = prot1;
		   }
		   void String getProt1()
		   {
			   return prot1;
		   }
	  }
	  

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

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

      接着你可以通过调用JSTO.prot1来获取java对象中prot1中的值
      也可以通过var prot1 = JSTO.showProt1();来获得,接着你会看到你的servlet的控制台会有prot1的值的输出,实际上
      他是在你的servlet中调用了to对象的showProt1方法(to.showProt1()).
      那么就实现了在脚本中编写对java对象的操作的代码和在java程序里编写对java对象操作的代码相同的目的
     
浏览器中的简单引用
   实际应用中不需要想DWR或者其他框架那样引用一个java对象的js脚本,而是你在servlet中配置好相应的要为浏览器提供的java对象,
   就可以通过$ha.getObject来完成对象的获取.并可以直接使用和java对象相同的方法,总的来说编码的过程中是不需要引用特定脚本的.

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

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

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

页面代码
		<form bind="loginData">
			<input id="username" type="text">
			<input id="password" type="password">
		</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属性
  
		//验证函数
		$hv.error = function(v1)
		{
			alert(v1+"中的参数不正确!");
		}
		$hv.correct = function(v1)
		{
			alert(v1+"中的参数正确!");
		}
   

   当用户输入的数据为合法的Email字符串的时候,就会调用$hv.correct中的回调函数,接着弹出一个提示框显示提示.
   当用户输入的数据为非法的Email字符串的时候,就会调用$hv.error中的回调函数,接着弹出一个提示框显示提示.
   而你也可以通过$hv.validated('validate')的方法来手工验证数据.
  
6 JSON对象的调用验证
  这里所说的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包
25
4
评论 共 10 条 请登录后发表评论
10 楼 lutao050306 2011-01-11 17:31
[img][/img]dddfdfssdsfdfdddfsfddddfd
9 楼 spp_1987 2010-07-20 15:41
  不错。 努力
8 楼 spp_1987 2010-07-20 09:14
最好用到jquery.form.js这个jquery插件
7 楼 spp_1987 2010-07-20 09:14
纠结,不是很明白 json 怎么来回在服务端和客户端穿梭???

楼主来完整 简单明了的代码来说明呗
6 楼 highill 2010-04-09 09:39
引用

public class  testObject   
  {           
  String prot1;  
  String showProt1()  
  {  
      //在控制台输出prot1的值  
   System.out.println(prot1);  
   //返回prot1的值  
   return prot1;  
  }  
  void setProt1(String prot1)  
  {  
   this.prot1 = prot1;  
  }  
  void String getProt1()  
  {  
   return prot1;  
  }  
}  



我是新人,问一下这是Java代码么?
如果是的话,类名首字母应该大些,而且void方法应该没有返回值的,只是感觉不想json代码
5 楼 zhouzhigang 2008-09-10 20:41
[img]svn://www.hocate.org/hocate/中checkout
/src/ajax-js[/img]
4 楼 victorxiang 2008-04-29 12:51
[img][/img][url][/url][flash=200,200][/flash]
3 楼 java小人物 2008-03-16 20:50
我看不错,做的挺好,代码也不错.效率也还可以,就是不知道稳定性怎么样?
2 楼 fins 2008-03-12 13:39
这算新闻吗?? 

不应该发到新闻频道吧 
1 楼 zhujinju 2008-03-10 15:38
与其发明轮子不如研究轮子,再超过轮子

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • spring boot整合mybatis利用Mysql实现主键UUID的方法

    主要给大家介绍了关于spring boot整合mybatis利用Mysql实现主键UUID的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

  • 深耕MySQL - 使用UUID作为主键会有什么问题?

    使用UUID主键插入行不仅花费的时间更长,而且索引占用的空间页更大。这一方面是由于主键字段更长,另一方面是由于页分裂和碎片导致的。 因为主键的值时顺序的,所以InnoDB把每一条记录都存储在上一条记录的后面,当...

  • Mysql 使用UUID 作为主键的分析

    前置条件 Mysql innodb存储引擎 一:为什么使用UUID UUID 是 通用唯一识别码(Universally Unique Identifier)...UUID 便于生成,不会重复,在分布式架构的系统中,很常见,但对于使用了mysql innodb 存储引擎来说,U

  • mysql uuid 做主键_MySQL UUID做主键

    我唯一还算熟悉的数据库就算是MySQL了,大概使用MySQL的人,百分之九九以上的人会使用Autoincrement ID做主键,这是可以理解的,因为MySQL的自增ID效率很高,使用也很方便。那么剩下的百分之一的人使用什么做主键呢...

  • 【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比

    在MySQL中,有些开发者倾向于使用UUID(Universally Unique Identifier)或者雪花ID作为主键,以确保数据的唯一性。然而,这种做法并不总是推荐的,因为它们在性能、存储空间和索引效率等方面存在一些问题。本文将...

  • 使用uuid做MySQL主键,被老板,爆怼一顿

    前言:在mysql中设计表的时候,mysql官方推荐...一:mysql和程序实例1.1:要说明这个问题,我们首先来建立三张表,分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,

  • mysql插入时主键id为uuid_MySQL数据库实现自动使用uuid作为主键以及解决不能调用触发器的一点思路...

    本文主要向大家介绍了MySQL数据库实现自动使用uuid作为主键以及解决不能调用触发器的一点思路 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。&lt;这里使用触发程序实现此功能.触发程序语法如下:...

  • MySql为什么不推荐使用UUID做主键

    mysql官方推荐不要使用uuid或者不连续不重复的雪花id,推荐连续自增的主键id,官方的推荐是auto_increment。为什么不建议采用uuid,使用uuid究竟有什么坏处? 如果设计表不设置主键,MySQL官方有以下说明: If ...

  • 使用uuid做MySQL主键,被老板,爆怼一顿!

    作者:Java码农链接:https://www.jianshu.com/p/512f626b2a8d前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_...

  • MySQL不建议使用UUID作为主键的原因

    以前只知道UUID不适合作为主键,但是不知道具体原因,最近做了了解,在此做一个记录 索引 我们先了解一下mysql索引的数据结构,mysql在innodb的存储引擎下是使用B+树来做为索引的数据结构的,而一个表最终必定会创建...

  • 分布式mysql uuid主键_为什么分布式数据库中不使用uuid作为主键?

    分布式数据库当然也有主键的需求,但是为什么不直接使用uuid作为主键呢?作为曾经被这个问题困惑过的人,试着回答一下1. UUID生成速率低下Java的UUID依赖于SecureRandom.nextBytes方法,而SecureRandom又依赖于操作...

  • mysql 自动维护uuid_MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路...

    这里使用触发程序实现此功能.触发程序语法如下:Create trigger {before|after}{insert|update|delete}On For each row核心代码:use t14testshow tablesdrop table if exists uuidTestcreate table uuidTest(testId ...

  • 你还在使用UUID 作为mysql 主键索引?

    记得当初学习数据库的时候知道我们需要建立一列来作为... 由于工作慢慢接触sql优化,提到sql 优化可能大家最先想到的就是“索引”,有一句话这么说:”合理的设计且使用索引的mysql 是一辆超跑,没有设计和使用索...

  • 使用UUID作为MySQL主键的限制及替代方案

    如果您决定使用UUID作为主键,请考虑使用UUID_SHORT函数、自增长整数和UUID的组合,或者数据库生成的UUID作为替代方案。这意味着当使用UUID作为主键时,数据在磁盘上的物理排序可能会变得混乱,从而导致随机IO操作...

  • 使用UUID作为MySQL主键:一个实用的选择

    通过使用这样的标识符作为主键,我们可以消除主键冲突的可能性,并且可以在多个数据库实例之间同步数据,而不需要在插入数据之前...然而,在具体的应用场景中,需要根据数据的特点和性能要求来权衡使用UUID主键的利弊。

  • mysql int 主键_MySQL UUID 与 INT 作为主键的比较

    MySQL UUID简介UUID代表通用唯一标识符。UUID是基于”RFC 4122“通用唯一标识符(UUID)URN命名空间”)定义的。UUID被设计为在空间和时间全球独一无二的数字。 预期两个UUID值是不同的,即使它们在两个独立的服务器上...

  • MySQL主键和uuid_MySQL UUID和主键

    本教程将向您介绍MySQL UUID,并演示如何将其用作表的主键(PK),并讨论将其用作主键的优缺点。MySQL UUID简介UUID代表通用唯一标识符。UUID是基于”RFC 4122“通用唯一标识符(UUID)URN命名空间”)定义的。UUID被设计...

  • mysql插入时主键id为uuid_MySQL 用 UUID 作为主键,实际使用中有什么问题

    由于没有在大规模的生产环境中这样用过,虽然搜索了关于 MySQL UUID 主键的优劣势文章,但毕竟案例还是太少,很多还停留在性能测试阶段。论坛中是否有朋友在生产环境中采用过 ActiveRecord + MySQL UUID 主键的方案...

  • 果壳处理器研究小组(Topic基于RISCV64果核处理器的卷积神经网络加速器研究)详细文档+全部资料+优秀项目+源码.zip

    【资源说明】 果壳处理器研究小组(Topic基于RISCV64果核处理器的卷积神经网络加速器研究)详细文档+全部资料+优秀项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics