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

学习目的:

1、理解前后端交互过程

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

目录

1、准备工作

2、约定前后端交互接口

1、获取全部留言

2、发表新留言

3、实现服务器端代码

4、调整前端页面代码

5、运行测试


1、准备工作

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

前端代码:

messagewall.html

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 类:

java 复制代码
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> 来存储。

java 复制代码
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>标签的最前面,让其在页面加载的时候就能获取到数据:

html 复制代码
    $.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、在点击"提交"按钮的时候,我们希望能发布留言到留言板上,给服务器发送添加留言请求

html 复制代码
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中,每次打开页面的时候,都会从服务器加载数据,所以只要服务器不重启,即使刷新页面,数据也不会丢失。

相关推荐
晴子呀3 分钟前
Spring底层原理大致脉络
java·后端·spring
只吹45°风9 分钟前
Java-ArrayList和LinkedList区别
java·arraylist·linkedlist·区别
阿华的代码王国17 分钟前
【JavaEE】多线程编程引入——认识Thread类
java·开发语言·数据结构·mysql·java-ee
黑蛋同志17 分钟前
array和linked list的区别
java
繁依Fanyi23 分钟前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
andrew_121923 分钟前
腾讯 IEG 游戏前沿技术 一面复盘
java·redis·sql·面试
andrew_121925 分钟前
腾讯 IEG 游戏前沿技术 二面复盘
后端·sql·面试
shuxianshrng25 分钟前
鹰眼降尘系统怎么样
大数据·服务器·人工智能·数码相机·物联网
优思学院29 分钟前
优思学院|如何从零开始自己学习六西格玛?
大数据·运维·服务器·学习·六西格玛黑带·cssbb
FHKHH30 分钟前
计算机网络第二章:作业 1: Web 服务器
服务器·前端·计算机网络