2.2.3.1 AJAX&JSON, 请求方式, json数据格式, 解析和类型转换, JsonIgnore,JsonFormat注解

目录

第1章 ajax概述

1.1. ajax概念

1.2. ajax 功能

1.3. AJAX的应用场景

1.4. 同步与异步

第2章 js原生的ajax

2.1.原生的ajax的开发步骤

2.2. js-ajax的代码实现

1) 编写Servlet代码并挂载至tomcat 

2) 编写前台代码

第3章 jQuery方式的ajax

3.1. jQuery方式ajax简介

3.2. GET请求方式

3.3. POST请求方式

3.4  AJAX请求方式

第4章 json数据格式

4.1. json的概念

4.2 json的语法格式

4.2.1 定义json格式

4.2.2 基本规则

4.2.3 获取json数据格式

4.3 json格式和json解析

4.4 json的转换工具

4.4.1 json转换工具的概述

4.4.2 常见的json转换工具

4.4.3 jackson工具使用

4.4.4 注解使用

4.4.5 java对象转换为json数据类型

代码: 封装User类, 使用@JsonIgnore, @JsonFormat注解

代码: java对象转换为json数据类型


 

第1章 ajax概述

1.1. ajax概念

Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。

1.2. ajax 功能

Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交
换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传
统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。提升用户的体验。

1.3. AJAX的应用场景

  • 数据校验
  • 按照需求获取数据
  • 自动更新页面内容

1.4. 同步与异步

两种方式的区别主要体现在客户端和服务器端相互通信的基础上。

同步方式:客户端必须等待服务器端的响应,在等待的期间客户端不能做其他操作。
异步方式:客户端不需要等待服务器端的响应,在服务器处理请求的过程中,客户端可以进行其他的操作。

 

第2章 js原生的ajax

2.1.原生的ajax的开发步骤

1)创建Ajax引擎对象
2)为Ajax引擎对象绑定监听(监听服务器已将数据响应给引擎)
3)绑定提交地址
4)发送请求
5)接受响应数据

 


2.2. js-ajax的代码实现

1) 编写Servlet代码并挂载至tomcat 

package com.lg.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 java.io.IOException;

/**
 * @author CH
 * @date 2020/11/10 13:46
 *
 *      编写Servlet, 能够接收用户的请求 , 还可以返回一些响应
 */

@WebServlet("/DemoServlet")

public class DemoServlet extends HttpServlet {

    //客户端发送get方式的请求, 由该方法处理
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    // post方法的请求, 由下面处理
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        System.out.println("服务器已经接收到客户端的请求...");
        // 接收前端传递的参数
        String username = req.getParameter("username");
        String age = req.getParameter("age");
        System.out.println("username = " + username + ", age = " + age);
        // 给客户返回消息
        resp.getWriter().print("hello...");
    }
}

2) 编写前台代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  需求: 点击一个按钮, 发送一个ajax请求到后台, 并且给前台页面返回一个hello  -->

    <script>
        //发送ajax请求的方法
        function send() {
            // 1)创建Ajax引擎对象
            var xhr = new XMLHttpRequest();

            // 2)为Ajax引擎对象绑定监听(监听服务器已将数据响应给引擎)
            xhr.onreadystatechange = function () {
                // readyState 执行的状态  1 2 3 4 (响应结束)
                // status 响应码 200  代表服务器响应成功
                if(xhr.readyState == 4 && xhr.status == 200) {
                    // 5)接受响应数据
                    alert(xhr.responseText);
                }
            }

            // 3)绑定提交地址
            // get代表请求方式, url 请求后台服务器的资源路径; 是否为异步请求(true 是, false 不是)
            xhr.open("GET", "/demo_ajax_war_exploded/DemoServlet", true);

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

        }
    </script>
</head>
<body>
    <input type="button" value="发送ajax请求" onclick="send()"/>
</body>
</html>

 

第3章 jQuery方式的ajax

3.1. jQuery方式ajax简介

jquery是一个优秀的js类库,自然对js原生的ajax进行了封装,封装后的ajax的操 作方法更简洁,功能更强大,与ajax操作相关的jquery方法,开发中经常使用的有三种:

 

3.2. GET请求方式

通过远程 HTTP GET 请求载入信息。这是一个简单的 GET 请求功能,如需复杂的ajax参数设置请使用$.ajax。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  需求: 点击一个按钮, 发送一个ajax请求到后台, 并且给前台页面返回一个hello  -->
    <script src="js/jquery-3.5.1.js"></script>
    <script>
        function send() {
            //发送ajax请求
            // 格式: $.get(url, [data], [callback], [type])

            /*
                参数解释
                    url: 必填, 请求服务器的地址
                    data: 发送给服务器的参数 key=value, 服务器可以根据key值获取value
                    callback: 回调函数, 服务器响应完毕函数执行, 形参data表示服务器返回数据
                    type: 代表服务器返回的数据类型 常用两个: text,json
            */
            $.get("/demo_ajax_war_exploded/DemoServlet", "username=tom", function (data) {
                alert(data);
            }, "text");

        }
    </script>
</head>
<body>
    <input type="button" value="发送ajax请求" onclick="send()"/>
</body>
</html>

 

3.3. POST请求方式

通过远程 HTTP POST 请求载入信息。这是一个简单的 POST 请求功能,如需复杂的ajax参数设置请使用$.ajax。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  需求: 点击一个按钮, 发送一个ajax请求到后台, 并且给前台页面返回一个hello  -->
    <script src="js/jquery-3.5.1.js"></script>
    <script>
        function send() {
            //发送ajax请求
            // 格式: $.get(url, [data], [callback], [type])

            /*
                参数解释
                    url: 必填, 请求服务器的地址
                    data: 发送给服务器的参数 key=value, 服务器可以根据key值获取value
                    callback: 回调函数, 服务器响应完毕函数执行, 形参data表示服务器返回数据
                    type: 代表服务器返回的数据类型 常用两个: text,json
            */
            $.post("/demo_ajax_war_exploded/DemoServlet", "username=rose", function (data) {
                alert(data);
            }, "text");

        }
    </script>
</head>
<body>
<input type="button" value="发送ajax请求" onclick="send()"/>
</body>
</html>

 

3.4 AJAX请求方式

通过 HTTP 请求加载远程数据。jQuery 底层 AJAX 实现。简单易用的高层实现见get和post方法。$.ajax()方法可以更加详细的设置底层的参数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  需求: 点击一个按钮, 发送一个ajax请求到后台, 并且给前台页面返回一个hello  -->
    <script src="js/jquery-3.5.1.js"></script>
    <script>
        function send() {
            /*
                ajax方式注意事项:
                    1, 参数位置可互换
                    2, 有些参数不写也有默认值,如async

                ajax发送请求的格式:
                $.ajax({
                    url : "后台地址",
                    async : true,
                    data : "username=tom&age=18",
                    type : "post",
                    datatype : "text",
                    success : function(data) {

                    },
                    error : function() {

                    }
                })
            */
            $.ajax({
                url : "/demo_ajax_war_exploded/DemoServlet",
                async : true,
                data : "username=jack&age=18",
                type : "post",
                datatype : "text",
                success : function(data) {
                    alert(data);
                },
                error : function() {
                    alert("执行失败");
                }
            })

        }
    </script>
</head>
<body>
<input type="button" value="发送ajax请求" onclick="send()"/>
</body>
</html>

 

第4章 json数据格式

4.1. json的概念

json的全称叫做:JavaScript object Notation,JavaScript对象表示法。
json现在主要的功能是:用于存储和交换文本信息的语法,进行数据的传输。
json的主要优点:JSON 比 XML 更小、更快、更易解析。

4.2 json的语法格式

4.2.1 定义json格式

4.2.2 基本规则

数据是由键值对构成 , KEY推荐用引号包起来
键推荐使用双引号引起来,也可以不使用引号,或者使用单引号引起来
值的数据类型: 数字 、字符串、布尔值、数组或对象
数据之间又逗号分隔
花括号保存对象
方括号保存数组

4.2.3 获取json数据格式

var p = {"name":"zhangsan" , "age":18}
var arr = ["one","two"];

json对象.键名      p.name
json对象['键名']   p['name']
数组对象[索引]     arr[1]

 

4.3 json格式和json解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        /**
         案例一: 使用 {key:value,key:value} 格式定义json数据,并获取json数据.
         1.使用json格式来定义一个Person, firstname为张 , lastname为三丰 , age为100;
         2.获取并打印所有属性值.
         */
        var person = {"firstname":"张", "lastname":"三丰", "age":100};
        alert(person);  //[object Object]
        //获取格式:  json对象.key; json对象['key']
        var fname = person.firstname;
        var lname = person.lastname;
        var age = person.age;
        alert("firstname = " + fname + ", lastname = " + lname + ", age = " + age);
    </script>
</head>
<body>

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        /*
            案例二: 使用[{key:value,key:value},{key:value,key:value}] 来定义数3个person对象,
            并遍历打印.
        */
        var persons = [
            {"fname":"张", "lname":"三丰", "age":100},
            {"fname":"张", "lname":"翠山", "age":25},
            {"fname":"张", "lname":"无忌", "age":18}
        ]

        alert(persons.length);  //3

        for (var person of persons) {
            var fname = person.fname;
            var lname = person.lname;
            var age = person.age;
            alert(fname + "  " + lname + "  " + age);
        }

    </script>
</head>
<body>

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        /*
            案例三:使用如下json格式定义json对象,并获取第二个元素内容,遍历打印.
            {
            "param1":[{key:value,key:value},{key:value,key:value}],
            "param2":[{key:value,key:value},{key:value,key:value}],
            "param3":[{key:value,key:value},{key:value,key:value}]
            }
         */

        var param = {
            "天龙八部":[{"name":"乔峰", "age":30, "addr":"丐帮"}, {"name":"段誉", "age":28, "addr":"大理"}, {"name":"虚竹", "age":25, "addr":"少林"}],
            "新白娘子传奇":[{"name":"白素贞", "age":2000, "addr":"西湖"}, {"name":"许仙", "age":25, "addr":"杭州"}, {"name":"法海", "age":80, "addr":"金山寺"}],
            "琅琊榜":[{"name":"梅长苏", "age":30, "addr":"大梁"}, {"name":"飞流", "age":16, "addr":"大梁"}, {"name":"霓凰", "age":26, "addr":"大梁"}]
        }
        
        var arr = param.新白娘子传奇;
        for (var arrE of arr) {
            alert(arrE.name + "  " + arrE.age + "  " + arrE.addr);
        }
    </script>
</head>
<body>

</body>
</html>

 

4.4 json的转换工具

4.4.1 json转换工具的概述

json的转换工具是通过java封装好的一些jar工具包,直接将java对象或集合转换成json格式的字符串。

4.4.2 常见的json转换工具

 

4.4.3 jackson工具使用

实现步骤1)导入json相关jar包

2)创建java对象或集合

3) 使用jackson的ObjectMapper对象的writeValueAsString方法进行转换

 

4.4.4 注解使用

@JsonIgnore:  生成json时忽略指定的属性
@JsonFormat: 属性值的格式化,例如,针对日期格式:@JsonFormat(pattern = "yyyy-MM-dd")

 

4.4.5 java对象转换为json数据类型

代码: 封装User类, 使用@JsonIgnore, @JsonFormat注解

package com.lg.jackson;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.Date;

/**
 * @author CH
 * @date 2020/11/10 20:06
 */
public class User {
    private String username;
    @JsonIgnore
    private int age;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    private String address;

    //构造 getter setter省略

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                ", address='" + address + '\'' +
                '}';
    }
}

代码: java对象转换为json数据类型

package com.lg.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.*;

/**
 * @author CH
 * @date 2020/11/10 20:08
 *
 * jackson的常用对象和方法:
 *      ObjectMapper对象, 可以将java对象转成json
 *      writeValueAsString(java对象) ===>> 返回值是一个json对象
 *
 *      @JsonIgnore 生成json时忽略指定的属性
 *
 *      @JsonFormat(pattern = "yyyy-MM-dd")  日志类型转换成日期类型
 */
public class JackSonDemo {

    public static void main(String[] args) throws JsonProcessingException {

        //method();
        //method2();
        // 2. Map集合转成json
        Map<String, User> map = new HashMap<>();
        map.put("no1", new User("扫地僧", 90, new Date(), "少林"));
        map.put("no2", new User("无崖子", 98, new Date(), "缥缈峰"));
        map.put("no3", new User("虚竹", 25, new Date(), "灵鹫宫"));
        ObjectMapper objectMapper = new ObjectMapper();
        String mapJson = objectMapper.writeValueAsString(map);
        System.out.println(mapJson);
/*      {
        "no2":{"username":"无崖子","birthday":"2020-11-15","address":"缥缈峰"},
        "no1":{"username":"扫地僧","birthday":"2020-11-15","address":"少林"},
        "no3":{"username":"虚竹","birthday":"2020-11-15","address":"灵鹫宫"}
        }
*/
    }

    private static void method2() throws JsonProcessingException {
        //1. List类型的数据转成json
        List<User> list = new ArrayList<>();
        list.add(new User("乔峰", 28 , new Date(), "丐帮"));
        list.add(new User("慕容复", 36 , new Date(), "西夏"));
        list.add(new User("段誉", 20 , new Date(), "大理"));

        ObjectMapper objectMapper = new ObjectMapper();
        String listJson = objectMapper.writeValueAsString(list);
        System.out.println(listJson);
/*       [
         {"username":"乔峰","birthday":"2020-11-10","address":"丐帮"},
         {"username":"慕容复","birthday":"2020-11-10","address":"西夏"},
         {"username":"段誉","birthday":"2020-11-10","address":"大理"}
         ]
*/
    }

    private static void method() throws JsonProcessingException {
        // 选中下面所有语句 ctrl + alt + m  可以将其抽取成一个方法

        // 将User对象转换成json字符串
        User user = new User("老王", 30, new Date(),  "北京");

        // 创建jackson的核心对象
        ObjectMapper objectMapper = new ObjectMapper();

        //调用writeValueAsString  将user转成json对象
        String jsonObj = objectMapper.writeValueAsString(user);
        System.out.println(jsonObj);    //{"username":"老王","age":30,"birthday":1605006769989,"address":"北京"}
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值