Spring MVC框架:第十一章:Ajax

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 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”)

相关文章
|
23天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
152 1
|
1月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
38 0
|
27天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
43 1
Spring 框架:Java 开发者的春天
|
20天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
37 2
|
19天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
77 1
|
27天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
|
1月前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
下一篇
无影云桌面