Spring MVC框架:第十一章:Ajax

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: Spring MVC框架:第十一章:Ajax

Ajax

Ajax程序和服务器数据传输

在进行Ajax操作时,SpringMVC会需要将JSON数据和Java实体类进行相互转换,为了实现这个效果需要额外加入jackson-all-1.9.11.jar

1.从浏览器发送数据给handler方法

1请求参数分散提交

页面:

<button id="btn1">实验1:发送零散数据</button>

jQuery:

<script type="text/javascript" src="${pageContext.request.contextPath }/jQuery/jquery-3.2.1.js"></script>
<script type="text/javascript">
  $(function(){
    $("#btn1").click(function(){
      //实验1:发送零散数据
      //请求地址
      var url = "${pageContext.request.contextPath }/one";
      //请求参数
      var param = {"empId":20,"userName":"tom","random":Math.random()};
      //服务器端成功返回响应后的回调函数
      var callBack = function(response){
        console.log(response);
      };
      //服务器端返回的响应体数据的解析方式
      var type = "text";
      //发送POST方式的Ajax请求
      $.post(url, param, callBack, type);
    });
  });
</script>

handlers:

//@ResponseBody表示使用handler方法的返回值作为响应体,不再前往任何一个视图
  @ResponseBody
  //使用produces="text/html;charset=UTF-8"设置解决响应数据乱码问题
  //如果是JSON数据内容类型是:application/json
  @RequestMapping(value="/one",produces="text/html;charset=UTF-8")
  public String one(
        @RequestParam("empId") Integer empId, 
        @RequestParam("userName") String userName) {
    System.out.println("empId="+empId);
    System.out.println("userName="+userName);
    return "执行成功!!!";
  }

在这个例子中,handler方法接收数据和之前是没有什么区别的,新的知识点是@ResponseBody注解。这个注解的作用是把当前handler方法的返回值直接作为响应数据返回给浏览器而不是进行视图名称的解析。

2发送对应POJO的数据

页面:

<button id="btn2">实验2:发送对应POJO的数据</button>

jQuery:

$("#btn2").click(function(){
    //实验2:发送对应POJO的数据
    var url = "${pageContext.request.contextPath }/two";          
    var param = {
        "stuId":5,
        "stuName":"jerry",
        "stuSubject":"java",
        "random":Math.random()
      };          
    var callBack = function(response){
      console.log(response);
    };          
    var type = "text";          
    //发送POST方式的Ajax请求
    $.post(url, param, callBack, type);
});

handlers:

@ResponseBody
  @RequestMapping(value="/two",produces="text/html;charset=UTF-8")
  public String two(Student student) {
    System.out.println(student);
    return "执行成功!!!";
  }

这里又用到了@RequestBody注解,它的作用是把请求体中的JSON数据转换成我们指定的数据类型。同时在@RequestMapping注解上我们额外增加了produces属性用来指定响应体数据的编码方式,以此来解决响应数据的字符乱码问题。

大家可以记住这个结论:使用@ResponseBody返回响应数据时,需要在@RequestMapping注解中使用produces="application/json;charset=UTF-8"来解决字符集问题。

3发送JSON请求体

<button id="btn3">实验3:发送JSON请求体</button>

jQuery:

$("#btn3").click(function(){
  //1.创建数组对象
  var stuArray = new Array();
  //2.准备要存入数组的数据
  var stu01 = {"stuId":11,"stuName":"tom11","stuSubject":"php11"};
  var stu02 = {"stuId":22,"stuName":"tom22","stuSubject":"php22"};
  var stu03 = {"stuId":33,"stuName":"tom33","stuSubject":"php33"};
  //3.存入数组
  stuArray.push(stu01);
  stuArray.push(stu02);
  stuArray.push(stu03);
  //4.将数组对象转换成字符串
  var requestBodyData = JSON.stringify(stuArray);
  //5.发送Ajax请求
  $.ajax({
    "url":"${pageContext.request.contextPath }/three",  //请求地址
    "contentType":"application/json;charset=UTF-8",   //请求体的内容类型
    "data":requestBodyData,               //发送给服务器的数据,将来的请求体
    "dataType":"text",                  //预期服务器返回的响应体类型
    "success":function(response){console.log(response)},//服务器成功返回响应后的回调函数
    "type":"POST"                   //发送请求的请求方式
  });
});

handlers:

@ResponseBody
@RequestMapping(value="/three",produces="text/html;charset=UTF-8")
//@RequestBody将请求体的JSON数据转换为Java类型
public String three(@RequestBody List<Student> stuList) {     
  for (Student student : stuList) {
    System.out.println(student);
  }
  return "执行成功!!!";
}

4.接收文本

<button id="btn4">实验4:接收文本</button>

jQuery:

$("#btn4").click(function(){
  //实验4:接收文本
  var url = "${pageContext.request.contextPath }/four";
  var callBack = function(response) {
    console.log(response);
    console.log(response.stuName);
  };
  //如果服务器返回的是JSON字符串,但是type="text",那么response将仅仅是一个字符串,
  //不能直接访问JSON数据的属性
  var type = "text";
  $.post(url, callBack, type);
});

handlers:

@ResponseBody
@RequestMapping(value="/four",produces="text/html;charset=UTF-8")
public String five() {
  return "来自服务器端的回应……";
}

5.接收JSON

实验5:接收JSON

JQuery:

  $("#btn5").click(function(){
    //实验5:接收JSON
    var url = "${pageContext.request.contextPath }/five";
    var callBack = function(response) {
      console.log(response);
      console.log(response.stuName);
      //如果服务器返回的响应体数据无法解析为JSON数据,那么后续操作无法执行,而且没有错误提示。
      //console.log("aaaaaaaaaa........");
    };
    var type = "json";
    $.post(url, callBack, type);
  });

handlers:

@ResponseBody
@RequestMapping(value="/five",produces="application/json;charset=UTF-8")
public Student four() {
  return new Student(55, "stuName555", "stuSubject555");
}

接收服务器返回的数据时一定要让jQuery的解析方式和实际返回数据的格式一致。

@PathVariable和@RequestParam

/emp/remove/23

@PathVariable(“empId”)

/emp/remove?empId=23

@RequestParam(“empId”)

相关文章
|
19天前
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
|
19天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
10天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
527 8
|
7天前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
7天前
|
XML 前端开发 Java
控制spring框架注解介绍
控制spring框架注解介绍
|
7天前
|
存储 NoSQL Java
Spring Session框架
Spring Session 是一个用于在分布式环境中管理会话的框架,旨在解决传统基于 Servlet 容器的会话管理在集群和云环境中的局限性。它通过将用户会话数据存储在外部介质(如数据库或 Redis)中,实现了会话数据的跨服务器共享,提高了应用的可扩展性和性能。Spring Session 提供了无缝集成 Spring 框架的 API,支持会话过期策略、并发控制等功能,使开发者能够轻松实现高可用的会话管理。
Spring Session框架
|
12天前
|
JSON 资源调度 JavaScript
Vue框架中Ajax请求的实现方式:使用axios库或fetch API
选择 `axios`还是 `fetch`取决于项目需求和个人偏好。`axios`提供了更丰富的API和更灵活的错误处理方式,适用于需要复杂请求配置的场景。而 `fetch`作为现代浏览器的原生API,使用起来更为简洁,但在旧浏览器兼容性和某些高级特性上可能略显不足。无论选择哪种方式,它们都能有效地在Vue应用中实现Ajax请求的功能。
18 4
|
15天前
|
Java 应用服务中间件 开发者
深入探索并实践Spring Boot框架
深入探索并实践Spring Boot框架
25 2
|
14天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
下一篇
无影云桌面