spring MVC 简单案例(3)留言板

news2024/9/23 15:29:04

一、留言板

1)前端代码

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>
 
        function submit(){
            //1. 获取留言的内容
            var from = $('#from').val();
            var to = $('#to').val();
            var say = $('#say').val();
            if (from== '' || to == '' || say == '') {
                return;
            }
            //2. 构造节点
            var divE = "<div>"+from +"对" + to + "说:" + say+"</div>";
            //3. 把节点添加到页面上    
            $(".container").append(divE);

            //4. 清空输入框的值
            $('#from').val("");
            $('#to').val("");
            $('#say').val("");
            
        }
        
    </script>
</body>

</html>

2)需求分析

输入了谁对谁说什么,点击提交后,会在下面显示刚才输入的信息

需求是:

2.1 提交留言

  接口定义

        URL:/message/publish

        参数

                from        发表留言的人

                to            被留言的人

                message 留言的内容

        返回:提交成功/失败

                true/false

        

2.2 获取留言

  接口定义

        URL:/message/getList

        参数

                无

        返回:全部留言信息

        List<MessageInfo>

即时刷新,之前的内容也不会清空,能够保留

3)编写后端代码

package com.ameris.springmvcdemo;

public class MessageInfo {
    private String from;
    private String to;
    private String message;

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

3.1引用Lombok依赖包,使用 @Data注解 ,自动完成get、set等方法 

 当我们在写MessageInfo这个类的时候,有三个属性,每个属性都要写对应的get和set方法就很麻烦,而且代码维护性也不好,很冗余。这里可以用一个工具包 lombok可以帮我们解决。

如果是新项目,在创建的时候可以直接在 Developer Tools 里面勾选 Lombok

 如果是已经创建好的项目,可以直接在maven中央库引入 lombok 这个包,添加到 pom.xml文件中

版本不要选择最新的,选一个 比较新,大多数人用的就行

现在看,这个类,没有写get 、set 方法 ,对应的属性是灰色的

写上之后是有颜色的

把get 、set方法去掉之后,使用lombok包里的注解

@Data,可以自动实现 类里属性的get 、set等方法

此时 这些属性也是有颜色的,说明没问题。

3.2 更快引入依赖的插件 EditStarters

 安装完成之后,重启idea

在pom.xml文件,右键 ->generater -> edit Starters

如果spring官网https://start.spring.io/打不开,可以试着使用阿里云的网站https://start.aliyun.com/ ,或者将github 改成 gitee

 

之后pom.xml文件里就自动有这一段依赖代码了

 

3.3完成后端代码

package com.ameris.springmvcdemo;

import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.PrivateKey;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/message")
public class MessageController {
    private List<MessageInfo> messageInfos = new ArrayList<>();

    @RequestMapping("/publish")
    public boolean publishMessage(MessageInfo messageInfo){
        if (!StringUtils.hasLength(messageInfo.getFrom())
            ||!StringUtils.hasLength(messageInfo.getTo())
            ||!StringUtils.hasLength(messageInfo.getMessage())){
            return false;
        }
        //暂时存放在内存中,不涉及数据库
        messageInfos.add(messageInfo);
        return true;
    }

    @RequestMapping("/getList")
    public List<MessageInfo> getList(){
        return messageInfos;
    }
}

3.4测试后端代码

 

 

 3.5 前后端交互,补充前端代码

当用户点击提交按钮后,对数据进行校验,然后将数据传递给后端

<!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>

    function submit() {
      //1. 获取留言的内容
      var from = $('#from').val();
      var to = $('#to').val();
      var say = $('#say').val();
      if (from == '' || to == '' || say == '') {
        return;
      }
      $.ajax({
        type: "post",
        url: "/message/publish",
        data: {
          from: from,
          to: to,
          message: say
        },
        success: function (result) {
          //这里的返回结果是 布尔类型 的数据
          if (result == true) {
            //添加成功
            //2. 构造节点
            var divE = "<div>" + from + "对" + to + "说:" + say + "</div>";
            //3. 把节点添加到页面上
            $(".container").append(divE);
            //4. 清空输入框的值
            $('#from').val("");
            $('#to').val("");
            $('#say').val("");

          } else {
            alert("输入有误!");
          }
        }
      })



    }

  </script>
</body>

</html>

 

测试

3.6 刷新后,依旧能显示留言信息

<!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>
    //刷新页面之后,还能显示留言信息
    //一开始,就从后端 获取留言信息
    $.ajax({
      type: "get",
      url: "/message/getList",
      success: function (messages) {
        //此时返回结果 是一个 列表 List<MessageInfo>
        if (messages != null) {
          for (var message of messages) {
            //构造结点
            var divMessage = "<div>" + message.from + "对" + message.to + "说:" + message.message + "</div>";
            $(".container").append(divMessage);
          }
        } else {
          alert("暂无留言内容");
        }
      }
    })

    //点击 提交按钮 之后才会执行
    function submit() {
      //1. 获取留言的内容
      var from = $('#from').val();
      var to = $('#to').val();
      var say = $('#say').val();
      if (from == '' || to == '' || say == '') {
        return;
      }
      $.ajax({
        type: "post",
        url: "/message/publish",
        data: {
          from: from,
          to: to,
          message: say
        },
        success: function (result) {
          //这里的返回结果是 布尔类型 的数据
          if (result == true) {
            //添加成功
            //2. 构造节点
            var divE = "<div>" + from + "对" + to + "说:" + say + "</div>";
            //3. 把节点添加到页面上
            $(".container").append(divE);
            //4. 清空输入框的值
            $('#from').val("");
            $('#to').val("");
            $('#say').val("");

          } else {
            alert("输入有误!");
          }
        }
      })



    }

  </script>
</body>

</html>

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

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

相关文章

Linux中Mysql5.7主从架构(一主多从)配置教程

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

Python研究生毕业设计,数据挖掘、情感分析、机器学习

最近在学校毕业了&#xff0c;其中有很多毕业论文使用到的代码&#xff0c;如数据挖掘、情感分析、机器学习、数据预测处理、划分数据集和测试集&#xff0c;绘制分类任务&#xff0c;词汇表示&#xff1a;使用TF-IDF向量化器&#xff0c;线性回归、多元线性回归、SVR回归模型&…

OSPF概述

OSPF OSPF属于内部网关路由协议【IGP】 用于单一自治系统【Autonomous System-AS】内决策路由 自治系统【AS】 执行统一路由策略的一组网络设备的组合 OSPF概述 为了适应大型的网络&#xff0c;OSPF在AS内划分多个区域 每个OSPF路由器只维护所在区域的完整的链路状态信息 …

带您详细了解安全漏洞的产生和防护

什么是漏洞&#xff1f; 漏洞是 IT、网络、云、Web 或移动应用程序系统中的弱点或缺陷&#xff0c;可能使其容易受到成功的外部攻击。攻击者经常试图寻找网络安全中的各种类型的漏洞来组合和利用系统。 一些最常见的漏洞&#xff1a; 1.SQL注入 注入诸如 SQL 查询之类的小代…

Ubuntu 重置root密码

Ubuntu 重置root密码 当系统管理员或者授权用户忘记了root密码时&#xff0c;重置密码能够提供紧急访问系统的方法。这种情况下&#xff0c;重置密码可以避免因为密码丢失而导致的系统无法访问的问题&#xff0c;确保及时的操作和维护。在进行系统安全审计或者需要紧急恢复访问…

Git处理Failed to connect to www.google.com port 80: Timed out

Git处理Failed to connect to www.google.com port 80: Timed out 输入提交代码命令&#xff1a;git push -u origin master 报错&#xff1a;fatal: unable to access https://gitee.com/solitudeYu/gerenzhuye.git/: Failed to connect to www.google.com port 80: Timed ou…

大数据、区块链与人工智能

大数据、区块链与人工智能&#xff1a;技术融合与未来展望 摘要 本文旨在探讨大数据、区块链和人工智能这三个技术领域的基本概念、发展历程、应用场景及其相互之间的融合。文章首先分别介绍这三个技术的定义和特点&#xff0c;然后分析它们在不同行业中的实际应用&#xff0…

自动驾驶-机器人-slam-定位面经和面试知识系列01之常考公式推导(01)

李群李代数扰动bundle adjustment 这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客也会同步更新&#xff0c;全网…

DolphinScheduler学习

1.查看文档 点击访问&#xff1a;https://dolphinscheduler.apache.org/zh-cn/docs 我们可以看到相关的文档简介里有 介绍 DolphinScheduler是Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化…

电脑屏幕录制软件,分享4款(2024最新)

在今天&#xff0c;我们的电脑屏幕成为了一个多彩多姿的窗口。通过它我们可以浏览网页、观看视频、处理文档、进行游戏……有时&#xff0c;我们想要记录下这些精彩瞬间&#xff0c;与朋友分享&#xff0c;或者作为教程留存&#xff0c;这时&#xff0c;电脑屏幕录制就显得尤为…

记一次Linux应急响应全过程

本文来源无问社区&#xff0c;更多实战内容&#xff0c;渗透思路尽在无问社区http://wwlib.cn/index.php/artread/artid/17673.html 场景说明&#xff1a; 某客户的应用服务器对外开放22、80、8080端口。2021年3月28日&#xff0c;运维收到主机 CPU性能告警&#xff0c;且通…

AGI 之 【Hugging Face】 的【未来发展趋势】之 [ Transformer的扩展 ] / [ 多模态的 Transformer ]的简单整理

AGI 之 【Hugging Face】 的【未来发展趋势】之 [ Transformer的扩展 ] / [ 多模态的 Transformer ]的简单整理 目录 AGI 之 【Hugging Face】 的【未来发展趋势】之 [ Transformer的扩展 ] / [ 多模态的 Transformer ]的简单整理 一、简单介绍 二、Transformer的扩展 1、扩…

Chapter 15 Python函数进阶

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、函数多返回值二、函数的多种传参方式三、匿名函数 前言 在Python中&#xff0c;函数是组织代码、提高重用性与可读性的基本构建块。随着程序逻辑的复杂性增加&…

动手学深度学习——6.循环神经网络

1.序列模型 处理序列数据需要统计工具和新的深度神经网络架构。 为了简单起见&#xff0c;我们以 图8.1.1所示的股票价格&#xff08;富时100指数&#xff09;为例。 图8.1.1 近30年的富时100指数 其中&#xff0c;用&#x1d465;&#x1d461;表示价格&#xff0c;即在时间…

【Linux】gcc简介+编译过程

gcc是Linux系统下一款专门针对于C语言的代码编译软件。g则是Linux下针对于CPP语言的代码编译软件&#xff0c;实际上g底层也大量用了gcc代码。 目录 1.gcc基本认识与安装2.gcc编译过程2.1编译 和 链接2.2编译步骤形成的原因2.3编译器的自举2.4链接 1.gcc基本认识与安装 gcc是一…

案例实践 | 基于长安链的福建省气象综合治理区块链平台

案例名称-【福建省气象综合治理区块链平台】 ■ 实施单位 福建福链科技有限公司 ■ 业主单位 福建省气象信息中心 ■ 上线时间 2023年10月 ■ 用户群体 福建省气象、防灾减灾相关单位 ■ 用户规模 全省2100余个气象站、气象局以及防灾减灾部门 案例背景与解决痛点 …

【C++中线程学习】

1、多线程 C11之前没有引入线程的概念&#xff0c;如果想要实现多线程&#xff0c;需要借助操作系统平台提供的API&#xff0c;比如Linux的<pthead.h>&#xff0c;或者windows下的<windows.h>。 C11提供了语言层面上的多线程&#xff0c;包含在头文件<thread.h…

[微信小程序] css 解决纯数字或字母不自动换行的问题、控制文字行数

效果 css 代码 word-break: break-all; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;解释 word-break: break-all; 作用&#xff1a;这个属性允许在单词内部进行换行&#xff0c;即使单词很长也…

正向解析、反向解析、DNS主从、DNS多区域、ntp时间同步

DNS配置回顾 编号主机名IP地址说明1web服务器192.168.1.17发布部署web服务2dns服务器192.168.1.20用于解析域名和IP地址3clien主机192.168.1.18用于模拟客户机 修改 client主机&#xff1a;修改了dns的访问主机&#xff1b;临时修改echo "nameserver IP地址"&…

【Git多人协作开发】不同的分支下的多人协作开发模式

目录 0.前言背景 1.开发者1☞完成准备工作&协作开发 1.1查看分支情况 1.2创建本地分支feature-1 1.3三板斧 1.4push推本地分支feature-1到远程仓库 2.开发者2☞完成准备工作&协作开发 2.1创建本地分支feature-2 2.2三板斧 2.2push推送本地feature-2到远程仓库…