当前位置:   article > 正文

javaweb学习(day13-数据交换和异步请求)

javaweb学习(day13-数据交换和异步请求)

一、JSON

1.介绍

 1.1 在线文档

  • JSon 在线文档:https://www.w3school.com.cn/js/js_json_intro.asp
  • Ajax 在线文档:https://www.w3school.com.cn/js/js_ajax_intro.asp

1.2 JSON 介绍 

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言 [老韩解读:即 java phpasp.net , go 等都可以使用 JSON]
  • JSON 具有自我描述性,更易理解, 一句话,非常的好用

1.3 快速入门 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>json 快速入门案例</title>
  6. <script type="text/javascript">
  7. window.onload=function () {
  8. var myJson = {
  9. "key1": "林然", // 字符串
  10. "key2": 123, // Number
  11. "key3": [1, "hello", 2.3], // 数组
  12. "key4": {"age": 12, "name": "jack"}, //json 对象
  13. "key5": [ //json 数组
  14. {"k1": 10, "k2": "milan"}, {"k3": 30, "k4": "smith"}
  15. ]
  16. };
  17. //访问 json 的属性
  18. console.log("key1= " + myJson.key1);
  19. // 访问 json 的数组属性
  20. console.log("key3[1]= " + myJson.key3[1]); // hello
  21. // 访问 key4 的 name 属性
  22. console.log("name= " + myJson.key4.name); // jack
  23. // 访问 key5 json 数组的第一个元素
  24. console.log("myJson.key5[0]= " + myJson.key5[0]); //[object, object]
  25. console.log("myJson.key5[0].k2= " + myJson.key5[0].k2)// milan
  26. }
  27. </script>
  28. </head>
  29. <body>
  30. <h1>json 快速入门</h1>
  31. </body>
  32. </html>

 2 JSON 对象和字符串对象转换

2.1 示例

  • JSON.stringify(json)功能: 将一个 json 对象转换成为 json 字符串
  • JSON.parse( jsonString )功能 :将一个 json 字符串转换成为 json 对象
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>JSON 对象和字符串对象转换</title>
  6. <script type="text/javascript">
  7. window.onload=function () {
  8. // 一个 json 对象
  9. var jsonObj = {"name": "学习", age: 10};
  10. //JSON 是一个 build-in 对象,内建对象,有方法可以使用
  11. console.log(JSON)
  12. // 把 json 对象转换成为字符串对象
  13. var jsonStr = JSON.stringify(jsonObj);
  14. console.log(jsonStr);
  15. // 把 json 对象的字符串,转换成为 json 对象
  16. var jsonObj2 = JSON.parse(jsonStr);
  17. console.log(jsonObj2);
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <h1>JSON 对象和字符串对象转换</h1>
  23. </body>
  24. </html>

 2.2 注意事项和细节

  • JSON.springify(json 对 象) 会 返 回对 应 string, 不 会影 响 原 来 json 对 象, 演 示
  • JSON.parse(string) 函数会返回对应的 json 对象, 不会影响原来 string
  • 在定义 Json 对象时, 可以使用 ' ' 表示字符串, 比如 var json_person = {"name": "jack", "age": 100}; 也可以写成 var json_person = {'name': 'jack', 'age': 100}; 但是在把原生字符串转成 json 对象时, 必须使用 "", 否则会报错 比如: var str_dog = "{'name':'小黄狗', 'age': 4}"; json 就会报错
  • JSON.springify(json 对象) 返回的字符串, 都是 "" 表示的字符串, 所以在语法格式正确的情况下, 是可以重新转成 json 对象的.

JSON Java 中应用场景 

  • Javabean 对象和 json 字符串 的转换
  • List 对象和 json 字符串 的转换
  • map 对象和 json 字符串 的转换

 Book类

  1. package com.hspedu.json;
  2. public class Book {
  3. private Integer id;
  4. private String name;
  5. public Book(Integer id, String name) {
  6. this.id = id;
  7. this.name = name;
  8. }
  9. public Integer getId() {
  10. return id;
  11. }
  12. public void setId(Integer id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. @Override
  22. public String toString() {
  23. return "Book{" +
  24. "id=" + id +
  25. ", name='" + name + '\'' +
  26. '}';
  27. }
  28. }

转换实例

  1. package com.hspedu.json;
  2. import com.google.gson.Gson;
  3. import com.google.gson.reflect.TypeToken;
  4. import java.lang.reflect.Type;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. public class JavaJson {
  10. public static void main(String[] args) {
  11. //演示javabean 和json字符串的转换
  12. Book book = new Book(100, "林然");
  13. //演示把一个java转成一个json字符串
  14. //创建一个Gson对象作为工具使用
  15. Gson gson = new Gson();
  16. // 把对象转成为 json 字符串
  17. String strBook = gson.toJson(book);
  18. System.out.println(strBook);
  19. // 把 json 字符串转换成为 java 对象
  20. Book book1 = gson.fromJson(strBook, Book.class);
  21. System.out.println(book1);
  22. //演示List对象->json字符串
  23. List<Book> bookList=new ArrayList<>();
  24. bookList.add(new Book(200,"红楼梦"));
  25. bookList.add(new Book(300,"西游记"));
  26. //将 list 转成 json 字符串
  27. String strBookList = gson.toJson(bookList);
  28. System.out.println("bookListStr=" + strBookList);
  29. 将 json 字符串转成 List 集合方式 1
  30. //1. 要把复杂的 json 字符串转换成为 java 对象。需要继承 TypeToken 类
  31. //2. TypeToken 是一个自定义泛型类,在创建时,需要指定具体类型,这里我们指定为 List<Book>
  32. // ,如果同学们忘记了,回去看 java 基础的泛型知识点
  33. //3. TypeToken 是由 gson 包提供的
  34. //返回类型的完整路径,然后进行底层反射
  35. //因为TypeToken的无参构造器是protrcted,而new TypeToken<List<Book>>()就是在调用无参构造器
  36. //为什么new TypeToken<List<Book>>() { }使用就可以,这里就涉及到匿名内部类的知识
  37. Type type = new TypeToken<List<Book>>() { }.getType();
  38. List<Book> booklist2 = gson.fromJson(strBookList, type);
  39. System.out.println("bolist2"+booklist2);
  40. //map对象转成json字符串
  41. Map<String, Book> bookMap = new HashMap<>();
  42. bookMap.put("k1",new Book(400,"射雕英雄传"));
  43. bookMap.put("k2",new Book(500,"水浒传"));
  44. String strBookMap = gson.toJson(bookMap);
  45. System.out.println("strBookMap="+strBookMap);
  46. Type type1 = new TypeToken<Map<String, Book>>() {
  47. }.getType();
  48. Map<String,Book> bookMap2 = gson.fromJson(strBookMap, type1);
  49. System.out.println("bookMap2"+bookMap2);
  50. }
  51. }

二、Ajax

1.介绍 

1.1 Ajax 是什么 

  • AJAX "Asynchronous Javascript And XML"(异步 JavaScript XML)
  • Ajax 是一种浏览器异步发起请求(指定发哪些数据)局部更新页面的技术 

1.2 应用场景 

  • 搜索引擎根据用户输入关键字,自动提示检索关键字
  • 动态加载数据,按需取得数据【树形菜单、联动菜单...
  • 改善用户体验。【输入内容前提示、带进度条文件上传...
  • 电子商务应用。 【购物车、邮件订阅...
  • 访问第三方服务。【访问搜索服务、rss 阅读器】
  • 页面局部刷新

 1.3 Ajax 原理示意图

传统的 WEB 应用 

Ajax

 在线文档:https://www.w3school.com.cn/js/js_ajax_intro.asp

应用实例-验证用户名是否存在

  • 在输入框输入用户名
  • 点击验证用户名, 使用 ajax 方式, 服务端验证该用户名是否已经占用了, 如果该用户 已经占用, json 格式返回该用户信息
  • 假定用户名为 king , 就不可用, 其它用户名可以=》 后面我们接入 DB[Mysql+JDBC] 对页面进行局部刷新, 显示返回信息

 

 User类

  1. package com.hspedu.ajax.entity;
  2. public class User {
  3. private Integer id;
  4. private String name;
  5. private String email;
  6. private String pwd;
  7. public User() {
  8. }
  9. public User(Integer id, String name, String email, String pwd) {
  10. this.id = id;
  11. this.name = name;
  12. this.email = email;
  13. this.pwd = pwd;
  14. }
  15. public Integer getId() {
  16. return id;
  17. }
  18. public void setId(Integer id) {
  19. this.id = id;
  20. }
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public String getEmail() {
  28. return email;
  29. }
  30. public void setEmail(String email) {
  31. this.email = email;
  32. }
  33. public String getPwd() {
  34. return pwd;
  35. }
  36. public void setPwd(String pwd) {
  37. this.pwd = pwd;
  38. }
  39. }

servlet

  1. package com.hspedu.ajax.servlet;
  2. import com.google.gson.Gson;
  3. import com.hspedu.ajax.entity.User;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. public class CheckUserServlet extends HttpServlet {
  10. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  11. //System.out.println("CheckUserServlet被调用");
  12. response.setContentType("text/html;charset=utf-8");
  13. //接收数据
  14. String username = request.getParameter("username");
  15. System.out.println(username);
  16. //假定用户名为king,就不可用,其他用户名可以
  17. User user = new User(100, "king", "king@sohu.com", "666");
  18. if("king".equals(username)){//不能使用king用户名
  19. //转成json格式
  20. String strKing = new Gson().toJson(user);
  21. System.out.println("1");
  22. //返回
  23. System.out.println(strKing);
  24. response.getWriter().write(strKing);
  25. }else {
  26. response.getWriter().write("");
  27. }
  28. }
  29. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  30. doPost(request,response);
  31. }
  32. }

 login.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>用户注册</title>
  6. <script type="text/javascript">
  7. window.onload=function () {
  8. var checkButton = document.getElementById("checkButton");
  9. checkButton.onclick=function () {
  10. //alert("ok~")
  11. //1.创建XMLHttpRequest对象[ajax引擎对象]
  12. var xhr = new XMLHttpRequest();
  13. //获取用户填写的用户名
  14. var uname = document.getElementById("uname").value;
  15. //2.准备发送指定数据open ,send
  16. //(1)请求方式可以是“GET”,“POST”
  17. //(2)url
  18. //(3)true表示异步发送
  19. xhr.open("GET","/ajax/checkUserServlet?username="+uname,true);
  20. //在send函数调用前,给XMLHttpRequest绑定一个事件onreadystatechange
  21. //该事件表示,可以去指定一个函数,当数据有变化时,会触发这个事件
  22. //每当xhr对象readyState变化时,会触发这个事件
  23. xhr.onreadystatechange=function(){
  24. if(xhr.readyState==4 && xhr.status==200){
  25. //console.log("xhr=",xhr)
  26. var responseText=xhr.responseText;
  27. if(responseText.trim()!=""){
  28. document.getElementById("myres").value="用户名不可用";
  29. }else {
  30. document.getElementById("myres").value="用户名可用";
  31. }
  32. }
  33. }
  34. //3.正式发送ajax请求
  35. //如果是POST请求在send填写发送的数据
  36. xhr.send();
  37. }
  38. }
  39. </script>
  40. </head>
  41. <body>
  42. <h1>用户注册</h1>
  43. <form action="/ajax/checkUserServlet" method="post">
  44. 用户名字:<input type="text" name="username" id="uname">
  45. <input type="button" id="checkButton" value="验证用户名">
  46. <input style="border-width: 0;color: red" type="text" id="myres"><br/><br/>
  47. 用户密码:<input type="password" name="password"><br/><br/>
  48. 电子邮件:<input type="text" name="email"><br/><br/>
  49. <input type="submit" value="用户注册">
  50. </form>
  51. <h1>返回的 json 数据</h1>
  52. <div id="div1"></div>
  53. </body>
  54. </html>

到数据库去验证用户名是否可用 

三、JQuery Ajax 请求 

1 JQuery Ajax 操作方法 

在线文档:https://www.w3school.com.cn/jquery/jquery_ajax_get_post.asp 

 2 $.ajax 方法

 3 $.get 请求和$.post 请求

  • url: 请求的 URL 地址
  • data: 请求发送到服务器的数据
  • success: 成功时回调函数
  • type: 返回内容格式,xml, html, script, json, text
  • 说明:$.get $.post 底层还是使用$.ajax()方法来实现异步请求,注意对于get和post请求是要按照一定的参数设置来完成的。

 4 $.getJSON

$.getJSON 常用参数 

url: 请求发送的哪个 URL
data: 请求发送到服务器的数据
success: 请求成功时运行的函数

说明:$.getJSON 底层使用$.ajax()方法来实现异步请求 

login2.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>用户注册</title>
  6. <script type="text/javascript" src="./script/jquery-3.6.0.min.js">
  7. </script>
  8. <script type="text/javascript">
  9. $(function () {
  10. //绑定事件
  11. $("#checkButton").click(function () {
  12. //发出ajax请求
  13. //给指定参数时,需要在{}里面k-v
  14. $.ajax(
  15. {
  16. url:"/ajax/checkUserServlet2",
  17. type:"POST",
  18. data:{
  19. //这里我们直接给json
  20. username:$("#uname").val(),
  21. data:new Date()
  22. },
  23. error:function () {
  24. console.log("失败")
  25. },
  26. success:function (data,status,xhr) {
  27. console.log("成功");
  28. console.log("data=",data);
  29. console.log("status=",status);
  30. console.log("xhr=",xhr);
  31. if(data.name==""){
  32. $("#myres").val("该用户名可用");
  33. }else {
  34. $("#myres").val("该用户名不可用");
  35. }
  36. },
  37. dataType:"json"
  38. }
  39. )
  40. //$.get()是顺序url,data,success回调函数,返回的数据格式
  41. })
  42. })
  43. </script>
  44. </head>
  45. <body>
  46. <h1>用户注册-JQUERY+AJax</h1>
  47. <form action="/ajax/checkUserServlet2" method="post">
  48. 用户名字:<input type="text" name="username" id="uname">
  49. <input type="button" id="checkButton" value="验证用户名">
  50. <input style="border-width: 0;color: red" type="text" id="myres"><br/><br/>
  51. 用户密码:<input type="password" name="password"><br/><br/>
  52. 电子邮件:<input type="text" name="email"><br/><br/>
  53. <input type="submit" value="用户注册">
  54. </form>
  55. <h1>返回的 json 数据</h1>
  56. <div id="div1"></div>
  57. </body>
  58. </html>

 其余的代码还是一样的,在这个案例中,主要是换了一种方式去进行请求

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/480706
推荐阅读
相关标签
  

闽ICP备14008679号