当前位置:   article > 正文

简易留言板

简易留言板

目录

前端实现

数据库的使用

创建数据表

创建项目

连接数据库

后端实现

接口定义

持久层

业务逻辑层

控制层

前端代码完善


留言板是一个常见的功能,在本篇文章中,将实现一个简易的留言板:

页面中能够显示所有留言内容,当点击发布留言后,内容会在下方空白处进行显示

前端实现

在这里,使用的是 HTML、CSS 和 JavaScript 实现:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>简易留言板</title>
  7. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
  8. <style>
  9. .container {
  10. margin: 20px;
  11. }
  12. .submit {
  13. width: 150px;
  14. height: 40px;
  15. background-color: #ffb3a7;
  16. color: white;
  17. border: none;
  18. margin: 10px;
  19. border-radius: 5px;
  20. font-size: 20px;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div class="container">
  26. <h1>简易留言板</h1>
  27. <form id="messageForm">
  28. <label for="author">作者:</label>
  29. <input type="text" id="author" required><br>
  30. <label for="content">内容:</label><br>
  31. <textarea id="content" rows="4" cols="50" required></textarea><br>
  32. <button type="submit" class="submit">发布留言</button>
  33. </form>
  34. </div>
  35. <script>
  36. // 监听表单提交事件
  37. $('#messageForm').submit(function(event) {
  38. event.preventDefault(); // 阻止表单默认提交行为
  39. var author = $('#author').val();
  40. var content = $('#content').val();
  41. if (author && content) {
  42. //构造节点
  43. var divE = '<div>' + author + '留言:' + content;
  44. // 将节点添加到页面上
  45. $('.container').append(divE);
  46. // 清空表单输入框
  47. $('#author').val('');
  48. $('#content').val('');
  49. }else {
  50. alert('作者和内容不能为空!');
  51. }
  52. });
  53. </script>
  54. </body>
  55. </html>

当我们点击提交后,留言内容显示在下方空白处

当我们进行刷新时,数据就会丢失,要想数据不丢失,需要将数据存储在数据库中

数据库的使用

要想使用数据库存储数据,我们首先需要创建数据表

创建数据表

  1. DROP TABLE IF EXISTS message_info;
  2. CREATE TABLE `message_info` (
  3. `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
  4. `author` VARCHAR ( 127 ) NOT NULL,
  5. `message` VARCHAR ( 256 ) NOT NULL,
  6. `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
  7. `create_time` DATETIME DEFAULT now(),
  8. `update_time` DATETIME DEFAULT now() ON UPDATE now(),
  9. PRIMARY KEY ( `id` )
  10. ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;

此时,创建出表 message_info

虽然当前实现的留言板不涉及更新和删除操作,但在这里仍然创建了字段 delete_flag、update_flag,若后续增加了相关功能,则不需要再对数据表进行修改

接下来我们使用 MyBatis 来实现数据的操作

创建项目

我们首先创建SpringBoot工程,并引入MyBatis 和 MySQL驱动依赖

连接数据库

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
  4. username: root
  5. password: 123123
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. mybatis:
  8. configuration: #打印 MyBatis 日志
  9. map-underscore-to-camel-case: true #驼峰字段转换

连接好数据库后,我们就可以开始编写后端代码了

后端实现

我们首先创建留言对象 MessageInfo 类

  1. package com.example.messageboard.model;
  2. import lombok.Data;
  3. import java.util.Date;
  4. @Data
  5. public class MessageInfo {
  6. private Integer id;
  7. private String author;
  8. private String message;
  9. private Integer deleteFlag;
  10. private Date createTime;
  11. private Date updateTime;
  12. }

根据留言板的需求可看出,后端需要提供两个服务:

1. 添加留言:用户输入留言信息后,后端需要将留言信息存到数据库中

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

接口定义

添加留言

[URL]

POST /message/publish

[请求参数]

author=ppp&message=ppp

[响应]

true //添加成功

false //添加失败

显示留言

[URL]

GET /message/getList

[请求参数]

[响应]

返回留言列表

[

    {

        "id": 1,

        "author": "aa",

        "message": "aa",

        "deleteFlag": 0,

        "createTime": "2024-05-11T09:42:59.000+00:00",

        "updateTime": "2024-05-11T09:42:59.000+00:00"

    },

    {

        "id": 2,

        "author": "aa",

        "message": "aa",

        "deleteFlag": 0,

        "createTime": "2024-05-11T09:52:01.000+00:00",

        "updateTime": "2024-05-11T09:52:01.000+00:00"

    },

    {

        "id": 3,

        "author": "aa",

        "message": "aa",

        "deleteFlag": 0,

        "createTime": "2024-05-11T09:52:15.000+00:00",

        "updateTime": "2024-05-11T09:52:15.000+00:00"

    }

]

持久层

将应用程序的数据持久化到数据库中,并提供对数据库的访问操作

实现向数据库中添加留言和从数据库中查询所有留言:

  1. package com.example.messageboard.mapper;
  2. import com.example.messageboard.model.MessageInfo;
  3. import org.apache.ibatis.annotations.Insert;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.Select;
  6. import java.util.List;
  7. @Mapper
  8. public interface MessageInfoMapper {
  9. @Insert("insert into message_info (`author`, `message`) values (#{author}, #{message})")
  10. Integer addMessage(MessageInfo messageInfo);
  11. @Select("select `id`, `author`, `message`,`delete_flag`, `create_time`, `update_time` from message_info where delete_flag = 0")
  12. List<MessageInfo> queryAll();
  13. }

业务逻辑层

处理具体的业务逻辑

由于留言板的功能简单,不需要进行其他的处理,因此,我们直接调用messageInfoMapper的方法并返回即可

  1. package com.example.messageboard.service;
  2. import com.example.messageboard.mapper.MessageInfoMapper;
  3. import com.example.messageboard.model.MessageInfo;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class MessageInfoService {
  9. @Autowired
  10. private MessageInfoMapper messageInfoMapper;
  11. public int addMessage(MessageInfo messageInfo) {
  12. return messageInfoMapper.addMessage(messageInfo);
  13. }
  14. public List<MessageInfo> queryAll() {
  15. return messageInfoMapper.queryAll();
  16. }
  17. }

控制层

接收前端发送的请求,对请求进行处理,并响应数据

添加留言:进行参数校验,校验通过后添加留言 

查询留言:返回留言列表

  1. package com.example.messageboard.controller;
  2. import com.example.messageboard.model.MessageInfo;
  3. import com.example.messageboard.service.MessageInfoService;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.util.StringUtils;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import java.util.List;
  10. @RequestMapping("/message")
  11. @RestController
  12. @Slf4j
  13. public class MessageInfoController {
  14. @Autowired
  15. private MessageInfoService messageInfoService;
  16. /**
  17. * 发布留言
  18. * @param messageInfo
  19. * @return
  20. */
  21. @RequestMapping("/publish")
  22. public boolean publish(MessageInfo messageInfo){
  23. log.info("接收到参数messageInfo: {}", messageInfo);
  24. //参数校验
  25. if(!StringUtils.hasLength(messageInfo.getAuthor())
  26. || !StringUtils.hasLength(messageInfo.getMessage())){
  27. return false;
  28. }
  29. int result = messageInfoService.addMessage(messageInfo);
  30. if(result > 0){
  31. return true;
  32. }
  33. return false;
  34. }
  35. /**
  36. * 获取留言列表
  37. * @return
  38. */
  39. @RequestMapping("/getList")
  40. public List<MessageInfo> getList(){
  41. return messageInfoService.queryAll();
  42. }
  43. }

后端代码编写完成后,我们运行程序,并进行测试:

我们首先测试添加留言:

分别测试 添加成功、未输入昵称、未输入留言三种情况下的添加:

结果正确

我们再测试显示留言:

结果正确 

接下来,我们来完善客户端代码

前端代码完善

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>简易留言板</title>
  7. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
  8. <style>
  9. .container {
  10. margin: 20px;
  11. }
  12. .submit {
  13. width: 150px;
  14. height: 40px;
  15. background-color: #ffb3a7;
  16. color: white;
  17. border: none;
  18. margin: 10px;
  19. border-radius: 5px;
  20. font-size: 20px;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div class="container">
  26. <h1>简易留言板</h1>
  27. <form id="messageForm">
  28. <label for="author">作者:</label>
  29. <input type="text" id="author" required><br>
  30. <label for="content">内容:</label><br>
  31. <textarea id="content" rows="4" cols="50" required></textarea><br>
  32. <button type="submit" class="submit">发布留言</button>
  33. </form>
  34. </div>
  35. <script>
  36. //获取留言
  37. $.ajax({
  38. url: '/message/getList',
  39. method: 'GET',
  40. success: function(messageInfos) {
  41. // console.log(messageInfos);
  42. var divE = "";
  43. for(var message of messageInfos){
  44. divE += '<div>' + message.author + '留言:' + message.message;
  45. }
  46. $('.container').append(divE);
  47. },
  48. error: function(error) {
  49. console.error('获取留言列表时发生错误:', error);
  50. }
  51. });
  52. // 监听表单提交事件
  53. $('#messageForm').submit(function(event) {
  54. event.preventDefault(); // 阻止表单默认提交行为
  55. var author = $('#author').val();
  56. var content = $('#content').val();
  57. if (author && content) {
  58. // 发送 AJAX 请求保存留言
  59. $.ajax({
  60. url: '/message/publish',
  61. method: 'POST',
  62. data: { author: author, message: content },
  63. success: function(result) {
  64. console.log(result);
  65. //构造节点
  66. var divE = '<div>' + author + '留言:' + content;
  67. // 将节点添加到页面上
  68. $('.container').append(divE);
  69. // 清空表单输入框
  70. $('#author').val('');
  71. $('#content').val('');
  72. },
  73. error: function(error) {
  74. console.error('保存留言时发生错误:', error);
  75. }
  76. });
  77. } else {
  78. alert('作者和内容不能为空!');
  79. }
  80. });
  81. </script>
  82. </body>
  83. </html>

最后,我们进行测试:

所有留言信息成功显示,且新添加的留言信息也在下方成功显示 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/573072
推荐阅读
相关标签
  

闽ICP备14008679号