json是一个轻量级数据交换格式 主要用于前后端数据传输
json传输效率比较高 便于解析
json就是一个特殊的字符串 这个字符串有固定的格式

对象:{} ===> 表示是对象 例如:{"uid":10,"uname":"张三"}
数组:[] ===> 表示是数组 例如:[{"uid":10,"uname":"张三"},{"uid":11,"uname":"李 四"} ]
A.对象中嵌套数组 {"employees": [{ "firstName":"Bill" , "lastName":"Gates" }]}
B.数组中嵌套对象 [{date: "Sep 18 2016", music: { title: "夜夜夜夜-齐秦"}}]
A.json是以键值对来进行存储
B.json中每一个属性与属性值都是以冒号分割
C.json中每一个组属性值都是以逗号分割

- package com.qf.test;
-
- import com.alibaba.fastjson.JSON;
- import com.qf.entity.Books;
- import com.qf.entity.Person;
- import com.qf.entity.Student;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class Test01 {
- public static void main(String[] args) {
-
- //实例化学生对象
- Student stu = new Student(1001,"张珊","123456");
- //将学生对象转换为json串
- String s = JSON.toJSONString(stu);
- System.out.println(s);
- //将json串解析为Student对象
- Student student = JSON.parseObject(s, Student.class);
- System.out.println(student);
-
- //实例化集合
- List
list = new ArrayList<>(); - //添加元素
- list.add(new Student(1002,"李思","123"));
- list.add(new Student(1003,"王舞","1223"));
- list.add(new Student(1004,"赵柳","1244"));
- //将集合转换为json串
- String s1 = JSON.toJSONString(list);
- System.out.println(s1);
- //将json串解析为集合
- List
list1 = JSON.parseArray(s1, Student.class); - System.out.println(list1);
-
- String json1 = "{'name':'huochai','age':29,'school':{'name':'iankeyuan','location':'beijing'}}";
- Person person = JSON.parseObject(json1, Person.class);
- System.out.println(person);
-
- String json2 = "[\n" +
- " {\n" +
- " date: \"Sep 18 2016\",\n" +
- " title: \"御剑飞仙翱于九天\",\n" +
- " imgSrc: \"/images/post/crab.png\",\n" +
- " avatar: \"/images/avatar/1.png\",\n" +
- " content: \"金庸书的一大特点就是朝代越早武功越高,天龙的朝代算是最早的 因此天龙里面的功夫都比其他书里面的厉害,就连降龙十八掌也比射雕三步曲里面的厉害,天龙里面一阳指不是非常厉害,但是到了射雕就是相当强大的功夫了。但是后面几部书里面还是有一些奇人练的一些奇功超越了前人。\",\n" +
- " reading: \"112\",\n" +
- " collection: \"96\",\n" +
- " headImgSrc: \"/images/post/crab.png\",\n" +
- " author: \"林白衣\",\n" +
- " dateTime: \"24小时前\",\n" +
- " detail: \"菊黄蟹正肥,品尝秋之味。徐志摩把“看初花的荻芦”和“到楼外楼吃蟹”并列为秋天来杭州不能错过的风雅之事;用林妹妹的话讲是“螯封嫩玉双双满,壳凸红脂块块香”;在《世说新语》里,晋毕卓更是感叹“右手持酒杯,左手持蟹螯,拍浮酒船中,便足了一生矣。”漫漫人生长路,美食与爱岂可辜负?于是作为一个吃货,突然也很想回味一下属于我的味蕾记忆。记忆中的秋蟹,是家人的味道,弥漫着浓浓的亲情。\\n\\n是谁来自山川湖海,却囿于昼夜,厨房与爱? 是母亲,深思熟虑,聪明耐心。吃蟹前,总会拿出几件工具,煞有介事而乐此不疲。告诉我们螃蟹至寒,需要佐以姜茶以祛寒,在配备的米醋小碟里,亦添入姜丝与紫苏,前者驱寒后者增香。泡好菊花茶,岁月静好,我们静等。\",\n" +
- " postId: 0,\n" +
- " music: {\n" +
- " url: \"http://ws.stream.qqmusic.qq.com/C100003507bR0gDKBm.m4a?fromtag=38\",\n" +
- " title: \"夜夜夜夜-齐秦\",\n" +
- " coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000001TEc6V0kjpVC.jpg?max_age=2592000\"\n" +
- " }\n" +
- " },\n" +
- "\n" +
- "{\n" +
- " date: \"Sep 18 2016\",\n" +
- " title: \"御剑飞仙翱于九天\",\n" +
- " imgSrc: \"/images/post/crab.png\",\n" +
- " avatar: \"/images/avatar/1.png\",\n" +
- " content: \"金庸书的一大特点就是朝代越早武功越高,天龙的朝代算是最早的 因此天龙里面的功夫都比其他书里面的厉害,就连降龙十八掌也比射雕三步曲里面的厉害,天龙里面一阳指不是非常厉害,但是到了射雕就是相当强大的功夫了。但是后面几部书里面还是有一些奇人练的一些奇功超越了前人。\",\n" +
- " reading: \"112\",\n" +
- " collection: \"96\",\n" +
- " headImgSrc: \"/images/post/crab.png\",\n" +
- " author: \"林白衣\",\n" +
- " dateTime: \"24小时前\",\n" +
- " detail: \"菊黄蟹正肥,品尝秋之味。徐志摩把“看初花的荻芦”和“到楼外楼吃蟹”并列为秋天来杭州不能错过的风雅之事;用林妹妹的话讲是“螯封嫩玉双双满,壳凸红脂块块香”;在《世说新语》里,晋毕卓更是感叹“右手持酒杯,左手持蟹螯,拍浮酒船中,便足了一生矣。”漫漫人生长路,美食与爱岂可辜负?于是作为一个吃货,突然也很想回味一下属于我的味蕾记忆。记忆中的秋蟹,是家人的味道,弥漫着浓浓的亲情。\\n\\n是谁来自山川湖海,却囿于昼夜,厨房与爱? 是母亲,深思熟虑,聪明耐心。吃蟹前,总会拿出几件工具,煞有介事而乐此不疲。告诉我们螃蟹至寒,需要佐以姜茶以祛寒,在配备的米醋小碟里,亦添入姜丝与紫苏,前者驱寒后者增香。泡好菊花茶,岁月静好,我们静等。\",\n" +
- " postId: 0,\n" +
- " music: {\n" +
- " url: \"http://ws.stream.qqmusic.qq.com/C100003507bR0gDKBm.m4a?fromtag=38\",\n" +
- " title: \"夜夜夜夜-齐秦\",\n" +
- " coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000001TEc6V0kjpVC.jpg?max_age=2592000\"\n" +
- " }\n" +
- " }\n" +
- "\n" +
- " \n" +
- " \n" +
- "]";
- List
books = JSON.parseArray(json2, Books.class); - for (Books b :books) {
- System.out.println(b);
-
- }
-
-
-
-
- }
- }

- package com.qf.test;
-
- import com.google.gson.Gson;
- import com.google.gson.reflect.TypeToken;
- import com.qf.entity.Books;
- import com.qf.entity.Student;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class Test02 {
- public static void main(String[] args) {
- //实例化Gson对象
- Gson g = new Gson();
- Student student = new Student(1001,"张珊","123456");
- //将对象转换为json串
- String s = g.toJson(student);
- System.out.println(s);
- //将json串解析为对象\
- Student student1 = g.fromJson(s, Student.class);
- System.out.println(student);
-
- List
list = new ArrayList<>(); - list.add(new Student(1002,"李思","123"));
- list.add(new Student(1003,"王舞","123"));
- list.add(new Student(1004,"赵柳","123"));
- list.add(new Student(1005,"孙琦","123"));
- //将集合转换为json串
- String s1 = g.toJson(list);
- System.out.println(s1);
- //将json串解析为集合
- List
list1=g.fromJson(s1,new TypeToken>(){}.getType());
- System.out.println(list1);
-
- String json2 = "[\n" +
- " {\n" +
- " date: \"Sep 18 2016\",\n" +
- " title: \"御剑飞仙翱于九天\",\n" +
- " imgSrc: \"/images/post/crab.png\",\n" +
- " avatar: \"/images/avatar/1.png\",\n" +
- " content: \"金庸书的一大特点就是朝代越早武功越高,天龙的朝代算是最早的 因此天龙里面的功夫都比其他书里面的厉害,就连降龙十八掌也比射雕三步曲里面的厉害,天龙里面一阳指不是非常厉害,但是到了射雕就是相当强大的功夫了。但是后面几部书里面还是有一些奇人练的一些奇功超越了前人。\",\n" +
- " reading: \"112\",\n" +
- " collection: \"96\",\n" +
- " headImgSrc: \"/images/post/crab.png\",\n" +
- " author: \"林白衣\",\n" +
- " dateTime: \"24小时前\",\n" +
- " detail: \"菊黄蟹正肥,品尝秋之味。徐志摩把“看初花的荻芦”和“到楼外楼吃蟹”并列为秋天来杭州不能错过的风雅之事;用林妹妹的话讲是“螯封嫩玉双双满,壳凸红脂块块香”;在《世说新语》里,晋毕卓更是感叹“右手持酒杯,左手持蟹螯,拍浮酒船中,便足了一生矣。”漫漫人生长路,美食与爱岂可辜负?于是作为一个吃货,突然也很想回味一下属于我的味蕾记忆。记忆中的秋蟹,是家人的味道,弥漫着浓浓的亲情。\\n\\n是谁来自山川湖海,却囿于昼夜,厨房与爱? 是母亲,深思熟虑,聪明耐心。吃蟹前,总会拿出几件工具,煞有介事而乐此不疲。告诉我们螃蟹至寒,需要佐以姜茶以祛寒,在配备的米醋小碟里,亦添入姜丝与紫苏,前者驱寒后者增香。泡好菊花茶,岁月静好,我们静等。\",\n" +
- " postId: 0,\n" +
- " music: {\n" +
- " url: \"http://ws.stream.qqmusic.qq.com/C100003507bR0gDKBm.m4a?fromtag=38\",\n" +
- " title: \"夜夜夜夜-齐秦\",\n" +
- " coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000001TEc6V0kjpVC.jpg?max_age=2592000\"\n" +
- " }\n" +
- " },\n" +
- "\n" +
- "{\n" +
- " date: \"Sep 18 2016\",\n" +
- " title: \"御剑飞仙翱于九天\",\n" +
- " imgSrc: \"/images/post/crab.png\",\n" +
- " avatar: \"/images/avatar/1.png\",\n" +
- " content: \"金庸书的一大特点就是朝代越早武功越高,天龙的朝代算是最早的 因此天龙里面的功夫都比其他书里面的厉害,就连降龙十八掌也比射雕三步曲里面的厉害,天龙里面一阳指不是非常厉害,但是到了射雕就是相当强大的功夫了。但是后面几部书里面还是有一些奇人练的一些奇功超越了前人。\",\n" +
- " reading: \"112\",\n" +
- " collection: \"96\",\n" +
- " headImgSrc: \"/images/post/crab.png\",\n" +
- " author: \"林白衣\",\n" +
- " dateTime: \"24小时前\",\n" +
- " detail: \"菊黄蟹正肥,品尝秋之味。徐志摩把“看初花的荻芦”和“到楼外楼吃蟹”并列为秋天来杭州不能错过的风雅之事;用林妹妹的话讲是“螯封嫩玉双双满,壳凸红脂块块香”;在《世说新语》里,晋毕卓更是感叹“右手持酒杯,左手持蟹螯,拍浮酒船中,便足了一生矣。”漫漫人生长路,美食与爱岂可辜负?于是作为一个吃货,突然也很想回味一下属于我的味蕾记忆。记忆中的秋蟹,是家人的味道,弥漫着浓浓的亲情。\\n\\n是谁来自山川湖海,却囿于昼夜,厨房与爱? 是母亲,深思熟虑,聪明耐心。吃蟹前,总会拿出几件工具,煞有介事而乐此不疲。告诉我们螃蟹至寒,需要佐以姜茶以祛寒,在配备的米醋小碟里,亦添入姜丝与紫苏,前者驱寒后者增香。泡好菊花茶,岁月静好,我们静等。\",\n" +
- " postId: 0,\n" +
- " music: {\n" +
- " url: \"http://ws.stream.qqmusic.qq.com/C100003507bR0gDKBm.m4a?fromtag=38\",\n" +
- " title: \"夜夜夜夜-齐秦\",\n" +
- " coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000001TEc6V0kjpVC.jpg?max_age=2592000\"\n" +
- " }\n" +
- " }\n" +
- "\n" +
- " \n" +
- " \n" +
- "]";
- List
list2 =g.fromJson(json2,new TypeToken>(){}.getType());
- for (Books b :list2) {
- System.out.println(b);
-
- }
-
-
- }
- }
ajax是一种动态网页技术
主要用于页面的局部加载
只需要加载网页页面的一部分,不用加载整个页面 效率高
先获取完整的数据,再加载页面 例如:转账时的同步

先加载页面,在获取数据 例如:直播弹幕,先加载直播画面 在加载弹幕




需求:验证用户名是否可用
get方式jsp代码:
- <%--
- Created by IntelliJ IDEA.
- User: 86182
- Date: 2022/9/8
- Time: 10:09
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>$Title$title>
- head>
- <body>
- <input type="text" id="tv_uname" onblur="cheleckName()"><span style="color: red" id="tv_sp">span>
- <script>
- function cheleckName() {
- var uname = document.getElementById("tv_uname").value;
- if (uname==null||uname==""){
- document.getElementById("tv_sp").innerHTML="输入不能为空";
- }else {
- //获取ajax核心对象
- xmlHttpRequest = new XMLHttpRequest();
- //设置回调函数
- xmlHttpRequest.onreadystatechange=callBack;
- //get方法 url地址
- var url = "userServlet?uname="+uname;
- //建立连接
- xmlHttpRequest.open("get",url,true);//第一个参数表示提交方式,第二个参数表示请求地址,第三个参数表示是否支持异步
- //发送请求
- xmlHttpRequest.send(null);//get方式提交 传递的参数已经在URL地址上拼接了
-
- }
-
- }
- function callBack() {
- //xmlHttpRequest.readyState ==4 表示与服务器建立了连接
- // xmlHttpRequest.status ==200 表示响应成功
- //判断是否连接并响应成功
- if (xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
- //获取服务器传递的标记
- var flag = xmlHttpRequest.responseText;
- //判断
- if (flag=="true"){
- document.getElementById("tv_sp").innerHTML="用户名可以使用";
- }else {
- document.getElementById("tv_sp").innerHTML="用户名不可以使用";
- }
- }
-
- }
- script>
- body>
- html>
以post方式提交的jsp页面:
- <%--
- Created by IntelliJ IDEA.
- User: 86182
- Date: 2022/9/8
- Time: 10:09
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>$Title$title>
- head>
- <body>
- <input type="text" id="tv_uname" onblur="cheleckName()"><span style="color: red" id="tv_sp">span>
- <script>
- function cheleckName() {
- var uname = document.getElementById("tv_uname").value;
- if (uname==null||uname==""){
- document.getElementById("tv_sp").innerHTML="输入不能为空";
- }else {
- //获取ajax核心对象
- xmlHttpRequest = new XMLHttpRequest();
- //设置回调函数
- xmlHttpRequest.onreadystatechange=callBack;
- //get方法 url地址
- //var url = "userServlet?uname="+uname;
- //post方式 URL地址
- var url = "userServlet";
- //建立连接
- xmlHttpRequest.open("post",url,true);//第一个参数表示提交方式,第二个参数表示请求地址,第三个参数表示是否支持异步
- //以post方式提交必须设置请求头
- xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
- //发送请求
- //xmlHttpRequest.send(null);//get方式提交 传递的参数已经在URL地址上拼接了
- //以post方式提交 要发送参数
- var data = "uname="+uname;
- xmlHttpRequest.send(data);
-
- }
-
- }
- function callBack() {
- //xmlHttpRequest.readyState ==4 表示与服务器建立了连接
- // xmlHttpRequest.status ==200 表示响应成功
- //判断是否连接并响应成功
- if (xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
- //获取服务器传递的标记
- var flag = xmlHttpRequest.responseText;
- //判断
- if (flag=="true"){
- document.getElementById("tv_sp").innerHTML="用户名可以使用";
- }else {
- document.getElementById("tv_sp").innerHTML="用户名不可以使用";
- }
- }
-
- }
- script>
- body>
- html>
UserServlet类:
- package com.qf.servlet;
-
- 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.PrintWriter;
-
- @WebServlet(name = "userServlet",urlPatterns = "/userServlet")
- public class UserServlet extends HttpServlet {
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //获取前端传递的参数
- String uname = req.getParameter("uname");
- //定义一个标记
- boolean flag = false;
- //模拟验证
- if ("admin".equals(uname)){
- //表示用户名已经存在 不能使用
- flag = false;
- }else {
- //表示用户名不存在可以使用
- flag = true;
- }
- //将标记返回给ajax
- PrintWriter writer = resp.getWriter();
- writer.print(flag);
- //刷新
- writer.flush();
- //关闭资源
- writer.close();
- }
- }
url ==>表示请求路径
type==>表示提交方式
data ==>表示请求传递的参数
dataType==>表示返回数据的类型 text json xml
success==> 表示请求成功的回调
error==> 表示请求失败的回调
- <%--
- Created by IntelliJ IDEA.
- User: 86182
- Date: 2022/9/8
- Time: 16:26
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Titletitle>
- <script src="${pageContext.request.contextPath}/js/jquery-1.8.3.min.js">script>
- head>
- <body>
- <input type="text" id="tv_uname"><span style="color: red" id="tv_sp">span>
- <script>
- // 使用jquery方式实现ajax
- /*$("#tv_uname").blur(function () {
- var uname = $("#tv_uname").val();
- if (uname==null||uname==""){
- $("#tv_sp").html("不能为空");
- }else {
- $.ajax({
- "url":"userServlet",
- "type":"post",
- "data":{"uname":uname},
- "dataType":"text",
- "success":function (data) {
- if (data=="true"){
- $("#tv_sp").html("可以使用");
- }else {
- $("#tv_sp").html("不可以使用");
- }
- },
- "error":function () {
- alert("请求失败");
- }
- });
- }
- })*/
-
- //简化jquery方式实现
- $("#tv_uname").blur(function () {
- var uname = $("#tv_uname").val();
- if (uname==null||uname==""){
- $("#tv_sp").html("不能为空");
- }else {
- $.post("userServlet",{"uname":uname},function (data) {
- if (data=="true"){
- $("#tv_sp").html("可以使用");
- }else {
- $("#tv_sp").html("不可以使用");
- }
- },"text")
- }
- })
- script>
- body>
- html>
需求:动态填充table 和 ul
代码:
jsp
- <%--
- Created by IntelliJ IDEA.
- User: 86182
- Date: 2022/9/8
- Time: 16:02
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Titletitle>
- <script src="${pageContext.request.contextPath}/js/jquery-1.8.3.min.js">script>
- head>
- <body>
- <table id="tv_ta" width="80%" border="1px" cellspacing="0px" cellpadding="0px" align="center">
-
- table>
- <ul id="tv_ul">
-
- ul>
- <script>
- function show1(){
- $.ajax({
- "url":"servlet1",
- "type":"post",
- "data":{},
- "dataType":"text",
- "success":function (data) {
- //将后端传递的数据转换为前端可以解析的json
- var jsonStr = JSON.parse(data);
- //定义一个变量拼接
- var temp = "";
- //循环json串
- $(jsonStr).each(function () {
- temp+="
- "
+this+""; - })
- //将数据写入页面
- $("#tv_ul").html(temp);
- },
- "error":function () {
- alert("请求失败");
- }
- });
- }
- function show2(){
- $.ajax({
- "url":"servlet2",
- "type":"post",
- "data":{},
- "dataTyep":"text",
- "success":function (data) {
- //将接收的数据转换为json串
- var jsonStr=JSON.parse(data);
- //定义一个变量拼接
- var temp="";
- //循环
- $(jsonStr).each(function () {
- temp+="
";- temp+="
"+this.sid+" "; - temp+="
"+this.sname+" "; - temp+="
"+this.spwd+" "; - temp+="
" - })
- //将数据写入页面
- $("#tv_ta").html(temp);
- },
- "eroor":function () {
- alert("请求失败")
- }
- });
- }
- $(function () {
- show1();
- show2();
- });
- script>
- body>
- html>
servlet:
- package com.qf.servlet;
-
- import com.alibaba.fastjson.JSON;
-
- 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.PrintWriter;
- import java.util.ArrayList;
- import java.util.List;
-
- @WebServlet(name = "servlet1",urlPatterns = "/servlet1")
- public class Servlet1 extends HttpServlet {
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- req.setCharacterEncoding("utf-8");
- resp.setCharacterEncoding("utf-8");
- resp.setContentType("text/html;charset=utf-8");
- //实例化集合
- List
list = new ArrayList<>(); - list.add("张珊");
- list.add("李思");
- list.add("王舞");
- //将集合转换为json串
- String s = JSON.toJSONString(list);
- //实例化输出流
- PrintWriter pw = resp.getWriter();
- //将json串传输给前端
- pw.print(s);
- pw.flush();
- pw.close();
- }
- }
-
-
-
-
-
-
-
- package com.qf.servlet;
-
- import com.alibaba.fastjson.JSON;
- import com.qf.entity.Student;
-
- 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.PrintWriter;
- import java.util.ArrayList;
- import java.util.List;
-
- @WebServlet(name = "servlet2",urlPatterns = "/servlet2")
- public class Servlet2 extends HttpServlet {
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- req.setCharacterEncoding("utf-8");
- resp.setCharacterEncoding("utf-8");
- resp.setContentType("text/html;charset=utf-8");
- //实例化集合
- List
list = new ArrayList<>(); - list.add(new Student(1001,"班长","嫩老"));
- list.add(new Student(1002,"梁男","钓鱼老"));
- list.add(new Student(1003,"黑福","洗脚老"));
- //将集合转换为json串
- String s = JSON.toJSONString(list);
- //实例化输出流
- PrintWriter pw = resp.getWriter();
- //将json串传输给前端
- pw.print(s);
- pw.flush();
- pw.close();
- }
- }