当前位置:   article > 正文

项目3-留言板

项目3-留言板

1.创建项目

记得将project type改为maven

 将需要的包引入其中

 更改版本号

 

引入MYSQL相关包记得进行配置!!!

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
  4. username: root
  5. password: root
  6. driver-class-name: com.mysql.cj.jdbc.Driver

2.前端页面的存放及测试

2.1 前端页面的存放 

放到该路径下!!! 

2.2 前端页面的测试

启动服务器,测试接口!!!

成功!!!

3.用户接口定义 

需求分析
后端需要提供两个服务
1. 提交留言: 用户输⼊留⾔信息之后, 后端需要把留⾔信息保存起来(传参)
2. 展⽰留言: 页面展示时, 需要从后端获取到所有的留⾔信息(相应)

接⼝定义
1. 获取全部留⾔
全部留⾔信息, 我们⽤List来表⽰, 可以⽤JSON来描述这个List数据.
请求:

GET /message/getList 

响应: JSON 格式

[
 {
 "from": "⿊猫",
 "to": "⽩猫",
 "message": "喵"
 },{
 "from": "⿊狗",
 "to": "⽩狗",
 "message": "汪"
 },
 //...
]

浏览器给服务器发送⼀个 GET /message/getList 这样的请求, 就能返回当前⼀共有哪些留⾔
记录. 结果以 json 的格式返回过来

2. 发表新留言
请求: body 也为 JSON 格式 

POST /message/publish
{
 "from": "⿊猫",
 "to": "⽩猫",

 "message": "喵"
}

响应: JSON 格式.

{
 ok: 1
}

我们期望浏览器给服务器发送⼀个 POST /message/publish 这样的请求, 就能把当前的留⾔提交给服务器.

4.服务器代码的实现 

4.1 留言对象类

  1. package com.example.demo.model;
  2. import lombok.Data;
  3. @Data
  4. public class MessageInfo {
  5. private String from;
  6. private String to;
  7. private String message;
  8. }

规范代码,使用三层架构!!!

使⽤List<MessageInfo> 来存储留⾔板信息

4.2 Controller类,主要代码 

  1. package com.example.demo;
  2. import com.example.demo.model.MessageInfo;
  3. import org.springframework.util.StringUtils;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. @RestController
  9. @RequestMapping("/message")
  10. public class controller {
  11. private List<MessageInfo> messageInfos=new ArrayList<>();//存放前端返回的数据
  12. //将所有存放的数据返回
  13. @RequestMapping("/getList")
  14. public List<MessageInfo> getList() {
  15. return messageInfos;
  16. }
  17. //留言板相关操作,需要验证留言板操作是否正确,不为空时才能提交正确
  18. @RequestMapping("/publish")
  19. public boolean publish(MessageInfo messageInfo) {
  20. System.out.println(messageInfo);
  21. if (StringUtils.hasLength(messageInfo.getFrom())
  22. && StringUtils.hasLength(messageInfo.getTo())
  23. && StringUtils.hasLength(messageInfo.getMessage())) {
  24. messageInfos.add(messageInfo);
  25. return true;
  26. }
  27. return false;
  28. }
  29. }

4.3 测试接口

先添加数据,再获取数据,即先测试/publish接口再测试/getList接口

 

测试成功!!!接口正确!!!

5.前后端交互 

修改前端代码

1. 添加 load 函数, ⽤于在⻚⾯加载的时候获取数据(一进来就直接执行这个接口)

相当于Java中的定义函数,定义了需要调用才行。

  1. load();
  2. function load() {
  3.  $.ajax({
  4.  type: "get",
  5.  url: "/message/getList",
  6.  success: function (result) {
  7. for (var message of result) {
  8. var divE = "<div>" + message.from + "对" + message.to + "说:" + m
  9. $(".container").append(divE);
  10. }
  11. }
  12. });
  13. }

2.点击提交按钮出发的submit()

  1. function submit(){
  2. //1. 获取留言的内容
  3. var from = $('#from').val();
  4. var to = $('#to').val();
  5. var say = $('#say').val();
  6. if (from== '' || to == '' || say == '') {
  7. return;
  8. }
  9. $.ajax({
  10. type: "post",
  11. url: "/message/publish",
  12. data: {
  13. from: form,
  14. to: to,
  15. message: say
  16. // 注意变量要与前端定义一致,否则前端拿不到变量数据
  17. },
  18. success: function(result){
  19. if(result==true){
  20. //添加成功
  21. //2. 构造节点
  22. var divE = "<div>" + from + "对" + to + "说:" + say + "</div>";
  23. //3. 把节点添加到页面上
  24. $(".container").append(divE);
  25. //4. 清空输入框的值
  26. $('#from').val("");
  27. $('#to').val("");
  28. $('#say').val("");
  29. }else{
  30. alert("你输入有误哦!!!")
  31. }
  32. }
  33. });
  34. }

5.1 测试

前端代码测试无反应,开始排除错误!!!

前端和后端接口测试无误!!

考虑前后端交互有问题!!!

经过检查右侧拼写有误

同时我发现我们输入空值没有反应

我们发现是由于我们加入了该语句

删除,重新测试!!!

成功!!!

完整前端代码

  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. <style>
  8. .container {
  9. width: 350px;
  10. height: 300px;
  11. margin: 0 auto;
  12. /* border: 1px black solid; */
  13. text-align: center;
  14. }
  15. .grey {
  16. color: grey;
  17. }
  18. .container .row {
  19. width: 350px;
  20. height: 40px;
  21. display: flex;
  22. justify-content: space-between;
  23. align-items: center;
  24. }
  25. .container .row input {
  26. width: 260px;
  27. height: 30px;
  28. }
  29. #submit {
  30. width: 350px;
  31. height: 40px;
  32. background-color: orange;
  33. color: white;
  34. border: none;
  35. margin: 10px;
  36. border-radius: 5px;
  37. font-size: 20px;
  38. }
  39. </style>
  40. </head>
  41. <body>
  42. <div class="container">
  43. <h1>留言板</h1>
  44. <p class="grey">输入后点击提交, 会将信息显示下方空白处</p>
  45. <div class="row">
  46. <span>谁:</span> <input type="text" name="" id="from">
  47. </div>
  48. <div class="row">
  49. <span>对谁:</span> <input type="text" name="" id="to">
  50. </div>
  51. <div class="row">
  52. <span>说什么:</span> <input type="text" name="" id="say">
  53. </div>
  54. <input type="button" value="提交" id="submit" onclick="submit()">
  55. <!-- <div>A 对 B 说: hello</div> -->
  56. </div>
  57. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
  58. <script>
  59. load();
  60. function load() {
  61. $.ajax({
  62. type: "get",
  63. url: "/message/getList",
  64. success: function(result) {
  65. for (var message of result) {
  66. var divE = "<div>" + message.from + "对" + message.to + "说:" + message.message+"<div>";
  67. $(".container").append(divE);
  68. // 想在class底下添加这条语句
  69. }
  70. }
  71. });
  72. }
  73. function submit(){
  74. //1. 获取留言的内容
  75. var from = $('#from').val();
  76. var to = $('#to').val();
  77. var say = $('#say').val();
  78. $.ajax({
  79. type: "post",
  80. url: "/message/publish",
  81. data: {
  82. from: from,
  83. to: to,
  84. message: say
  85. // 注意变量要与前端定义一致,否则前端拿不到变量数据
  86. },
  87. success: function(result){
  88. if(result==true){
  89. //添加成功
  90. //2. 构造节点
  91. var divE = "<div>" + from + "对" + to + "说:" + say + "</div>";
  92. //3. 把节点添加到页面上
  93. $(".container").append(divE);
  94. //4. 清空输入框的值
  95. $('#from').val("");
  96. $('#to').val("");
  97. $('#say').val("");
  98. }else{
  99. alert("你输入有误");
  100. }
  101. }
  102. });
  103. }
  104. </script>
  105. </body>
  106. </html>

5.2 前端修饰

未完!!! 

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

闽ICP备14008679号