JavaWeb开发:HTML 页面与接口对接

在现代 Web 开发中,前后端分离的架构越来越普遍,通常需要通过 API 接口从后端获取数据,然后在前端页面展示这些数据。这篇博客将会向你展示,在 JavaWeb 开发中,如何通过 AJAX 请求接口来获取图书信息,并将这些信息动态展示在 HTML 页面中,以实现接口与页面对接的功能。

一、项目背景

假设我们有一个图书管理系统,其中后端提供了一个 API 接口,返回当前系统中所有图书的信息,数据格式如下:

复制代码
[
  {"id": 1, "title": "Java 编程思想", "author": "Bruce Eckel", "publishDate": "2015-05-01", "genre": "计算机"},
  {"id": 2, "title": "Python 核心编程", "author": "Wesley Chun", "publishDate": "2018-08-10", "genre": "计算机"},
  {"id": 3, "title": "数据结构与算法", "author": "Robert Lafore", "publishDate": "2013-06-15", "genre": "教育"}
]

我们需要将这些图书的信息展示在前端页面中,每本书的详情都包括书名、作者、出版日期和类型。我们会利用前端 JavaScript 来实现这一点,结合 AJAX 技术从后端接口获取数据,并在页面上动态展示。

二、后端接口实现

我们首先实现一个简单的 Controller 类来模拟后端接口,这里使用的是 Spring MVC 框架:

java 复制代码
package cn.controller;

import cn.entity.Book;
import cn.service.BookService;
import com.alibaba.fastjson.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.List;

@Controller
public class BookController {

    @Resource
    private BookService bookService;

    @ResponseBody
    @RequestMapping(value = "/books.do", produces = "application/json;charset=UTF-8")
    public String getAllBooks() {
        List<Book> books = bookService.queryAllBooks();
        String jsonString = JSONArray.toJSONString(books);
        return jsonString;
    }
}
三、HTML 页面实现

接下来,我们在前端创建一个 HTML 页面,通过 AJAX 请求接口,并将返回的图书信息展示在页面中。以下是实现的代码:

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>图书列表</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        .book-card {
            border: 1px solid #ccc;
            padding: 10px;
            margin: 10px 0;
            border-radius: 5px;
            box-shadow: 0px 0px 5px #aaa;
        }
        .book-card h3 {
            margin: 0;
            padding-bottom: 5px;
            border-bottom: 1px solid #ccc;
        }
        .book-card p {
            margin: 5px 0;
        }
    </style>
</head>
<body>
    <h1>图书列表</h1>
    <div id="book-list">
        <template id="book-template">
            <div class="book-card">
                <h3>书名: </h3>
                <p>作者: </p>
                <p>出版日期: </p>
                <p>类型: </p>
            </div>
        </template>
    </div>

    <script type="text/javascript">
        $(document).ready(function () {
            // 使用 AJAX 请求后端接口
            $.ajax({
                url: "http://localhost:8080/SpringMvCWeb/books.do",
                type: "GET",
                dataType: "json",
                success: function (data) {
                    let bookTemplate = document.querySelector("#book-template").content;
                    let bookList = document.querySelector("#book-list");
                    
                    data.forEach(function (book) {
                        let clone = document.importNode(bookTemplate, true);
                        clone.querySelector("h3").textContent = `书名: ${book.title}`;
                        clone.querySelectorAll("p")[0].textContent = `作者: ${book.author}`;
                        clone.querySelectorAll("p")[1].textContent = `出版日期: ${book.publishDate}`;
                        clone.querySelectorAll("p")[2].textContent = `类型: ${book.genre}`;
                        
                        bookList.appendChild(clone);
                    });
                },
                error: function (error) {
                    console.log("获取图书列表失败", error);
                }
            });
        });
    </script>
</body>
</html>
四、实现原理分析
  1. 后端接口

    • 使用 Spring MVC 框架来创建一个 RESTful API,返回图书的 JSON 数据。
    • 数据通过 JSONArray.toJSONString(books) 进行序列化,确保返回的数据格式符合 JSON 标准。
  2. 前端页面

    • 页面中使用 <template> 标签来定义图书信息的模板,使 HTML 结构更加直观,且便于动态克隆。
    • 使用 JQuery 来发起 AJAX 请求,从后端获取数据后,将每一本书的信息填充到页面上。
  3. 样式设计

    • 为每一本图书使用一个卡片式的展示样式,使得信息展示更加美观整洁。
    • 利用 CSS 控制卡片的边框、阴影等,增强用户体验。
五、总结与扩展

通过上面的例子,我们可以看到接口与页面对接的完整流程,从后端提供接口,到前端 AJAX 调用,再到动态渲染页面。这样做不仅实现了前后端分离,还使得页面展示的数据更加动态和灵活。

这种方式非常适合展示类似于图书列表、用户列表等结构化的数据。未来你还可以进一步优化,例如:

  • 分页展示:当数据量较大时,加入分页功能,避免页面加载时间过长。
  • 搜索功能:为页面添加搜索框,允许用户根据书名或作者进行筛选。
  • 数据缓存:使用浏览器的本地存储技术缓存数据,减少对服务器的请求次数。

这些都是提升用户体验的重要手段。希望这篇博客能帮助你理解如何将后端接口与前端页面对接!

相关推荐
Conan在掘金8 分钟前
鸿蒙 ArkUI 深水区:Stage 模型多维状态,从「组件内」跳到「应用级」的分水岭
后端
程序员黑豆25 分钟前
鸿蒙应用开发之模拟器安装与使用教程
前端·harmonyos
王莎莎38 分钟前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
前端·人工智能
长栎41 分钟前
用AI优化Redis缓存失效,我把热key问题想简单了
后端
面试鸭43 分钟前
我说我们做 Agent 从来不怕死循环,面试官调出兜底日志:“第 47 次强制终止,是你半夜爬起来按停的?”
后端·面试·求职
小小猪的春天43 分钟前
团队级 Code Review Skill 实践:4个人、4个AI、1套规则,CR从找bug变成做决策
后端·架构
长栎1 小时前
AI帮我写了个Spring Boot校验,线上漏掉了这组边界条件
后端
外滩运维专家1 小时前
Let's Encrypt 的 ACME 协议到底干了什么?用抓包带你看一遍
后端
程序员多吃鸭eatmoreduck1 小时前
# 开源初体验,39 天 800 Star:我把项目发到了哪里,流量到底从哪来
后端
zhanghaha13141 小时前
Python语言基础:4_数据类型转换
java·前端·python