前后台交互传值

  • 时间:2018-08-12 22:54 作者:程序员小新人学习 来源:程序员小新人学习 阅读:584
  • 扫一扫,手机访问
摘要:一.简析前后台交互java语言是一种强类型的语言,必需定义类型,而后生成实例,而js却不是,尽管它也是面向对象的,但是它并没有先定义类这一种概念(但是js也有类型),它是基于原型的一种模式,和java完全不同。很显然,二者的原理,机制,语法并不能兼容。二者产生的对象并不能被对方解读。再来看网络传输,

一.简析前后台交互

java语言是一种强类型的语言,必需定义类型,而后生成实例,而js却不是,尽管它也是面向对象的,但是它并没有先定义类这一种概念(但是js也有类型),它是基于原型的一种模式,和java完全不同。很显然,二者的原理,机制,语法并不能兼容。二者产生的对象并不能被对方解读。再来看网络传输,通常就是http/tcp协议喽,用的其实是请求-响应,再说白了即便字符串,不管后端传来的是什么类型的数据,也不管前端传回的什么类型的数据,网络层统统当作字符串解决。

因而,前后台进行数据交互之前,它们各自都要完成一个转换过程,把要发送的转换成字符串,把要收到的字符串解析成自己的对象。由于传输的字符串会涉及前后端双方的解析和解决,所以双方都必需认识或者者知道字符串该怎样转,也就是说,最好能有一种通使用的规则来编辑,转换字符串,这个标准或者者协议就是JSON,JSON就是使用来交换数据的,是一种string,一种独立于平台的数据格式。

1,在js中,可以用JSON.stringify()函数,把一个js中的对象转成json的string,也可以用JSON.parse()函数,把一个json的string转成一个js里的对象。

2,在java中,有JSONObject和JSONArray两个对象,转string就使用它们的toString()函数,转对象,就使用toBean()和toArray()函数。需要注意的是JSONObject必需是string的键。

最后来看一下异步函数,常使用的就是$.post()。往后端传参数的时候,使用的是一个键值对,也就是该函数的第二个参数,里面的值按照之前的说法,先转为string,那么我这里js定义了一个对象obj,要把它传到后端,先使用stringify函数解决才行。

$.post(url,{"param1":JSON.stringify(array)},function(data){

var a = JSON.parse(data);

$.each(a, function(index, val){

alert(val);

});

},"json");

当从后端取数据时,最后一个参数type很重要,我们知道最开始的时候,js接到的参数肯定是一个string(通过网络传来的),$.post的最后一个参数就是决定js接下来怎样解决收到的参数,是当作一个string还是一个对象,取决于type的值,假如是对象,那么就设置为“json”,它会按照json格式来转换对象,不填的话默认是string,把它当作字符串来解决。设置text也当做字符串解决。

二.@responseBody注解的用

@responseBody注解的作使用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常使用来返回JSON数据或者者是XML

数据,需要注意的呢,在用此注解之后不会再走视图解决器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

@RequestMapping("/login")

@ResponseBody

public User login(User user){

return user;

}

User字段:userName pwd

那么在前端接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

效果等同于如下代码:

@RequestMapping("/login")

public void login(User user, HttpServletResponse response){

response.getWriter.write(JSONObject.fromObject(user).toString());

}

@ResponseBody注解最终将返回值转为json对象的字符串的形式。

三.@RequestParam注解

在此之前,写项目一直使用的是@RequestParam(value="aa" required=false)这个注解。

1、可以对传入参数指定参数名

@RequestParam String inputStr // 下面的对传入参数指定为aa,假如前台不传aa参数名,会报错

@RequestParam(value="aa") String inputStr

2、可以通过required=false或者者true来要求@RequestParam配置的前台参数能否肯定要传

// required=false表示不传的话,会给参数赋值为null,required=true就是必需要有

@RequestMapping("testRequestParam")

public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)

3、假如@requestParam注解的参数是int类型,并且required=false,此时假如不传参数的话,会报错。起因是,required=false时,不传参数的话,会给参数赋值null,这样就会把null赋值给了int,因而会报错。

// required=false表示不传的话,会给参数赋值为null,required=true就是必需要有

@RequestMapping("testRequestParam")

public String filesUpload(@RequestParam(value="aa", required=false) int inputStr, HttpServletRequest request)

若是前台页面不传参的话,此处就会报错。当然可以使用Integer代替int

前后台交互传值

  • 全部评论(0)
最新发布的资讯信息
【系统环境|windows】字节跳动前台面试题解析:盛最多水的容器(2021-03-20 21:27)
【系统环境|windows】DevOps敏捷60问,肯定有你想理解的问题(2021-03-20 21:27)
【系统环境|windows】字节跳动最爱考的前台面试题:JavaScript 基础(2021-03-20 21:27)
【系统环境|windows】JavaScript 的 switch 条件语句(2021-03-20 21:27)
【系统环境|windows】解决 XML 数据应用实践(2021-03-20 21:26)
【系统环境|windows】20个编写现代CSS代码的建议(2021-03-20 21:26)
【系统环境|windows】《vue 3.0探险记》- 运行报错:Error:To install them, you can run: npm install --save core-js/modules/es.arra...(2021-03-20 21:24)
【系统环境|windows】浅谈前台可视化编辑器的实现(2021-03-20 21:24)
【系统环境|windows】产品经理入门迁移学习指南(2021-03-20 21:23)
【系统环境|windows】初识webRTC(2021-03-20 21:23)
手机二维码手机访问领取大礼包
返回顶部