AJAX:
- 概念: ASynchronous javascript And XML 异步的JavaScript 和 XML
- 异步和同步:客户端和服务器端相互通信的基础上
- 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。
- 客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
- 实现方式:
- 原生的JS实现方式(了解)
- JQeury实现方式,三种:
$.ajax()
、$.get()
和$.post()
$.ajax()
语法:$.ajax({键值对});
使用$.ajax()
发送异步请求$.get()
:发送get请求- 语法:
$.get(url, [data], [callback], [type])
- 参数:
- url:请求路径
- data:请求参数
- callback:回调函数
- type:响应结果的类型
- 参数:
- 语法:
$.post()
:发送post请求- 语法:
$.post(url, [data], [callback], [type])
- 参数:
- url:请求路径
- data:请求参数
- callback:回调函数
- type:响应结果的类型
- 参数:
- 语法:
- 异步和同步:客户端和服务器端相互通信的基础上
JSON:
- 概念: JavaScript Object Notation JavaScript对象表示法
- json现在多用于存储和交换文本信息的语法
- 进行数据的传输
- JSON 比 XML 更小、更快,更易解析。
- 语法:
- 基本规则
- 数据在名称/值对中:json数据是由键值对构成的
- 键用引号(单双都行)引起来,也可以不使用引号
- 值的取值类型:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中) {"persons":[{},{}]}
- 对象(在花括号中) {"address":{"province":"陕西"....}}
- null
- 数据由逗号分隔:多个键值对由逗号分隔
- 花括号保存对象:使用{}定义json 格式
- 方括号保存数组:[]
- 获取数据:
- json对象.键名
- json对象["键名"]
- 数组对象[索引]
- 遍历
- JSON数据和Java对象的相互转换
- JSON解析器:常见的解析器:Jsonlib,Gson,fastjson,jackson。
- JSON转为Java对象
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
- 调用ObjectMapper的相关方法进行转换: readValue(json字符串数据,Class)
- 导入jackson的相关jar包
- Java对象转换JSON
- 使用步骤:
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
- 调用ObjectMapper的相关方法进行转换
- 转换方法:
- writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中 - writeValueAsString(obj):将对象转为json字符串
- writeValue(参数1,obj):
- 注解:
- @JsonIgnore:排除属性。
- @JsonFormat:属性值得格式化
- @JsonFormat(pattern = "yyyy-MM-dd")
- 复杂java对象转换
- List:数组
- Map:对象格式一致
- 转换方法:
- 使用步骤:
- 基本规则
案例:校验用户名
前端html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<script src="js/jquery-3.4.1.min.js"></script>
<script>
//页面加载完成后
$(function () {
//给username绑定blur事件(失去焦点)
$("#username").blur(function () {
//获取username文本输入框的值,发送Ajax请求
var username = $(this).val();
//期望服务器响应的数据格式,{"userExsit":true,"msg":"此用户太受欢迎,请更换一个"}
// {"userExsit":false,"msg":"此用户名可用"}
$.get("findUserServlet",{username:username},function (data) {
//判断userExsit的值是否为true,数据在data里
var span = $("#s_username");//获取span,添加提示信息
if (data.userExsit) {
//用户名存在
span.css("color","red");
span.html(data.msg);
}else {
//用户名不存在
span.css("color","green");
span.html(data.msg);
}
},"json");//最后一个参数,指定响应格式 为json
});
});
</script>
</head>
<body>
<form>
<input type="text" id="username" name="username" placeholder="请输入用户名">
<span id="s_username"></span><br>
<input type="password" name="password" placeholder="请输入密码"><br>
<input type="submit" value="注册"><br>
</form>
</body>
</html>
后端FindUserServlet
package servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
/**
* @author Dongao
* @create 2020-03-13 21:52
*/
@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//指定json格式的响应,这样不用在前端页面指定$get()中指定
response.setContentType("application/json;charset=utf-8");
//获取用户名
String username = request.getParameter("username");
//调用service层判断用户名是否存在
//此处假设
//期望服务器响应的数据格式,{"userExsit":true,"msg":"此用户太受欢迎,请更换一个"}
// {"userExsit":false,"msg":"此用户名可用"}
Map<String,Object> map = new HashMap<String, Object>();
if("tom".equals(username)){
map.put("userExist",true);
map.put("msg","此用户太受欢迎,请更换一个");
}else {
map.put("userExist",false);
map.put("msg","此用户名可用");
}
//将map转为json,并且传递给客户端
//将map转为json
ObjectMapper mapper = new ObjectMapper();
//第一个参数为Writer对象:将obj对象转换为JSON字符串,并将json数据填充到字符输出流
mapper.writeValue(response.getWriter(),map);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}