当前位置: 首页 > news >正文

Java基础入门day62

day62

AJAX

概念

AJAX: Asynchronous Javascript And XML

  • AJAX是一种无需重新加载整个网页的情况下,能够更新部分网页的技术

  • AJAX是一种用于创建快速动态网页的技术

  • 通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新

  • 传统的网页如果需要更新内容,必须要重新加载整个网页,而AJAX不需要

工作原理

工作原理图

AJAX案例

使用AJAX来实现一个判断用户名是否存在的案例

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/5/31Time: 9:06To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>registry</title>
</head>
<body>
<form action="registry" method="post">
​username: <input type="text" name="username" οnblur="checkUsername()" id="username" /><SPAN id="usernameSpan"></span><br />
​password: <input type="password" name="password" /><br />
​<input type="submit" value="registry" />
</form>
​
<script>function checkUsername(){var username = document.getElementById("username").value;
​// alert(username)
​//    原生AJAX开发有四个步骤://        1.  创建XMLHttpRequest对象//        2.  使用XMLHttpRequets对象的open方法创建请求,参数:请求方式,请求地址,是否异步//        3.  使用XMLHttpRequest对象的send方法发送请求,参数:请求参数//        4.  使用XMLHttpRequest对象的onreadystatechange事件监听请求状态,参数:请求回调函数var xhr = new XMLHttpRequest();
​xhr.open("GET","checkUser?username="+username,true);
​xhr.send();
​xhr.onreadystatechange = function(){if(xhr.readyState == 4 && xhr.status == 200){var result = xhr.responseText;
​// alert(result)
​if(result == "1"){// alert("用户名已存在");document.getElementById("usernameSpan").innerHTML = "<FONT COLOR='RED'>用户名已存在</FONT>";}else{// alert("用户名可用");document.getElementById("usernameSpan").innerHTML = "<FONT COLOR='GREEN'>用户名可用</FONT>";}}}
}
</script>
</body>
</html>

其中open方法中的三个参数:

  1. 请求方式,一般是get或者post

  2. 请求的url,这个url将交给后端进行处理

  3. 是否是异步,使用AJAX一般都是期望使用异步,所以传递的参数为true

该open方法中的第二个参数url的值为checkUser,那么会将请求交给checkUser所对应的servlet,还有问号传参

只有真正指向了XMLHttpRequest对象的send方法才真正将请求交给了后端

后端将执行checkUser所对应的Servlet

package com.saas.day62;
​
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;
​
@WebServlet("/checkUser")
public class CheckUserServlet extends HttpServlet {
​@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");
​
​String username = req.getParameter("username");
​if("admin".equalsIgnoreCase(username)){resp.getWriter().write("1");}else{resp.getWriter().write("0");}}
}

该Servlet中动态拿到用户从前端传递过来的username,拿到username与后台数据库进行比对(当前案例是模拟)

如果用户名存在则使用HttpServletResponse对象的getWriter方法的write方法将1写给前端,如果不存在则将0写给前端

这样就又回到了Registry.jsp页面

来到的AJAX的第四部,解释XMLHttpRequest对象的responseText可以获取到这个1或者0

通过获取到的1或者0动态更新当前页面的span内容,让它正确显示用户的提示信息

XMLHttpRequest

创建对象

XMLHttpRequest对象是AJAX的基础

所有的现代浏览器都支持该对象,新版本直接new关键字可以创建,老版本(IE5或者IE6)需要使用ActiveObject

该对象用于在后台与服务器交换数据。

var xhr = new XMLHttpRequest();                     //  主流浏览器都支持
var xhr = new ActiveXObject("Microsoft.XMLHTTP");   //  ie5或者ie6
    var xhr ;
​if(window.XMLHttpRequest){          //  主流浏览器xhr = new XMLHttpRequest();} else{                             //  ie5或者ie6xhr = new ActiveXObject("Microsoft.XMLHTTP");}
XMLHttpRequest请求

如需将请求发送到服务器,我们使用XMLHttpRequest对象的open()和send()方法

xhr.open(method, url, async);
xhr.send();

open方法

参数描述
methodGET或者POST,代表请求方式
url请求在服务器上的位置
async是否是异步,true为异步,false为同步

send()方法将请求发送到服务器

readyState
  • 每当readyState改变时,就会触发onreadystatechange事件

  • 在onreadystatechange事件中,我们规定当服务器响应已做好处理的准备是所执行的任务

  • readyState属性存有XMLHttpRequest对象的状态信息

  • 当readyState值为4时status为200时,表示响应已就绪

status的值的对照表

响应码描述
200交易成功
404请求资源未找到
500服务器内部错误
405请求方式不正确

readyState

readyState值描述
0请求未初始化
1服务器连接已建立
2请求已接收
3请求处理中
4请求已完成且响应已就绪
XMLHttpRequest响应

如需获取来自服务器的响应,可以使用XMLHttpRequest对象的responseText或者responseXML属性

属性描述
responseText获取字符串形式的响应数据
responseXML获取XML格式的响应数据
回调函数

回调函数时一种以参数形式传递给另一个函数的函数

该函数调用包含URL以及发生onreadystatechange事件时执行的任务

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/5/31Time: 9:06To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>registry</title>
</head>
<body>
<form action="registry" method="post">
​username: <input type="text" name="username" οnblur="checkUsername()" id="username" /><SPAN id="usernameSpan"></span><br />
​password: <input type="password" name="password" /><br />
​<input type="submit" value="registry" />
</form>
​
<script>function checkUsername(){var username = document.getElementById("username").value;
​// alert(username)
​//    原生AJAX开发有四个步骤://        1.  创建XMLHttpRequest对象//        2.  使用XMLHttpRequets对象的open方法创建请求,参数:请求方式,请求地址,是否异步//        3.  使用XMLHttpRequest对象的send方法发送请求,参数:请求参数//        4.  使用XMLHttpRequest对象的onreadystatechange事件监听请求状态,参数:请求回调函数var xhr ;
​if(window.XMLHttpRequest){          //  主流浏览器xhr = new XMLHttpRequest();} else{                             //  ie5或者ie6xhr = new ActiveXObject("Microsoft.XMLHTTP");}
​xhr.open("GET","checkUser?username="+username,true);
​xhr.send();
​xhr.onreadystatechange = function(){alert(xhr.readyState)if(xhr.readyState == 4 && xhr.status == 200){var result = xhr.responseText;
​// alert(result)
​if(result == "1"){// alert("用户名已存在");document.getElementById("usernameSpan").innerHTML = "<FONT COLOR='RED'>用户名已存在</FONT>";}else{// alert("用户名可用");document.getElementById("usernameSpan").innerHTML = "<FONT COLOR='GREEN'>用户名可用</FONT>";}}}
}
</script>
</body>
</html>

JSON

简介

JSON: JavaScript Object notation,js的对象标记,是一种轻量级的数据交换格式。

完全独立于编程语言的文本格式来存储和表示数据

简洁、清晰的层次结构使得JSON成为理想的数据交换语言

易于阅读和编写,同时也易于机器解析和生成,并有效地提高网络传输效率

相对于xml格式会显得更加简单

<students><student><sid>9527</sid><name>zhouxingxing</name><score>99</score><birth><year>1999</year><month>11</month><day>11</day></brith></student><student><sid>9527</sid><name>zhouxingxing</name><score>99</score></student><student><sid>9527</sid><name>zhouxingxing</name><score>99</score></student><student><sid>9527</sid><name>zhouxingxing</name><score>99</score></student><student><sid>9527</sid><name>zhouxingxing</name><score>99</score></student>
</students>

相较于以上的xml格式的数据,如果使用JSON,将以如下方式呈现:

[{sid: 9527, name: "zhouxingxing", score:99, birth:{year: 1999, month: 11, day: 11}},{sid: 9527, name: "zhouxingxing", score:99, birth:{year: 1999, month: 11, day: 11}},{sid: 9527, name: "zhouxingxing", score:99, birth:{year: 1999, month: 11, day: 11}},{sid: 9527, name: "zhouxingxing", score:99, birth:{year: 1999, month: 11, day: 11}},{sid: 9527, name: "zhouxingxing", score:99, birth:{year: 1999, month: 11, day: 11}}
]

语法

  • []代表的时JSON数组

  • {}代表的时JSON对象

  • ""表示属性名或者字符串类型的值

  • :表示属性和属性值之间的间隔符

  • ,代表多个属性的间隔或者时多个元素的间隔

FastJSON

FastJSON是一个Java库,可以将Java对象转换成JSON格式,也可以将JSON格式的字符串转换为Java对象

该类库提供了toJSONString()和parseObject()方法将Java对象与JSON对象相互转换

package com.saas.test;
​
import com.alibaba.fastjson.JSON;
import com.saas.entity.Birth;
import com.saas.entity.Student;
​
import java.util.ArrayList;
import java.util.List;
​
public class TestJSON01 {
​public static void main(String[] args) {Student s = new Student();
​s.setSid(1);s.setName("张三");
//        s.setAge(20);s.setSex("男");s.setAddress("北京");s.setPhone("123456789");
​Birth birth = new Birth();birth.setMonth(1);birth.setDay(1);birth.setYear(2000);
​s.setBirth(birth);
​System.out.println(s);
​System.out.println("==============================");
​String stuJson = JSON.toJSONString(s);System.out.println(stuJson);
​System.out.println("==============================");
​Student s2 = JSON.parseObject(stuJson, Student.class);System.out.println(s2);
​System.out.println("==============================");
​List<Student> stus = new ArrayList<>();
​stus.add(s);stus.add(s2);
​String stusJson = JSON.toJSONString(stus);System.out.println(stusJson);
​System.out.println("==============================");
​List<Student> stus2 = JSON.parseArray(stusJson, Student.class);System.out.println(stus2);}
}

该FastJSON的实现需要依赖于fastjson的第三方jar

相关文章:

  • 【云原生】Kubernetes----POD控制器
  • 编程学习技巧——实战
  • 对boot项目拆分成cloud项目的笔记
  • 如何实现一个AI聊天功能
  • 智能超越了科技,更是一个复杂系统
  • 2024年5月31日 (周五) 叶子游戏新闻
  • Linux学习笔记(清晰且清爽)
  • Streamsets-JDBC模式使用更新时间字段数据同步
  • 6/1 第十五届蓝桥杯国赛pb组 真题本人答案 仅供参考
  • AJAX基础知识
  • Java大厂面试题第2季
  • Vue使用axios实现调用后端接口
  • 智慧商砼搅拌车安监运营管理的创新实践
  • 【python008】excel表格转markdown文档表格
  • 【WEEK14】 【DAY4】Swagger Part 2【English Version】
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • Brief introduction of how to 'Call, Apply and Bind'
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • PAT A1120
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 计算机常识 - 收藏集 - 掘金
  • 你不可错过的前端面试题(一)
  • 如何选择开源的机器学习框架?
  • 使用 @font-face
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • # SpringBoot 如何让指定的Bean先加载
  • ${ }的特别功能
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (python)数据结构---字典
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (七)Knockout 创建自定义绑定
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (译)计算距离、方位和更多经纬度之间的点
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)EOS中账户、钱包和密钥的关系
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET中 MVC 工厂模式浅析
  • .php文件都打不开,打不开php文件怎么办
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /boot 内存空间不够