Ajax 在 Web 中的應用


Ajax

1. JSON

  • JSON 最早是 JavaScript 對象的表示形式,現在主要用於互聯網傳輸數據載體。
  • JSON 比 XML 更小、更快,更易解析。

a. 配置 JSON 與 Java 的轉換器

i. 常見的解析器

工具名稱 介紹
Jsonlib Java 類庫,需要導入的 Jar 包較多
Gson Google 提供的一個簡單的 Json 轉換工具
Fastjson Alibaba 技術團隊提供的一個高性能的 Json 轉換工具
Jackson 開源免費的 Json 轉換工具,SpringMVC 轉換默認使用 Jackson

ii. 使用 Jackson,導入 Jar 包

在這裏插入圖片描述

相關 Jar 包已上傳至 CSDN:Json 相關 Jar 包

b. 將 Java 對象轉爲 Json(字符串)

  • 關鍵方法:String writeValueAsString(Object object);

i. 實體類

package com.company;

public class User {

    private String id;
    private String name;
    private String sex;
    private Integer age;
    private String address;
    private String qq;
    private String email;

    public User() {
    }

    public User(String id, String name, String sex, Integer age, String address, String qq, String email) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.address = address;
        this.qq = qq;
        this.email = email;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", qq='" + qq + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

ii. 轉換實體類

	// 1.將User對象轉爲Json字符串
    @Test
    public void UserToJson() throws Exception {
        User user = new User("1", "Regino", "男", 23, "HK", "123", "[email protected]");

        // 創建Jackson轉換器對象
        ObjectMapper om = new ObjectMapper();

        // 將任意對象轉爲Json字符串
        String json = om.writeValueAsString(user);
        System.out.println(json); // 在Java中name必須使用雙引號包裹起來
    }

在這裏插入圖片描述

iii. 轉換 Map

    // 2.將map集合轉爲Json字符串
    @Test
    public void MapToJson() throws Exception {
        Map<String, Object> map = new HashMap<>();
        map.put("name", "Regino");
        map.put("age", 21);

        // 創建Jackson轉換器對象
        ObjectMapper om = new ObjectMapper();

        // toJson
        String json = om.writeValueAsString(map);
        System.out.println(json); //  {"name":"張三","age":18}
    }

在這裏插入圖片描述

iv. 轉換 List

    // 3.將list集合轉爲Json數組字符串
    @Test
    public void ListToJson() throws Exception {
        List<User> list = new ArrayList<>();
        list.add(new User("1", "Reggie", "男", 23, "HK", "123", "[email protected]"));
        list.add(new User("2", "Regina", "女", 21, "HK", "123", "[email protected]"));

        // 創建Jackson轉換器對象
        ObjectMapper om = new ObjectMapper();

        // toJson
        String json = om.writeValueAsString(list);
        System.out.println(json); // [{},{}]
    }

在這裏插入圖片描述

c. 將 Json(字符串)轉爲 Java 對象

  • 關鍵方法:T readValue(String json,Class<T> classType);

i. 轉換爲實體類

    // 1.將Json字符串轉爲User對象
    @Test
    public void JsonToUser() throws Exception {
        String json = "{\"id\":\"1\",\"name\":\"Regino\",\"sex\":\"男\",\"age\":23,\"address\":\"HK\",\"qq\":\"123\",\"email\":\"[email protected]\"}";

        // 創建jackson轉換器對象
        ObjectMapper om = new ObjectMapper();

        // toUser
        User user = om.readValue(json, User.class);
        System.out.println(user);
    }

在這裏插入圖片描述

ii. 轉換爲 Map

    // 2.將Json字符串轉爲map集合(如果你獲取的Json格式沒有對應的Java實體對象,就可以拿map接收)
    @Test
    public void JsonToMap() throws Exception {
        String json = "{\"name\":\"Regino\",\"age\":23}";

        // 創建Jackson轉換器對象
        ObjectMapper om = new ObjectMapper();

        // toMap
        Map<String, Object> map = om.readValue(json, Map.class);
        System.out.println(map);
    }

在這裏插入圖片描述

iii. 轉換爲 List

    // 3.將Json數組字符串轉爲list集合
    @Test
    public void JsonToList() throws Exception {
        String json = "[{\"id\":\"1\",\"name\":\"Reggie\",\"sex\":\"男\",\"age\":23,\"address\":\"HK\",\"qq\":\"123\",\"email\":\"[email protected]\"},{\"id\":\"2\",\"name\":\"Regina\",\"sex\":\"女\",\"age\":21,\"address\":\"HK\",\"qq\":\"123\",\"email\":\"[email protected]\"}]";

        // 創建Jackson轉換器對象
        ObjectMapper om = new ObjectMapper();

        // toList
        List list = om.readValue(json, List.class);
        System.out.println(list);
    }

在這裏插入圖片描述

2. Ajax 案例:檢查用戶名是否可用

a. 主要需求

  • 在用戶註冊頁面,輸入用戶名,當用戶名輸入框失去焦點時,發送異步請求,將輸入框的用戶名傳遞給服務器進行是否存在的校驗。

b. 技術要求

  • 此需求使用了 Ajax 技術:通過 異步提交,實現頁面的 局部刷新,提高用戶的體驗。

c. JQuery 提供的 Ajax 函數

  • Ajax:
		$.ajax({
            type:"請求方式,get|post",
            url:"請求服務器地址",
            data:"請求參數",
            success:function(resp){
                resp就是服務器返回的結果...
            }
		});
  • get:
		$.get(url(地址?參數),function(resp){
            
		});
  • post:
		$.post(url,data,function(resp){
            
		})

d. 需求分析

在這裏插入圖片描述

e. 代碼實現

i. index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>${NAME}</title>
  <script src="${pageContext.request.contextPath}/js/jquery-3.2.1.js"></script>
</head>
<body>
<h3>用戶註冊</h3>
<form action="#" method="post">
  用戶名:<input type="text" name="username" id="username"><span id="userwarn"></span><br>
</form>

<script>
  // 給用戶文本框綁定失去焦點事件
  $('#username').blur(function () {
    // 獲取用戶輸入的值
    console.log(this.value);
    let data = "username=" + this.value;
    // 發送Ajax請求
    $.ajax({
      type:"post",
      url:'${pageContext.request.contextPath}/CheckServlet',
      data:data,
      success:function (resp) {
        console.log(resp);
        // 判斷結果並實現局部刷新
        if(resp.flag){
          $('#userwarn').text(resp.msg).css('color','green');
        }else{
          $('#userwarn').text(resp.msg).css('color','red');
        }
      }
    })
  })
</script>
</body>
</html>
  • 需要導入 JQuery 的 Jar 包,相關資源已上傳至 CSDN:JQuery 類庫
    在這裏插入圖片描述

ii. CheckServlet

package com.company;

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.util.HashMap;
import java.util.Map;

@WebServlet("/CheckServlet")
public class CheckServlet extends HttpServlet {

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

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        // 1.接收請求參數
        String username = request.getParameter("username");

        // 2.聲明map集合
        Map<String, Object> map = new HashMap<>();

        // 3.判斷用戶是否存在
        if (username.equals("Regino")) {
            map.put("flag", false);
            map.put("msg", "× 此用戶已註冊");
        } else {
            map.put("flag", true);
            map.put("msg", "√ 此用戶可以註冊");
        }

        // 4.將map集合轉爲Json字符串
        ObjectMapper om = new ObjectMapper();
        String json = om.writeValueAsString(map);
        System.out.println(json);

        // 5.設置Json的MIME類型
        response.setContentType("application/json;charset=utf-8");

        // 6.Response響應Json到客戶端
        response.getWriter().write(json);
    }
}

f. 測試


原文鏈接:https://qwert.blog.csdn.net/article/details/105780425

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章