ajax与json

news2024/10/7 5:21:08

title: 15 ajax与json

date: ‘2023-3-29’

从一个例子开始

传统的方式进行前后端交互是什么样子的?

image-20230406103116751
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <%
        Object obj = application.getAttribute("count");
        if(obj==null){
            Integer count = 1;
            application.setAttribute("count",count);

        }else{
            Integer count = (Integer)obj;
            count++;
            application.setAttribute("count",count);
        }
    %>
</head>
<link href="css/slide.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/jquery.SuperSlide.2.1.1.js"></script>
<script type="text/javascript">
    $(function(){
        $("#focus").hover(function(){$("#focus-prev,#focus-next").show();},function(){$("#focus-prev,#focus-next").hide();});
        $("#focus").slide({
            mainCell:"#focus-bar-box ul",
            targetCell:"#focus-title a",
            titCell:"#focus-num a",
            prevCell:"#focus-prev",
            nextCell:"#focus-next",
            effect:"left",
            easing:"easeInOutCirc",
            autoPlay:true,
            delayTime:200
        });
    })

    function getName(){
        // 前端发送请求的方式
        window.location.href = "commonGetName";
    }
</script>
<body>
<p>
    传统的交互方式  使用域对象传递数据  页面转发或者重定向   页面整体刷新
</p>
<div style="text-align: center;">
    <div style="padding: 10px;"><input type="button" style="border: 1px solid red;" value="获取姓名" onclick="getName()"/>&nbsp;&nbsp;<input type="text" name="name" value="${name}" style="border-bottom: 1px solid red"/>&nbsp;&nbsp;页面刷新次数:<font color="red">${count }</font></div>
</div>
<div id="focus">
    <div class="hd">
        <div class="focus-title" id="focus-title">
            <a href=""><span class="title">《王的女人》</span>于正版霸王别姬 陈乔恩变腹黑大战情敌袁姗姗</a>
            <a href=""><span class="title">《盲探》</span>刘德华、郑秀文、杜琪峰香港电影铁三角十年归来</a>
            <a href=""><span class="title">《爸爸去哪儿》</span>众星爸厨艺比拼犯难(2013-10-18期)</a>
            <a href=""><span class="title">《到爱的距离》</span>李晨张馨予谱写爱之终曲</a>
            <a href=""><span class="title">《天台》</span>周杰伦自导自演  传递超屌正能量</a>
        </div>
        <a class="hdicon" href=""></a>
    </div>
    <div class="focus-bar-box" id="focus-bar-box">
        <ul class="focus-bar">
            <li><a href=""><img src="images/01.jpg"></a></li>
            <li><a href=""><img src="images/02.jpg"></a></li>
            <li><a href=""><img src="images/03.jpg"></a></li>
            <li><a href=""><img src="images/04.jpg"></a></li>
            <li><a href=""><img src="images/05.jpg"></a></li>
        </ul>
    </div>
    <a href="" class="btn-prev" onclick="return false;" hidefocus="" id="focus-prev"></a>
    <a href="" class="btn-next" onclick="return false;" hidefocus="" id="focus-next"></a>
    <div class="ft">
        <div class="ftbg"></div>
        <div id="focus-num" class="change">
            <a class=""></a>
            <a class=""></a>
            <a class=""></a>
            <a class=""></a>
            <a class=""></a>
        </div>
    </div>
</div>
</body>
</html>

后台代码

package com.glls.web;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/commonGetName")
public class CommonGetNameServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		//把数据放在域对象中
        req.setAttribute("name","波多老师");
		// 转发  或者 重定向到页面
        req.getRequestDispatcher("/common.jsp").forward(req,resp);
    }
}

对比 咱们今天要学习的ajax

image-20230406103433671

对应的代码: 主要是ajax 的代码

function loadName(){
        //发送ajax 请求  获取后台数据
        // 基于原生的 javascript 实现  ajax 异步请求

        var xmlHttp;

        if(window.XMLHttpRequest){
            //有的浏览器 支持 这个对象直接new
            xmlHttp = new XMLHttpRequest();
        }else{
            // 不支持 简介创建这个对象
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }

        // 指定回调函数  监听请求的执行结果
        xmlHttp.onreadystatechange = function (){
            if(xmlHttp.readyState==4 && xmlHttp.status==200){
                //响应结束  并且 响应正常
                var result = xmlHttp.responseText;


                $("#name").val(result);
            }
        }

        //与服务器建立连接
        //get 请求方式
        ///getAjaxName  请求路径
        //true 是否异步
        xmlHttp.open("get","/getAjaxName",true);

        //发送请求
        xmlHttp.send();

    }

对应的后端代码

 @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //resp.setCharacterEncoding("utf-8");

        //响应ajax 请求  就跟之前的方式 不一样了   注意对比 二者的区别

        PrintWriter writer = resp.getWriter();

        writer.println("波多老师3");
    }

总结:

传统方式的交互:

前端: 是通过 超链接 、 表单、浏览器地址栏 直接发送请求到后端

后端:接受接受请求 把响应的数据 放在 域对象中 然后 转发 或者 重定向到 jsp 页面上 展示数据

ajax的方式交互:

前端: 发送ajax 请求 异步请求 局部刷新 至于代码 实现方式是多样的 不用刻意记忆

后端: 接受请求 , 但是 注意 后端响应ajax 请求 返回响应数据的方式 不再是把数据放域对象 然后页面跳转的方式了, 而是 直接使用response 做输出

一 Ajax原理

1 同步与异步

同步:发送完一个请求,只有收到响应后才能发送另外的请求

异步:发送完一个请求,不用等收到该请求的响应,就可以直接发送另外的请求

2什么是AJAX

Asynchronous JavaScript And Xml的缩写 是一种网页开发技术

2.1 异步的 JavaScript 和 xml:

异步:发送请求后不等返回结果,由回调函数处理结果

javascript: 发送请求 接受结果 更新局部的网页

xml: 一般用于请求数据和响应数据的封装 但是 现在 我们都不实用xml ,现在 我们 都是用 json 来封装数据 , 所以 现在看来

ajax 应该 改名 ajaj Asynchronous JavaScript And Json

浏览器在不刷新全部页面的情况下,和服务端进行通信的过程

Ajax就是实现局部刷新的异步通信技术

2.2 他有啥好处?

异步交互 局部刷新

节省带宽 减小服务器压力

提高用体验

3 AJAX工作原理

通过XmlHttpRequest对象和服务端进行通信,浏览器收到服务端的返回值后,对局部区域的内容进行设置

这个对象的常用方法:

image-20230406105732868

常用属性:

image-20230406110906470

image-20230406105807095

js Ajax

1 原生的ajax开发步骤

发送get请求

<input type="text" id="name2" > <a href="javascript:getName()">ajax方式get请求</a>

​ 1)创建AJAX异步对象

  //1. 创建 XMLHttpRequest 对象
            var xmlHttp;
            if(window.XMLHttpRequest){
                //存在浏览器差异  有的浏览器直接支持这个对象  直接 new 就可以了
                xmlHttp = new XMLHttpRequest();
            }else {
                //有的浏览器不支持
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }

2)指定回调函数 监听请求的执行结果

  //2.指定回调函数  监听请求的执行结果
            xmlHttp.onreadystatechange = function (){
                // readyState=4 表示读取响应结束
                // status 表示 后端响应正常
                if(xmlHttp.readyState==4 && xmlHttp.status==200){
                    // 在这里 接受响应结果
                    var result = xmlHttp.responseText;

                    alert(result);

                    document.getElementById("name2").value = result;
                }
            }

3)与服务端建立链接

open(method,url,async)

method表示提交方式:get/post

url表示访问的资源

async 表示是否异步

 //3. 与服务端建立链接
            xmlHttp.open("get","/getAjax1Name?name=李闯",true);

4)发送请求

//4. 发送请求
            xmlHttp.send();

2 ajax对象的状态-readystate

0 表示创建ajax对象,还没有调用open()方法

1 表示调用open方法,还没有调用send方法

2 表示调用send方法,但是ajax请求还没发送到服务端

3 表示请求发送到服务端,但是没有开始处理

4 表示处理完成ajax请求

3 ajax应用

3.1 使用Ajax方式获取后端数据并展示

image-20230406112612739


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>

    <script type="text/javascript">
        function getName(){
            //发送 ajax 请求
            //1. 创建 XMLHttpRequest 对象
            var xmlHttp;
            if(window.XMLHttpRequest){
                //存在浏览器差异  有的浏览器直接支持这个对象  直接 new 就可以了
                xmlHttp = new XMLHttpRequest();
            }else {
                //有的浏览器不支持
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }

            //2.指定回调函数  监听请求的执行结果
            xmlHttp.onreadystatechange = function (){

               
                // readyState=4 表示读取响应结束
                // status 表示 后端响应正常
                if(xmlHttp.readyState==4 && xmlHttp.status==200){
                    // 在这里 接受响应结果
                    var result = xmlHttp.responseText;

                    alert(result);

                    document.getElementById("name2").value = result;
                }
            }

            //3. 与服务端建立链接
            xmlHttp.open("get","/getAjax1Name?name=李闯",true);

            //4. 发送请求
            xmlHttp.send();

        }
    </script>
</head>
<body>
<input type="text" id="name1" value="${name}" > <a href="${pageContext.request.contextPath}/commonGetName">传统方式交互</a>
<p></p>
<input type="text" id="name2" > <a href="javascript:getName()">ajax方式get请求</a>
<p></p>
<input type="text" id="name3" > <a href="">ajax方式post请求</a>
</body>
</html>

web程序:

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //resp.setCharacterEncoding("utf-8");

        //响应ajax 请求  就跟之前的方式 不一样了   注意对比 二者的区别

        String name = req.getParameter("name");

        System.out.println(name);

        PrintWriter writer = resp.getWriter();

        writer.println("波多老师4");
    }

3.2 判断用户是否存在

image-20230406163832285


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery.js"></script>
    <script type="text/javascript">
        function checkName(){
            let val = $("#name").val();

            //1. 创建 XMLHttpRequest 对象
            var xmlHttp;
            if(window.XMLHttpRequest){
                //存在浏览器差异  有的浏览器直接支持这个对象  直接 new 就可以了
                xmlHttp = new XMLHttpRequest();
            }else {
                //有的浏览器不支持
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }

            //2.指定回调函数  监听请求的执行结果
            xmlHttp.onreadystatechange = function (){

                // readyState=4 表示读取响应结束
                // status 表示 后端响应正常
                if(xmlHttp.readyState==4 && xmlHttp.status==200){
                    // 在这里 接受响应结果
                    var r = xmlHttp.responseText;
                    console.log(typeof r );
                    let obj = JSON.parse(r);
                    // alert(obj.code);
                    // console.log(r)
                    if(obj.code==200){
                        console.log(123);
                        $("#sp").html("<img src='/images/ok.png'>")

                    }else{
                        console.log(456);
                        $("#sp").html("<img src='/images/no.png'>")
                    }

                }
            }
            //3. 与服务端建立链接
            xmlHttp.open("post","/checkName",true);
            // 如果是post方式,需要设置该请求头
            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            //4. 发送请求
            xmlHttp.send("name="+val);

        }
    </script>
</head>
<body>
  用户名: <input type="text" placeholder="请输入用户名" name="name" id="name" onblur="checkName()">  <span id="sp"></span>
</body>
</html>

后台代码

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //resp.setCharacterEncoding("utf-8");

        //响应ajax 请求  就跟之前的方式 不一样了   注意对比 二者的区别

        String name = req.getParameter("name");

        String msg= "";
        if(name.equalsIgnoreCase("tom")){
            msg = "{\"code\":200,\"msg\":\"success\"}";
        }else{
            msg= "{\"code\":500,\"msg\":\"false\"}";
        }


        PrintWriter writer = resp.getWriter();

        writer.print(msg);
    }

三 jQuery Ajax

1 get 方法

完整语法: $.get(URL,data,function(data,status,xhr),dataType)
        url    请求地址
        data   get 请求携带的参数
        function   回调函数
            回调函数的参数:
                data 代表后端响应的数据
                status 代表响应状态
                xhr   xmlHttpRequest 对象
        dataType  服务器响应的数据类型   一般 使用 "json"   表示把后端响应回来的数据  按照json 格式处理,转为js 对象

应用举例:校验用户名是否可用


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>学习jquery的ajax请求</title>
    <script src="/js/jquery.js"></script>
    <script>
        $(function(){
            console.log("123")



        })

        function checkName(){
            var name  = $("#name").val();
            $.get("/jqueryGet",{"name":name},function (data,status){
                if(data.code==200){
                    $("#sp").html("<img src='/images/ok.png'>")
                }else{
                    $("#sp").html("<img src='/images/no.png'>")
                }
            },"json")
        }

    </script>

</head>
<body>
    <p>
        大家需要掌握的方法有三个: <br>
        get <br>
        post <br>
        ajax <br>
    </p>


    <p>研究 jquery 的  ajax 请求的   get 方法</p>
    <p>
       完整语法: $.get(URL,data,function(data,status,xhr),dataType)
        <br>
        url    请求地址 <br>
        data   get 请求携带的参数 <br>
        function   回调函数 <br>
            回调函数的参数: <br>
                data 代表后端响应的数据 <br>
                status 代表响应状态 <br>
                xhr   xmlHttpRequest 对象 <br>
        dataType  服务器响应的数据类型   一般 使用 "json"   表示把后端响应回来的数据  按照json 格式处理,转为js 对象

    </p>
    用户名: <input type="text" placeholder="请输入用户名" name="name" id="name" onblur="checkName()">  <span id="sp"></span>

</body>
</html>

注意:使用jQuery会在请求头中增加图中所示的内容,js原生写法不会增加该内容

img

2 post方法

$.post(URL,data,function(data,status,xhr),dataType)
        url    请求地址
        data   post 请求携带的参数
        function   回调函数
            回调函数的参数:
                data 代表后端响应的数据
                status 代表响应状态
                xhr   xmlHttpRequest 对象
        dataType  服务器响应的数据类型   一般 使用 "json"   表示把后端响应回来的数据  按照json 格式处理,转为js 对象

应用举例:判断用户是否存在

<script type="text/javascript">

 function checkName2(){
            var name  = $("#name2").val();
            $.post("/jqueryPost",{"name":name,"age":18},function (data,status){
                if(data.code==200){
                    $("#sp2").html("<img src='/images/ok.png'>")
                }else{
                    $("#sp2").html("<img src='/images/no.png'>")
                }
            },"json")
        }

</script>

 post 请求:
    用户名: <input type="text" placeholder="请输入用户名" name="name" id="name2" onblur="checkName2()">  <span id="sp2"></span>

3 $.ajax()

语法:$.ajax({name:value, name:value, … }) 里面传的是一个对象 ,对象的属性特别多 这里只列出常用的

$.ajax({
    url:"请求url?param1=v1",            //url   ajax请求的目标服务器地址
    type:"get|post",                   //type  指定请求方式(get|post)
    data:,                            // 提交的数据
    dataType:"json",             //预期返回的是json对象格式的数据
    success:function(backData){ //success  ajax请求成功之后执行的回调函数,参数backData就是服务器返回的数据
        
    },
    error:function(e){    //error   ajax请求出现错误执行的回调函数,参数e表示异常信息对象
        
    }
});

应用举例:查询用户数据

image-20230406175811064

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2023/4/6
  Time: 17:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
  <script src="/js/jquery.js"></script>
  <script type="text/javascript">
    $(function (){

      $("#btn").click(function (){

        var ajax = {
          url:"/jqueryAjaxSelect",
          type:"post",
          success:function (data){
            $("#tid").empty();
            //遍历返回的数组
            $(data).each(function(){
              var html = "<tr>";
              html += "<td>" + this.id + "</td>";
              html += "<td>" + this.name + "</td>";
              html += "<td>" + this.age + "</td>";
              html += "</tr>";

              $("#tid").append($(html));
            });
          },
          dataType:"json"
        };

        $.ajax(ajax);

      });

    })
  </script>
</head>
<body>
<table border="1" width="200">
  <tr>
    <td>id</td>
    <td>name</td>
    <td>age</td>
  </tr>

  <tbody id="tid">
  </tbody>
</table>

<button id="btn" >查询 </button>
</body>
</html>

后台代码

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //响应ajax 请求  就跟之前的方式 不一样了   注意对比 二者的区别
        String msg= "[{\"id\":1,\"name\":\"zhangsan\", \"age\":20},{\"id\":2,\"name\":\"lisi\", \"age\":4}]";
        PrintWriter writer = resp.getWriter();
        writer.print(msg);
    }

4 serialize()

序列化表单数据为字符串,执行该方法后,返回的数据形式为:

属性1=value1&属性2=value2

应用举例:登录

前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.1.1.js" type="text/javascript"></script>
</head>
<body>

<form action="" method="post">
    username<input type="text" name="username"><br/>
    password<input type="password" name="password"><br/>
    <input type="submit" value="login"><br/>
</form>

<script>
    // 重写submit事件,实现发送ajax请求
    $("form").submit(function () {
        // 对表单中需要提交的数据进行序列化,返回类似 username=xxx&password=xxx 的形式的字符串
        // alert($("form").serialize());

        // data 设置提交的数据
        $.ajax({
            url: "/day44/login",
            type: "post",
            // data: {username: $("input[name='username']").val(), password: $("input[name='password']").val()},
            // data: "username=xxx&password=xxx",
            data: $("form").serialize(),
            dataType: "json",
            success: function (backData) {
                // alert(backData);
                // 如果用户合法,跳转到指定资源;否则,弹出错误提示
                if (backData.code == 1) {
                    window.location.href = "userlist.html";
                } else {
                    alert(backData.info);
                }
            },
            error: function () {
                alert("ajax请求异常");
            }
        })
        // 阻止submit按钮默认的提交操作
        return false;
    })

</script>

</body>
</html>

后台代码

package com.qfedu.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "LoginServlet", value = "/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (username.equals("admin") && password.equals("123")) {
            // response.getWriter().write("欢迎访问");
            response.getWriter().write("{\"code\":1, \"info\": \"欢迎欢迎\"}");
        } else {
            // response.getWriter().write("用户名或者密码错误");
            response.getWriter().write("{\"code\":0, \"info\": \"用户名或者密码错误\"}");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

四 JSON

1什么是JSON

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 -------- json 是一种轻量级的数据交换格式

Js中任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。其中:

语法:

  • 数据是在 名称/值对中
    • 名称:值 , 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值: “firstName”:“json”
    • 他的值的写法:
      • image-20230407094639114
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

例子

image-20230407094910454

注意:JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个 具有 特定格式 的字符串。

//定义一个字符串
let str = `{"name":"zs"}`;
//  字符串 转为 js 对象
let obj = JSON.parse(str);
//  js 对象  转为 字符串
 let str2 = JSON.stringify(obj);
 

一些常见的处理json的第三方类库主要有:fastjson/jackson/gson/json-lib等

2 fastjson

Fastjson是alibaba提供的第三方组件,用来处理json格式数据

添加依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

测试代码如下:

ArrayList<Student> list=new ArrayList<>();
for(int i=1;i<3;i++){
    list.add(new Student(101+i, "hoho", 20+i));
}
//对象转为json格式字符串
String json = JSON.toJSONString(list);
System.out.println(json);

Student s = new Student(1, "haha", 3);
String json2 = JSON.toJSONString(s);
System.out.println(json2);

String json3 = "{\"name\":\"张三\",\"age\":24}";
//json格式字符串转为对象
UserInfo userInfo=JSON.parseObject(json3, UserInfo.class);
System.out.println("name:" + userInfo.getName()+ ", age:"+userInfo.getAge());

String json6="[{\"name\":\"zhangsan\",\"age\":25}]";
// 转为数组
List<UserInfo> ll2 = JSON.parseArray(json6, UserInfo.class);
System.out.println(ll2.get(0).getName());

String json4="{\"name\":\"zhangsan\",\"age\":25}";
Map<String, Object> map = JSON.parseObject(json4, new TypeReference<Map<String, Object>>(){});
System.out.println(map.get("name"));

String json5="[{\"name\":\"zhangsan\",\"age\":25}]";
List<UserInfo> ll = JSON.parseObject(json5, new TypeReference<List<UserInfo>>(){});
System.out.println(ll.get(0).getName());


Person p = new Person();
p.setId(1);
p.setName("haha");
p.setDate(new Date());

// 日期处理
// 时间戳
String info = JSON.toJSONString(p);
System.out.println(info);

//默认格式为yyyy-MM-dd HH:mm:ss
String info2 = JSON.toJSONString(p, SerializerFeature.WriteDateUseDateFormat);
System.out.println(info2);

// 根据自定义格式输出日期 
System.out.println(JSON.toJSONStringWithDateFormat(p, "yyyy-MM-dd", SerializerFeature.WriteDateUseDateFormat));

3 jackson

jackson是Spring MVC默认使用的json解析器

本例中导入jar包:

img

ArrayList<Student> list=new ArrayList<>();
for(int i=1;i<3;i++){
    list.add(new Student(101+i, "码子", 20+i));
}
//ObjectMapper对象,用于序列化和反序列化
ObjectMapper mapper=new ObjectMapper();
String json = null;
try {
    //将对象转换为JSON格式字符串
    json = mapper.writeValueAsString(list);
} catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
System.out.println(json);

Student s = new Student(1, "haha", 3);
String json2 = null;
try {
    json2 = mapper.writeValueAsString(s);
} catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
System.out.println(json2);

String json3 = "{\"name\":\"张三\",\"age\":24}";
//json格式字符串转为对象
UserInfo userInfo = null;
try {
    userInfo = mapper.readValue(json3, UserInfo.class);
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} 
System.out.println("name:" + userInfo.getName()+ ", age:"+userInfo.getAge());

String json6="[{\"name\":\"zhangsan\",\"age\":25}]";
// 转为数组
List<UserInfo> ll2 = null;
try {
    ll2 = mapper.readValue(json6, new TypeReference<List<UserInfo>>() {
    });
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
System.out.println(ll2.get(0).getName());

Person p = new Person();
p.setId(1);
p.setName("haha");
p.setDate(new Date());

// 设置日期格式
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
// 不设置格式,时间戳
String info = mapper.writeValueAsString(p);
System.out.println(info);

4 修改查询用户数据的后台代码

package com.qfedu.servlet;

import com.alibaba.fastjson.JSON;
import com.qfedu.entity.User;

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.util.ArrayList;
import java.util.List;

@WebServlet(name = "UserListServlet", value = "/userlist")
    public class UserListServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // json格式的字符串
            // String listStr = "[{\"name\":\"zhangsan\", \"age\":30}, {\"name\":\"lisi\", \"age\":23}]";

            User u1 = new User();
            u1.setName("Jbos");
            u1.setAge(20);
            User u2 = new User();
            u2.setName("Mask");
            u2.setAge(30);

            List<User> list = new ArrayList<>();
            list.add(u1);
            list.add(u2);

            // 转换为json格式的字符串
            String listStr = JSON.toJSONString(list);

            response.getWriter().write(listStr);

        }

        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        }
    }

.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(name = “UserListServlet”, value = “/userlist”)
public class UserListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // json格式的字符串
        // String listStr = "[{\"name\":\"zhangsan\", \"age\":30}, {\"name\":\"lisi\", \"age\":23}]";

        User u1 = new User();
        u1.setName("Jbos");
        u1.setAge(20);
        User u2 = new User();
        u2.setName("Mask");
        u2.setAge(30);

        List<User> list = new ArrayList<>();
        list.add(u1);
        list.add(u2);

        // 转换为json格式的字符串
        String listStr = JSON.toJSONString(list);

        response.getWriter().write(listStr);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python cms建站教程:Wagtail建站(二、修改主页与自定义后台管理)

不得不说python的中文cms建站教程实在是太少了&#xff0c;直接用Django/Flask这样的框架从头开始写又实在是有点麻烦&#xff0c;自己摸索着写一点使用Wagtail建站的方法&#xff0c;仅供参考。Wagtail是一款基于Django框架的CMS建站工具&#xff0c;可以为你的网站提供一个比…

点赋科技:本地生活,如何开启复苏之路

目前&#xff0c;全球经历这场前所未有的疫情大流行已经结束&#xff0c;尽管许多国家和地区的经济和社会都受到了影响。然而&#xff0c;做好本地生活的复苏规划和推进&#xff0c;将有助于在疫情之后尽快走出经济低迷期&#xff0c;恢复社会活动和生活体验。点赋科技将阐述如…

初识MySQL数据库——“MySQL数据库”

各位CSDN的uu们你们好呀&#xff0c;小雅兰好久没有更文啦&#xff0c;确实是心有余而力不足&#xff0c;最近学习的内容太难了&#xff0c;这篇博客又是小雅兰的新专栏啦&#xff0c;主要介绍的是一些MySQL数据库的知识点&#xff0c;下面&#xff0c;让我们进入初识MySQL数据…

【黑马程序员 C++教程从0到1入门编程】【笔记8】 泛型编程——模板

https://www.bilibili.com/video/BV1et411b73Z?p167 C泛型编程是一种编程范式&#xff0c;它的核心思想是编写通用的代码&#xff0c;使得代码可以适用于多种不同的数据类型。 而模板是C中实现泛型编程的一种机制&#xff0c;它允许我们编写通用的代码模板&#xff0c;然后在需…

静态成员与友元函数

有缘 class Point {private:double x, y; public:Point(double xx, double yy) ;friend double Distance(Point &a, Point &b); };Point::Point(double xx, double yy) {x xx;y yy; }double Distance(Point &a, Point &b) {return sqrt(pow(a.x - b.x, 2) p…

【STM32CubeMX】F103定时中断

前言 本文记录下我学习STM32CubeMX时的流程&#xff0c;方便以后回忆。系统板是基于STM32F103C6T6。本章记录定时中断。 步骤 实验目标&#xff1a;利用定时器TIM2装载计数&#xff0c;1S的定时中断事件&#xff0c;事件是LED(PC13)的亮灭。 配置时钟源为外部高速源(HSE),流程…

MinIO分布式存储服务

一、前言 最近项目中使用到了MinIO的分布式存储系统&#xff0c;记录一下Minio服务的相关概念以及使用方法。 二、基本概念 MinIO 对象存储系统是为海量数据存储、人工智能、大数据分析而设计&#xff0c;基于Apache License v2.0 开源协议的对象存储系统&#xff0c;它完全…

【五一创作】【软考:软件设计师】 5 计算机组成与体系结构(三)认证技术 | 计算机可靠性

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于软考中级&#xff1a;软件设计师系列专栏,本专栏服务于软考中级的软件设计师考试,包括不限于知识点讲解与真题讲解两大部分,并且提供电子教材与电子版真题,关注私聊即可 …

C++入门(保姆级教程)

目录 一、C关键字 二、命名空间 2.1 C语言中的命名冲突 2.2 C中命名空间 2.2.1 命名空间的定义 2.2.2 命名空间的特性 2.2.3 命名空间的使用 2.2.4 补充知识 2.2.4 C库的命名空间 三、C中的输入&输出 四、缺省参数 4.1 定义 4.2 缺省参数的分类 4.2.1 全缺…

Nacos—简述、注册中心、配置中心

目录 什么是Nacos&#xff1f; 什么是注册中心&#xff1f; 什么是配置中心&#xff1f; 什么是服务管理平台&#xff1f; Nacos的关键特性包括&#xff08;有点&#xff09;有哪些&#xff1f; 作用&#xff08;为什么要使用&#xff09;&#xff1f; 注册中心演变过程 …

业绩稳健增长,公牛集团新老业务如何实现齐头并进?

“插座一哥”公牛集团&#xff0c;正在经历其迈向更高质量发展的自我优化。 4月27日晚&#xff0c;公牛集团&#xff08;SH:603195&#xff09;发布了《2022年年度报告》及《2023年第一季度报告》。去年&#xff0c;宏观市场动荡&#xff0c;但公牛集团不仅保持了业绩的稳健增…

ChatGPT本地化部署教程-批量调用ChatGpt共享API key

ChatGPT本地化部署教程 chatGPT是一个基于自然语言处理的深度学习模型&#xff0c;能够生成自然流畅的文本&#xff0c;并且可以应用到多个场景中。与云服务相比&#xff0c;本地部署还可以提高模型的响应速度&#xff0c;进一步增加模型的便捷性和可用性。以下是基于 Docker …

uboot start.S中关于第一阶段的代码分析

u-boot.lds中找到start.S入口 (1)C语言规定整个项目的入口就是main函数。 (2)在uboot中因为有汇编阶段参与&#xff0c;因此不能直接找main.c。整个程序的入口取决于链接脚本中ENTRY声明的地方。ENTRY(_start)因此定义_start符号 的文件就是整个程序的起始文件&#xff0c;即st…

SpringBoot定义优雅全局统一Restful API 响应框架

假如现在有一个Java项目,老板让你做项目组长,定义项目基础框架,系统技术架构选型, 你应该如何设计一个规范的统一的Restful API 响应框架呢 思考 目前项目开发,都是基于前后端分离模式开发的,基于后端模板引擎那一套,可能已经不适用一些项目开发流程,和当下开发模式了,尤其在…

(五)Spring源码阅读:invokeBeanFactoryPostProcessors方法

一、概述 invokeBeanFactoryPostProcessors的执行顺序大致如下&#xff0c;先执行子类BeanDefinitionRegistryPostProcessor再执行父类BeanFactoryPostProcessor。而对于同一个类的执行顺序是先执行外部的集合再到子集&#xff0c;之后再到父集。更小维度执行的顺序按照order注…

WebSocket的那些事(1-概念篇)

目录 一、什么是Websocket二、WebSocket部分header介绍三、HTTP VS WebSocket四、什么时候使用WebSockets五、关于SockJS和STOMP 一、什么是Websocket 根据 RFC 6455 标准&#xff0c;Websocket协议提供了一种标准化的方式在客户端和服务端之间通过TCP连接建立全双工、双向通信…

【DarkLabel】使用教程(标注MOT数据集)

DarkLabel 使用教程 功能部分 Open video 第 2 处的内容为数据集类型。例如&#xff1a;VOC、COCO、MOT、YOLO等。 第 3 处的内容为标签名称。 可在 darklabel.yml 中修改 classes_set。例如&#xff1a;classes_set: "mot_classes" 第 4 处的内容为两种跟踪方法…

Maven项目的配置

Maven是什么&#xff1f;它的作用是什么&#xff1f; Maven是一种开源的构建工具&#xff0c;它可以自动化构建、测试、部署和管理Java项目。它提供了一个中心化的构建过程&#xff0c;包括依赖管理、项目结构管理、插件管理等&#xff0c;使得开发人员更方便地维护和协作应用…

【Python】操作MySQL

一、Python 操作 Mysql的方式 Python 操作 Mysql 主要包含下面 3 种方式&#xff1a; Python-MySql Python-MySql 由 C 语法打造&#xff0c;接口精炼&#xff0c;性能最棒&#xff1b;但是由于环境依赖多&#xff0c;安装复杂&#xff0c;已停止更新&#xff0c;仅支持 Python…

记一次我的漏洞挖掘实战——某公司的SQL注入漏洞

目录 一、前言 二、挖掘过程 1.谷歌语法随机搜索 2.进入网站 3.注入点检测 3.SQLMAP爆破 &#xff08;1&#xff09;爆库 &#xff08;2&#xff09;爆表 &#xff08;3&#xff09;爆字段 三、总结 一、前言 我是在漏洞盒子上提交的漏洞&#xff0c;上面有一个项目叫…