JavaEE:Spring Web简单小项目实践三(留言板实现)

news2024/12/23 13:52:54

学习目的:

1、理解前后端交互过程

2、学习接口传参,数据返回以及页面展示

目录

1、准备工作

2、约定前后端交互接口

1、获取全部留言

2、发表新留言

3、实现服务器端代码

4、调整前端页面代码

5、运行测试


1、准备工作

创建SpringBoot项目,引入Spring Web依赖,添加前端页面到项目中。

前端代码:

messagewall.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>留言板</title>
    <style>
        .container {
            width: 350px;
            height: 300px;
            margin: 0 auto;
            /* border: 1px black solid; */
            text-align: center;
        }

        .grey {
            color: grey;
        }

        .container .row {
            width: 350px;
            height: 40px;

            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .container .row input {
            width: 260px;
            height: 30px;
        }

        #submit {
            width: 350px;
            height: 40px;
            background-color: orange;
            color: white;
            border: none;
            margin: 10px;
            border-radius: 5px;
            font-size: 20px;
        }
    </style>
</head>

<body>
<div class="container">
    <h1>留言板</h1>
    <p class="grey">输入后点击提交, 会将信息显示下方空白处</p>
    <div class="row">
        <span>谁:</span> <input type="text" name="" id="from">
    </div>
    <div class="row">
        <span>对谁:</span> <input type="text" name="" id="to">
    </div>
    <div class="row">
        <span>说什么:</span> <input type="text" name="" id="say">
    </div>
    <input type="button" value="提交" id="submit" onclick="submit()">
    <!-- <div>A 对 B 说: hello</div> -->
</div>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>

</script>
</body>

</html>

2、约定前后端交互接口

需求分析:

提交留言:用户输入留言信息后,后端需要把留言信息保存起来

展示留言:页面展示时,需要从后端获取到所有的留言信息

1、获取全部留言

接口定义:

请求路径:message/getList

响应:JSON格式

          [

              {

                  "from":"猫咪“,

                  "to":"小狗",

                  "message":"喵喵喵"

              },{

                  "from":"小狗“,

                  "to":"猫咪",

                  "message":"汪汪汪"

              },

             //……

         ]

        浏览器给服务器发送一个 message/getList 请求,就能返回当前一共有哪几个留言记录。结果以json的格式返回。

2、发表新留言

接口定义:

请求路径:message/publish

请求:JSON格式

           {

               "from":"小牛“,

               "to":"小羊",

               "message":"哞哞哞"

           }

我们期望浏览器给服务器发送一个请求,把当前的留言提交给服务器

3、实现服务器端代码

定义留言对象 MessageInfo 类:

import lombok.Data;

@Data
public class MessageInfo {
    private String from;
    private String to;
    private String msg;
}

@Data 是Lombok工具类中的内容,相当于自动创建了构造方法和getter/setter等,使代码更简洁明了。

Lombok工具类详解:http://t.csdnimg.cn/TAE27

创建 MessageController 类:

        因为没有引入数据库,想实现存储留言板信息的话,可以使用 List<MessageInfo> 来存储。

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/message")
public class MessageWallController {
    //存储留言信息
    private List<MessageInfo> messageInfoList = new ArrayList<>();
    @RequestMapping(value = "/publish",method = RequestMethod.POST)
    public Boolean publish(@RequestBody MessageInfo messageInfo) {
        messageInfoList.add(messageInfo);
        return true;
    }

    //获取留言信息
    @RequestMapping("/getList")
    public List<MessageInfo> getList() {
        return messageInfoList;
    }

}

4、调整前端页面代码

1、即使不进行任何操作的前提下,我们也希望留言板能显示已有的留言。

        我们使用ajax请求来实现,且要将其放在<script>标签的最前面,让其在页面加载的时候就能获取到数据:

    $.ajax({
            type: "get",
            url: "/message/getList",
            success: function (messages) {
                if (messages != null) {
                    for (var message of messages) {
                        var divE = "<div>" + message.from + "对" + message.to + "说:" +                 message.msg + "</div>";
                        $(".container").append(divE);
                    }
                }
            }
        });

2、在点击“提交”按钮的时候,我们希望能发布留言到留言板上,给服务器发送添加留言请求

function submit() {
            //1. 获取留言的内容
            var from = $('#from').val();
            var to = $('#to').val();
            var say = $('#say').val();
            if (from == '' || to == '' || say == '') {
                return;
            }

            //2.留言内容不为空,将其添加到列表中
            $.ajax({
                type: "post",
                url: "/message/publish",
                contentType: "application/json",
                data: JSON.stringify({
                    "from": from,
                    "to": to,
                    "msg": say
                }),
                success: function (result) {
                    if (result) {
                        if (result) {
                            //成功
                            //1、构造节点
                            var divE = "<div>" + from + "对" + to + "说:" + say + "</div>";
                            //2、把节点添加到页面上
                            $(".container").append(divE);
                            //3、清空输入框的值
                            $('#from').val("");
                            $('#to').val("");
                            $('#say').val("");
                        } else {
                            //失败则弹出警告,告知客户端
                            alert("发布失败");
                        }
                    }
                }
            });
        }

5、运行测试

        启动程序,通过URL 127.0.0.1:8080/messagewall.html 访问服务器即可看到:

        此时我们每次提交的数据都会发给服务器,存储在 List中,每次打开页面的时候,都会从服务器加载数据,所以只要服务器不重启,即使刷新页面,数据也不会丢失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebRTC音视频-环境搭建

目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1&#xff1a;VScode安装 2.2&#xff1a;MobaXterm安装 3:WebRTC服务器环境搭建 3.1&#xff1a;安装openssh服务器 3.2&#xff1a;安装Node.js 3.3&#xff1a;coturn穿透和转发服务器 3.3.1&a…

构建高效Node.js中间层:探索请求合并转发的艺术

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【CSS盒模型&#xff1a;掌握网页布局的核心】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&#x1f44d;收藏⭐评论✍ 引言&#x…

阿里云 https证书部署

一.申请证书 二.查看状态 查看状态&#xff0c;已签发是完成了申请证书 三.部署 我在nginx服务器上部署 具体操作链接:阿里云文档 修改前 修改后 四.重启ngnix 五.验证是否成功 在浏览器输入域名查看

maven 私服搭建(tar+docker)

maven私服搭建 一、linux安装nexus1、工具下载 二、 docker 搭建nexus1、镜像下载创建目录2、运行nexus3、访问确认&#xff0c;修改默认密码&#xff0c;禁用匿名用户登录4、创建仓库5、创建hostd仓库6、创建Blob Stores7、创建docker私服1、创建proxy仓库2、创建hotsed本地仓…

Qt自定义下拉列表-可为选项设置标题、可禁用选项

在Qt中,ComboBox&#xff08;组合框&#xff09;是一种常用的用户界面控件,它提供了一个下拉列表,允许用户从预定义的选项中选择一个。在项目开发中&#xff0c;如果简单的QComboBox无法满足需求&#xff0c;可以通过自定义QComboBox来实现更复杂的功能。本文介绍一个自定义的下…

144. 字典序最小的 01 字符串(卡码网周赛第二十六期(23年阿里淘天笔试真题))

题目链接 144. 字典序最小的 01 字符串&#xff08;卡码网周赛第二十六期&#xff08;23年阿里淘天笔试真题&#xff09;&#xff09; 题目描述 小红有一个 01 字符串&#xff0c;她可以进行最多 k 次提作&#xff0c;每次操作可以交换相邻的两个字符&#xff0c;问可以得到的…

C++的STL简介

0.STL简介 C的STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的一部分&#xff0c;它提供了一套通用的类和函数模板&#xff0c;用于处理数据结构和算法。STL的主要组件包括&#xff1a; 容器分配器算法迭代器适配器仿函数 容器 容…

制造运营管理系统(MOM系统),企业实现先进制造的关键一步

随着全球制造业的快速发展&#xff0c;企业对于生产效率和成本控制的要求日益增高。在这个背景下&#xff0c;制造运营管理系统&#xff08;MOM系统&#xff09;成为了企业提升竞争力的关键工具。盘古信息作为业内领先的智能制造解决方案提供商&#xff0c;其MOM系统更是以其卓…

作为爬虫工程师,在封装API时如何做得更好

在数据驱动的时代&#xff0c;爬虫工程师的角色日益重要。他们不仅是数据的收集者&#xff0c;更是数据的桥梁构建者&#xff0c;通过编写高效、稳定的爬虫程序&#xff0c;将互联网上的海量信息转化为有价值的数据集。而在这一过程中&#xff0c;API&#xff08;应用程序接口&…

最小二乘求待定位点的位置(三维环境)|MATLAB

前言 之前发过三点法求待测点位置的程序讲解&#xff0c;哪个是二维的&#xff0c;见&#xff1a;基于伪逆的三点法距离求位置&#xff0c;MATLAB源代码&#xff08;MATLAB函数&#xff09; 这里给出三维情况下的函数和测试代码。对于函数&#xff0c;输入已知锚点的位置、待…

唐山养老院哪家好---守护晚年幸福,用服务引领老年人高品质养老生活

随着社会的快速发展和人口老龄化趋势的加剧&#xff0c;老年人对养老机构的需求日益增长&#xff0c;选择养老机构作为养老方式已成为许多老年人的必然选择。随着年龄的增长&#xff0c;生理功能的退化和疾病风险的增加&#xff0c;使得老年人更加需要专业的医疗照护和日常生活…

无人机的发展前景大吗?

随着科技的飞速发展&#xff0c;无人机&#xff08;Unmanned Aerial Vehicle, UAV&#xff09;作为一种新兴的航空器&#xff0c;已逐渐从军事领域渗透到民用领域。无人机的应用广泛&#xff0c;包括但不限于航拍、物流配送、环境监测、农业植保、应急救援等多个领域。本文旨在…

神经网络之卷积神经网络

目录 一、卷积神经网络概述&#xff1a;1.卷积层&#xff1a;1.1卷积核与神经元&#xff1a;1.2卷积层作用&#xff1a;1.3多通道概念&#xff1a; 2.池化层&#xff1a;2.1池化层作用&#xff1a; 3.隐藏层与卷积层、池化层关系&#xff1a; 一、卷积神经网络概述&#xff1a;…

Nginx部署前端项目尝试 - windows版

前端还是要学一点服务器端的东西&#xff0c;才能更好的理解一些知识 1、项目打包 生成dist 2、下载nginx解压&#xff0c;start nginx 启动 浏览器输入 localhost 显示如下页面表示启动成功 3、配置nginx server {listen 8080;# ip 不要加http 前后不要加 /server_name…

LeetCode做题记录(第二天)169. 多数元素

题目&#xff1a;169. 多数元素 标签&#xff1a;数组 哈希表 分治 计数 排序 题目信息&#xff1a; 思路一&#xff1a; 在题目中出现了计数&#xff0c;那我们就可以直接考虑考虑使用哈希表 unordered_map 即遍历的时候记录每个数的出现次数&#xff0c;当出现次数大于n/…

无法启动此程序,因为计算机丢失api-ms-win-core-path-l1-1-0.dll的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 04

上一篇实现了客户端与服务器的通信,这一篇继续实现相关功能 本章内容 服务器与数据库的连接通信格式的规范登录信息的验证 1.数据库的建立 这里连接的是Mysql8.0数据库,如果想要简单点可以直接用sqlite3数据库,调用逻辑基本差不多,数据库语法也基本一致。 在服务器工程里…

puzzle(0611)《组合+图论》追捕问题

目录 一&#xff0c;追及问题 1&#xff0c;警察和小偷 2&#xff0c;旋转的4个硬币 3&#xff0c;抓狐狸 二&#xff0c;围堵问题 三&#xff0c;追及围堵 一&#xff0c;追及问题 1&#xff0c;警察和小偷 如下图&#xff0c;警察先走&#xff0c;警察和小偷轮流一人…

ubuntu 更新源

前言 实现一键替换在线源 一键更新源 ubuntu 全球镜像站以下支持现有ubuntu 20&#xff0c;22&#xff0c;24 echo "Delete the default source" rm -rf /etc/apt/sources.listecho "Build a new source" cat <<EOF>>/etc/apt/sources.li…

MQTT学习笔记-概念

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;消息队列遥测传输 MQTT特点 MQTT协议是为大量计算能力有限&#xff0c;且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议&#xff0c;它具有以下主要的几项特性&#xff1a; 1、使用发布…