JavaWeb之前后端分离的三步骤


提示:以下是本篇文章正文内容,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树。之后的学习内容将持续更新!!!

  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: 前后端分离项目需要把web项目中的后端代码与前端代码拆分开,其中前端代码使用JavaScript语言,包括HTML、CSS等,后端代码使用Java语言,用于处理数据库的请求等。可以使用RESTful API框架,如SpringMVC来实现前后端的解耦。 ### 回答2: 将Java Web项目拆分成前后端分离项目需要执行以下步骤: 1. 分离后端代码:在原有的Java Web项目中,将后端的业务逻辑和数据访问层单独抽离出来,形成独立的后端项目。这个后端项目可以是一个独立的Java项目,使用Spring Boot、Spring MVC等框架开发。后端项目负责处理请求、实现业务逻辑和与数据库交互等操作。 2. 创建前端项目:使用前端开发技术,如HTML、CSS和JavaScript,创建一个新的前端项目。可以使用流行的前端框架,如React、Angular或Vue.js等,在前端项目中负责用户界面的展示和用户交互。 3. 前后端交互:定义前后端数据交互的接口,可以使用RESTful API进行前后端通信。前端发送请求至后端,后端接收并处理请求,并将处理结果返回给前端,前端根据返回结果进行逻辑处理和界面展示。 4. 部署和联调:前端项目可以独立部署在一个Web服务器或者静态文件服务器上,后端项目则可以部署在另一个服务器上。前后端项目需要在联调过程中确保能够正常通信,前端能够访问后端接口,并正确显示数据和处理业务逻辑。 5. 优化和维护:在前后端分离的项目中,前端和后端可以并行开发和优化,提高开发效率。同时,前端人员可以专注于用户界面的设计和优化,后端人员可以专注于业务逻辑和数据处理的优化。对于不同的模块和功能,可以分配不同的团队进行开发和维护。 通过以上步骤,将原有的Java Web项目拆分为前后端分离项目,可以更好地分配资源和团队,提高开发效率和项目维护性,并且使得前端和后端能够独立升级和部署。 ### 回答3: 将一个JavaWeb项目拆分为前后端分离项目,主要需要进行以下步骤: 1. 前端与后端项目分离:将原来的JavaWeb项目中的前端页面与后端代码进行拆分,分别放在两个独立的项目中。 2. 前端项目搭建:在前端项目中使用前端框架,如Vue.js、React等,搭建前端页面,并实现与后端的数据交互。 3. 后端项目搭建:使用Spring Boot、Spring MVC等框架搭建后端项目,提供接口供前端调用,并处理业务逻辑。 4. 接口定义与规范:前后端分离项目中,前端通过接口与后端进行数据交互。因此,需要定义接口的请求方式、参数、返回格式等规范,确保前后端的数据交互正常。 5. 接口调用:前端通过异步请求方式(如Ajax、Fetch等)调用后端接口,并获取返回的数据进行展示或处理。 6. 前后端联调:在开发过程中,前端需要根据定义的接口规范进行接口调用,与后端进行联调,确保前后端的数据交互正常。 7. 部署与测试:将前后端分离项目分别进行部署,并进行功能与性能测试,确保项目的稳定运行。 总结起来,将JavaWeb项目拆分为前后端分离项目,需要进行前端项目搭建、后端项目搭建、接口定义与规范、接口调用、前后端联调、部署与测试等步骤。通过这些步骤,可以将原有的JavaWeb项目改造为前后端分离的项目,实现前后端的解耦与独立开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只咸鱼。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值