JavaWeb之前后端分离的三步骤

2023-10-26


提示:以下是本篇文章正文内容,Java系列学习将会持续更新

一、Ajax (异步JavaScript和XML)

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

XMLHttpRequest实现异步通信:用于发送 HTTP 请求,实现后台与服务器交换数据。

1-1 Ajax 发送请求的步骤

// 1. 创建请求对象
var xhr = new XMLHttpRequest();

// 2. 调用open方法,设置请求方法和请求路径
xhr.open("GET", "/data/grade-list.json");

// 3. 请求体
xhr.onload = function() {

	// 1. 将后端的响应结果(JSON数据)进行反序列化
	// this.responseText 是 JSON 格式的字符串
	var students = JSON.parse(this.responseText);

	// 2. 修改 DOM 树,将数据填充到 DOM 树中
	var oTable = document.querySelector('table');
	var html = `<tr><td>${students}</td><td>${students.size}</td></tr>`;
	oTable.innerHTML += html;
}

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

1-2 如果是POST请求,则还需要设置请求头

var s = JSON.stringify(students);

var xhr = new XMLHttpRequest();

// 因为要在请求体中携带 JSON 数据,所以只能使用 POST 方法
xhr.open("POST", "/get-json-from-request-body");
xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");

xhr.send(s);    // send 的参数,就是请求体

回到目录…

二、JSON的使用

2-1 概念

  • JSON 是用于存储和传输数据的格式。
  • JSON 通常用于服务端向网页传递数据 。
  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 具有自我描述性,更易理解

2-2 格式

  • 大括号 { } 保存对象
  • 中括号 [ ] 保存数组,数组可以包含多个对象
  • 数据以 (name: value)对 保存。
[
  {
    "姓名": "张三",
    "成绩": 28
  },
  {
    "姓名": "李四",
    "成绩": 29
  }
]

2-3 JSON 和 JS 转换

// JSON.parase()方法: 将JSON数据转换为JS对象
var obj = JSON.parse('{"name":"baidu","site":"www.baidu.com" }');

// JSON.stringlfy()方法: 将 JavaScript 对象转换为字符串
var myJSON = JSON.stringify(obj);

2-4 JSON 和 Java 转换

ObjectMapper使用详细介绍

ObjectMapper mapper = new ObjectMapper();

① JSON字符串转对象

// Student 对象
Student student = new Student("wang", 20);

// 将对象转换为json字符串
String jsonString = mapper.writeValueAsString(student);
// jsonString = "{\"name\":\"wang\", \"age\":20}"

// 将字符串转换为对象
Student student = mapper.readValue(jsonString, Student.class);

②List集合和JSON字符串之间转换

// List 集合
List<Student> studentList= new ArrayList<>();
studentList.add(。。。);

// 将List集合转换为json字符串
String jsonStr = mapper.writeValueAsString(studentList);
        
// 将json字符串转换为List集合
List<Student> studentList2 = mapper.readValue(jsonStr, List.class);

③Map集合和JSON字符串之间转换

// Map集合
Map<String, Object> testMap = new HashMap<>();
testMap.put("name", "22");
testMap.put("age", 20);

// 将Map集合转换为json字符串
String jsonStr = mapper.writeValueAsString(testMap);

// 将json字符串转换为Map集合
Map<String, Object> testMapDes = mapper.readValue(jsonStr, Map.class);

回到目录…

三、WebAPI (修改 Dom 树)

一个页面的结构是一个树形结构, 称为 DOM 树。

  • 文档: 一个页面就是一个 文档,使用 document 表示。
  • 元素: 页面中所有的标签都称为 元素,使用 element 表示。
  • 节点: 网页中所有的内容都可以称为 节点,使用 node 表示。

这些概念在 JS 代码中就对应一个个的对象,所以叫做 “文档对象模型” 。

3-1 获取元素

querySelector 获取元素对象:

<div class="box">abc</div>
<div id="id">def</div>
<h3><span><input type="text"></span></h3>
<script>
	// 类选择器
	var element1 = document.querySelector('.box');
	// id 选择器
	var element2 = document.querySelector('#id');
	// 标签选择器
	var element3 = document.querySelector('h3 span input');
</script>

3-2 触发事件

<button id="btn">点我一下</button>
<script>
	var btn = document.getElementById('btn');
	btn.onclick = function () {
		alert("hello world");
	}
</script>

3-3 操作元素

<div>
	<span>hello world</span>
	<img src="cat.jpg">
</div>
<script>
	var div = document.querySelector('div');
	
	// 读取 div 文本内容
	console.log(div.innerText);
	// 修改文本内容。即使有HTML标签,也会当做文本显示
	div.innerText = 'hello js';

	// 读取HTML内容
	console.log(div.innerHTML);
	// 修改HTML内容
	div.innerHTML = '<span>hello js</span>';

	var img = document.querySelector('img');
	// 获取元素属性
	console.log(img.src);
	// 修改元素属性
	img.src = "dog.png";
</script>

回到目录…

四、综合应用 - 展示动态页面

类似于 个人中心成绩列表 等动态页面的展示。

4-1 list.html

先书写一个待填充的HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>成绩单</title>
</head>
<body>
    <table border='1'>
        <!--
        <tr>
            <td>小明</td>
            <td>28</td>
        </tr>
        -->
    </table>
    <script src="js/list.js"></script>
</body>
</html>

回到目录…

4-2 ListJsonServlet.java

在Java后端,从数据库获取数据,将数据JSON序列化,发送 JSON 数据到前端页面。

@WebServlet("/send-list.json")
public class ListJsonServlet extends HttpServlet {

    private final ObjectMapper objectMapper = new ObjectMapper();

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

        List<Student> studentList = new ArrayList<>();
        // 1. 从数据库获取 Student 数据
        try (Connection c = DBUtil.connection()) {
            String sql = "select name, grade from grades order by id";
            try (PreparedStatement ps = c.prepareStatement(sql)) {
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        Student student = new Student(
                                rs.getString("name"),
                                rs.getInt("grade")
                        );
                        // 2. 将Student 数据存入List 集合中
                        studentList.add(student);
                    }
                }
            }
        } catch (SQLException exc) {
            throw new RuntimeException(exc);
        }
        // 3. JSON序列化
        String json = objectMapper.writeValueAsString(studentList);
        // 4. 响应
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json");
        resp.getWriter().println(json);
    }
}

回到目录…

4-3 list.js

在JS中,发送 Ajax 请求,获取到 JSON 数据,再修改 DOM 树。

// 为了让 js 代码可以在所有资源都加载完成后才去执行,就入口代码放在 window 的 load 事件处理中
window.onload = function() {
    var xhr = new XMLHttpRequest()
    xhr.open('get', '/send-list.json')
    xhr.onload = function() {
        // 定义对象数组 = 响应体的文本内容(JSON字符串)反序列化的结果
        var list = JSON.parse(xhr.responseText)
        var oTable = document.querySelector('table')
        // 遍历数组
        // const list = [ {name:'zhangsan',grade:18}, {name:'lisi', grade:36} ]
        list.forEach( function(i){
            var html = `<tr><td>${i.name}</td><td>${i.grade}</td></tr>`
            oTable.innerHTML += html
        })
    }
    xhr.send()
}

4-4 执行效果

在这里插入图片描述

回到目录…


总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是JavaWeb的学习,项目前后端分离的三个步骤,一是Axjx发送请求,二是前后端传输Json数据,三是Js修改前端DOM树。之后的学习内容将持续更新!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb之前后端分离的三步骤 的相关文章

  • JavaScript 中的“new”关键字是什么?

    The newJavaScript 中的关键字第一次遇到时可能会很混乱 因为人们倾向于认为 JavaScript 不是面向对象的编程语言 它是什么 它解决什么问题 什么时候合适 什么时候不合适 它做了 5 件事 它创建一个新对象 这个对象的
  • 使用 npm 作为构建工具连接文件

    我最近发现我可以使用 npm 作为任务运行程序 而不是 gulp 或 grunt 到目前为止 一切都很棒 lint stylus jade uglify watch 等 但串联部分 我似乎无法实现 gulp 是这样的 gulp task s
  • jQuery UI sortable 和 contenteditable=true 不能一起工作

    我正在创建一个列表并希望使其项目可排序和可编辑 所以我这样做 ul li span A span li li span B span li li span C span li ul ul list sortable http jsfiddl
  • 拖放区缩略图宽度图像大小

    如何更改上传图像的缩略图大小 我在我的javascript中尝试过thumbnailWidth 350 但是这不会增加缩略图大小 而缩略图只是看起来放大了 如何操作图像缩略图大小 HTML section section
  • javascript 和 PHP 中的正则表达式有什么区别吗?

    这是在 javascript 中验证电子邮件地址的正则表达式 我不确定是否可以直接在 PHP 中使用它 a z d u00A0 uD7FF uF900 uFDCF uFDF0 uFFEF a z d u00A0 uD7FF uF900 uF
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • jQuery 检查复选框并触发 javascript onclick 事件

    我正在尝试使用 jQuery 检查复选框并在此过程中触发 onclick 事件 假设我在 html 中定义了一个复选框
  • 改进 D3 序列旭日示例

    This D3示例作为我的出发点 http bl ocks org kerryrodden 7090426 http bl ocks org kerryrodden 7090426 我想更改提供图表的数据 并且我做了以下新示例 http j
  • 离子旋转器未显示

    我用 http 请求填充 Ionic 集合重复列表 但我不想将所有内容直接加载到 DOM 中 因此 我只显示其中一些项目 并在您向下滚动时添加其余项目 为此我实现了无限滚动功能 当我到达页面底部时 它应该显示一个旋转器 但它没有 这些物品至
  • JavaScript:从 JavaScript 调用锚标记的点击事件

    我有一个带有锚标记的页面 在我的 JavaScript 中 我设置HREF锚标记的属性基于一些 if else 条件动态变化 现在我想以编程方式调用锚标记的单击事件 我使用了下面的代码 但没有成功 var proxyImgSrc CostM
  • 更新 Google 地图流量层而无需重新加载页面

    我的页面中嵌入了 Google 地图 我使用 initMap js 函数来初始化地图 function initMap var map new google maps Map document getElementById t map zo
  • 如何将函数传递给 JavaScript Web Worker

    我想通过一个 或多个 函数传递postMessage 给网络工作者 因为我无法引用常规文件 为了启动 Web Worker 我将一个对象 URL 从 Blob 创建 传递给Worker构造函数 然后我传递一条消息 但到目前为止还没有在消息中
  • 获得一次性绑定以适用于 ng-if

    这个问题已经被之前问过 https stackoverflow com questions 23969926 angular lazy one time binding for expressions 但我无法让该解决方案发挥作用 所以我想
  • 删除 Laravel Mix 中的临时文件

    我想在 laravel mix 构建期间或之后删除临时构建文件 这是我目前拥有的一些代码 但是del不工作 const mix require laravel mix const del require del compile sass i
  • JavaScript:预期的赋值或函数调用,却看到了一个表达式

    我正在使用 JSHint 来确保我的 JavaScript 是 严格的 但我收到以下错误 预期是赋值或函数调用 但看到的是表达式 关于以下代码 var str A B C D var data var strArr str split fo
  • 如何生成 JavaScript 堆栈跟踪? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 关于如何以跨浏览器的方式在 javascript 中生成堆栈跟踪有什么建议吗 较新的浏览器 Chrome 和 Firefox 公开了一个允
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • 如何修复 getImageData() 错误画布已被跨源数据污染?

    我的代码在本地主机上运行得很好 但在网站上却不起作用 我从控制台收到此错误 对于这一行 getImageData x y 1 1 data Uncaught SecurityError Failed to execute getImageD
  • 在 JSP 或 Javascript 中清除浏览器缓存中的图像

    我正在为一所大学开发JSP Web 应用程序 用户页面中显示人员图片 用户注销后如何从网络浏览器缓存中清除这张图片 使用 JSP 或 JavaScript 那是不可能的 最好的选择是完全禁用相关资源的缓存 创建一个filter https

随机推荐

  • hadoopRPC的使用

    1模拟namenode的查询元数据 public interface ClientNamenodeProtocol public static final long versionID 1L 会读取这个版本号 但可以和客户端的不一样 没有校
  • 【数据结构】树(五)—— 二叉排序树(C语言版)

    数据结构 二叉排序树 C语言版 前言 一 二叉排序树的定义 二 二叉排序树的性质 三 二叉排序树的操作 1 二叉排序树常用存储结构 2 二叉排序树的查找 递归实现 查找 二叉树T 中键值为 key 的节点 非递归实现 查找 二叉树T 中键值
  • java中sum是什么_Java中的IntStream sum()方法

    sum Java中使用IntStream类的方法返回此流中元素的总和 语法如下 int sum 要使用Java中的IntStream类 请导入以下包 import java util stream IntStream 创建IntStream
  • 不知道华为手机识别图片文字怎么弄?2个识别方法收好了

    我们有时候会将书籍上的内容拍照下来进行抄写 但是面对大段的文字 手动抄写会比较花费时间 其实我们可以进行手机识别图片文字 一键进行文字内容提取 这样就方便多了 那你们知道华为手机识别图片文字怎么弄吗 下面我就来分享两个手机识别的方法给大家
  • python安装pip

    pip python2 安装 wget https bootstrap pypa io 2 6 get pip py python2 get pip py pip V pip3 python3 安装 wget https bootstrap
  • 攻防世界PWN新手练习区——cgpwn2

    攻防世界PWN新手练习区 cgpwn2 首先检查文件的有哪些保护 checksec cgpwn2 32位程序 用IDA反编译文件 main函数中只有hello函数 点击查看 整个函数看起来是在进行某种算法 但关键点在于return gets
  • 计算机的起源与发展(概述+习题)

    概述 计算机 computer 也称为 电脑 是一种具有计算功能 记忆功能和逻辑判断功能的机器设备 它能接收数据 保存数据 按照预定的程序对数据进行处理 并提供和保存处理结果 计算机的起源 图灵机 图灵机是一种抽象的计算模型 并没有真正地生
  • H3CNE综合实验

    H3CNE综合实验 实验拓扑 实验需求 按照图示配置IP地址 SW1和SW2之间的直连链路配置链路聚合 公司内部业务网段为Vlan10和Vlan20 Vlan10是市场部 Vlan20是技术部 要求对Vlan 进行命名以便识别 PC1属于V
  • python实现星空效果

    以前用DEV C 这个编译器时 看过easyx 这个C 图形库 文档中有范例程序 是模拟星空的 觉得的不错 今天有空 把Crossin用python写的一个雪花模拟程序 修改了一下 效果和easyx的基本一模一样 使用easyx的 代码 编
  • GMT、UTC与24时区 等时间概念

    许多人都知道两地时间表简称为GMT或UTC 而世界时区表则通称为World Time 那么GMT与UTC的实质原意又是为何 世界时区又是怎么区分的 面盘上密密麻麻的英文单字代表着什么意义与作用呢 这些都是新手在接触两地时间表或世界时区表时
  • java 实现删除单链表中所有指定的结点以及如何清空单链表

    文章目录 1 删除单链表中的所有的指定结点 1 1 删除思路 1 2 删除步骤 1 2 1 删除结点不是头结点 1 2 2 删除的结点是头结点的情况 1 3 部分代码思路分析 1 4 整体代码演示 2 清空单链表 1 删除单链表中的所有的指
  • 第九章 接口(上)

    第九章 接口 上 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法 9 1 抽象类和抽象方法 包含抽象方法的类叫做抽象类 如果一个类包含一个或多个抽象方法 该类必须被限定为抽象的 否则 编译器就会报错 抽象类和抽象方法都用ab
  • 计算机组成原理:奇偶校验和汉明码校验

    目录 一 奇偶校验 奇偶校验的规律及原理 二 汉明校验码 1 校验位位置 2 汉明码的位号实质上是参与校验的各校验位位号之和 3 计算校验位的值 4 校验 设置指错字 一 奇偶校验 了解汉明码校验之前需要知道奇偶校验 奇偶校验码是一种最简单
  • JS翻转数组

    js翻转数组 reverse 方法翻转 反向添加数组 数组首尾交换 unshift 向数组头部添加 考点 在 数组首尾交换 reverse 方法肯定不是 reverse 是js方法 反向添加数组 和 unshift 向数组头部添加元素 创建
  • Java多线程学习(吐血超详细总结)

    写在前面的话 此文只能说是java多线程的一个入门 其实Java里头线程完全可以写一本书了 但是如果最基本的你都学掌握好 又怎么能更上一个台阶呢 如果你觉得此文很简单 那推荐你看看Java并发包的的线程池 Java并发编程与技术内幕 线程池
  • 基于springboot、uniapp的智慧物联网系统

    一 项目简介 基于springboot uniapp的智慧物联网系统 二 实现功能 支持二开智能家居系统 支持智慧办公系统 支持智慧社区系统 支持农业监测系统 支持水利监测系统 支持工业控制系统 三 技术选型 springboot unia
  • c++11并发与多线程-王健伟-专题视频课程

    c 11并发与多线程 364人已学习 课程介绍 本课程 讲解的重点定位在c 11新标准中的多线程开发部分 同时 老师还会结合自己的经验把多线程的讲解进一步拓展到一个比较大的范畴 因为无论是c 11多线程开发还是各种其他的多线程开发实现方法
  • Kali Linux入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

    作为一名从事渗透测试的人员 不懂Kali Linux的话 就out了 它预装了数百种享誉盛名的渗透工具 使你可以更轻松地测试 破解以及进行与数字取证相关的任何其他工作 今天给大家分享一套Kali Linux资料合集 包括12份Kali Li
  • FreeAnchor: Learning to Match Anchors for Visual Object Detection阅读

    摘要 现在基于CNN的算法都是使用IOU对目标分配Anchor 我们提出一种方法打破了IOU的限制 允许自由的分配Anchor 我们的方法 称为自由锚 FreeAnchor 将手工锚分配升级为 自由 锚匹配 FreeAnchor的目标是学习
  • JavaWeb之前后端分离的三步骤

    文章目录 一 Ajax 异步JavaScript和XML 1 1 Ajax 发送请求的步骤 1 2 如果是POST请求 则还需要设置请求头 二 JSON的使用 2 1 概念 2 2 格式 2 3 JSON 和 JS 转换 2 4 JSON