Spring MVC开发小练习

1. 加法计算器

需求:输入两个整数,计算和

约定前后端交互接口:

在开发项目前,根据需求先约定好前后端交互接口,双方按照接口文档进行开发,接口文档一旦写好,尽量不要轻易改变,如果要修改,必须通知另一方知晓

接口定义:

请求路径:calc/add

请求方式:GET/POST

接口描述:计算两个整数相加

请求参数:

参数名:num1 类型:Integer 是否必须:是  备注:参与计算的第一个数

参数名:num2 类型:Integer 是否必须:是  备注:参与计算的第二个数

响应数据:

Content-Type:text/html

响应内容:计算结果是:(num1+num2)

后端代码:

@RestController
@RequestMapping("/calc")
public class CalcController {
    @RequestMapping("/add")
    public String add(Integer num1, Integer num2) {
        Integer sum = num1 + num2;
        return "计算结果是:" + sum;
    }
}

前端代码: 

这里我们放在static内:

<!DOCTYPE html>
<html lang="ch">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calc</title>
</head>
<body>
    <form action="calc/add">
        <h1>计算器</h1>
        数字1:<input type="text" name="num1"><br/>
        数字2:<input type="text" name="num2"><br/>
        <input type="submit" value="计算结果">
</form>
</body>
</html>

注意: name属性决定url中的Key

2. 用户登录

接口定义:

1.登录接口

请求路径:user/login

请求方式:POST

接口描述:校验用户名密码是否正确

请求参数:

参数1:参数名:userName 类型:String 是否必须:是 备注:用户名

参数2:参数名:password 类型:String 是否必须:是 备注:密码

响应数据:

Content-Type:text/html

响应内容:

true:登录成功

false:登录失败

2. 查询登录用户接口

请求路径:/user/getUserName

请求方式:GET/POST

接口描述:查询当前登录的用户

请求参数:无
响应数据:Content-Type:text/html

响应内容:用户名

后端代码:

@RestController
@RequestMapping("/user")
public class LoginController {
    @RequestMapping("/login")
    public Boolean login(String userName, String password, HttpSession session) {
        //储存当前用户的Session
        session.setAttribute("name", userName);
        return "Ting-666".equals(userName) && "666777".equals(password);
    }
    @RequestMapping("/getUserName")
    public String getUserName(@SessionAttribute("name") String name){
        return name;
    }
}

前端代码:

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>login</title>
</head>
<body>
    <h1>用户登录</h1>
    用户名<input type="text" name="userName" id="userName"><br/>
    密码<input type="password" name="password" id="password"><br/>
    <input type="button" value="登录" onclick="login()">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
    <script>
        function login() {
            //使用ajax发送请求
            $.ajax({
                url:"/user/login",
                type:"post",
                data:{
                    userName:$("#userName").val(),
                    password:$("#password").val()
                },
                //HTTP 响应成功
                success:function(result) {
                    if(result) {
                        location.href = "/getUserName.html";
                    }else{
                        alert("用户名或密码错误");
                    }
                }
            });
        }
    </script>
</body>
</html>

注意Jquery不能使用本地的

getUserName.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    登录人:<span id="loginUser"></span>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
    <script>
        $.ajax({
            url:"/user/getUserName",
            type:"get",
            success:function(UserName){
                $("#loginUser").text(UserName);
            }
        })
    </script>
</body>
</html>

3. 留言板

需求:实现一个留言板,把A对B说的话添加到留言版上

1. 发布留言

接口定义:

请求路径:/message/publish

请求方法:post

请求参数:

参数1:参数名:from 类型:String 是否必须:是 备注:A

参数2:参数名:to 类型:String 是否必须:是 备注:B

参数1:参数名:say 类型:String 是否必须:是 备注:说的内容

返回值:true/false 备注:成功/失败

2. 展示已有的留言

接口定义:

请求路径:/message/getMessage

请求方法:get

请求参数:无

返回值:返回一个list

后端代码:

package com.example.j20240313springmvc;

import lombok.Data;

/**
 * 存储一次留言
 */
@Data
public class Message {
    private String from;
    private String to;
    private String say;
}
//@Data 是lombok中的一个注解,可以在编译时自动生成get,set,toString 等方法
@RestController
@RequestMapping("/message")
public class MessageController {
    List<Message> messages = new ArrayList<>();
    public Boolean publish(Message message) {
        if(!StringUtils.hasLength(message.getFrom())||
                !StringUtils.hasLength(message.getTo())||
                !StringUtils.hasLength(message.getSay())) {
            return false;
        }
        messages.add(message);
        return true;
    }
    public List<Message> getMessages() {
        return messages;
    }
}

前端代码:

<!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({
        url:"/message/getMessages",
        type:"get",
        success:function(messages) {
            for(var message of messages) {
                var divE = "<div>"+message.from +"对" + message.to + "说:" + message.say+"</div>";
                $(".container").append(divE);
            }
        }
    });
    function submit(){
        var from = $('#from').val();
        var to = $('#to').val();
        var say = $('#say').val();
        $.ajax({
            url:"/message/publish",
            type:"post",
            data:{
                from:$("#from").val(),
                to:$("#to").val(),
                say:$("#say").val()
            },
            success:function(result) {
                if(result) {
                    //2. 构造节点
                    var divE = "<div>"+from +"对" + to + "说:" + say+"</div>";
                    //3. 把节点添加到页面上
                    $(".container").append(divE);
                    //4. 清空输入框的值
                    $('#from').val("");
                    $('#to').val("");
                    $('#say').val("");
                }else{
                    $('#from').val("");
                    $('#to').val("");
                    $('#say').val("");
                    alert("非法输入");
                }
            }
        });
    }

</script>
</body>

</html>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python大学生健身爱好者交流网站flask-django-nodejs-php

任何系统都要遵循系统设计的基本流程&#xff0c;本系统也不例外&#xff0c;同样需要经过市场调研&#xff0c;需求分析&#xff0c;概要设计&#xff0c;详细设计&#xff0c;编码&#xff0c;测试这些步骤&#xff0c;基于python技术、django/flask框架、B/S机构、Mysql数据…

全面:vue.config.js 的完整配置

vue.config.js是Vue项目的配置文件&#xff0c;用于配置项目的构建、打包和开发环境等。 在Vue CLI 3.0之后&#xff0c;项目的配置文件从原来的build和config目录下的多个配置文件&#xff0c;合并成了一个vue.config.js文件。这个文件可以放在项目的根目录下&#xff0c;用于…

借还款管理神器,高效记录借还款信息,让财务明细不再遗漏

在快节奏的现代生活中&#xff0c;借还款管理成为我们日常财务处理的重要一环。无论是个人生活还是企业运营&#xff0c;都需要一个高效、准确、便捷的方式来记录和追踪借还款信息。传统的记账方式往往容易出错、繁琐且耗时&#xff0c;难以满足现代人的需求。现在&#xff0c;…

HarmonyOS应用开发实战 - Api9 拍照、拍视频、选择图片、选择视频、选择文件工具类

鸿蒙开发过程中&#xff0c;经常会进行系统调用&#xff0c;拍照、拍视频、选择图库图片、选择图库视频、选择文件。今天就给大家分享一个工具类。 1.话不多说&#xff0c;先展示样式 2.设计思路 根据官方提供的指南开发工具类&#xff0c;基础的拍照、拍视频、图库选照片、选…

【Python爬虫】将某网页中表格里的十六进制颜色值转换成十进制,再生成新表格

【需求】 在 https://www.cnblogs.com/heyang78/p/5712076.html 上有360种颜色及代码&#xff0c;但很遗憾没有十进制的RGB值&#xff0c;使用时需要自己转换一下&#xff0c;此过程依赖网络或计算器&#xff0c;颇为不便。因此&#xff0c;拟设计一爬虫将原有表格内容取出&am…

dynamic动态数据源编码切换数据源

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 dynamic特性 支持…

D盘满了怎么清理?3种操作方法快速释放空间!

“我平常使用电脑时&#xff0c;为了不让c盘压力太大&#xff0c;会将大部分文件都保存在d盘上&#xff0c;但是我的d盘用着用着就满了&#xff0c;有什么比较简单的d盘清理方法吗&#xff1f;请大家分享一下吧&#xff01;” 在使用电脑的过程中&#xff0c;D盘作为重要的存储…

【网页实战项目设计】基于SSM的医院预约挂号系统

基于SSM的医院预约挂号系统 项目截图 开发环境与技术框架 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&a…

数字乡村发展策略:科技引领农村实现跨越式发展

随着信息技术的迅猛发展和数字经济的崛起&#xff0c;数字乡村发展策略已经成为引领农村实现跨越式发展的重要手段。科技的力量正在深刻改变着传统农业的生产方式、农村的社会结构以及农民的生活方式&#xff0c;为农村经济发展注入了新的活力和动力。本文将从数字乡村的内涵、…

【机器学习】基于树种算法优化的BP神经网络分类预测(TSA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】树种优化算法&#xff08;TSA&#xff09;原理及实现 2.设计与实现 数据集&#xff1a; 多输入多输出&#xff1a;样本特征24&#xff0c;标签类别…

C语言项目:数组与函数实践:扫雷游戏

目录 目录&#xff1a; 1.扫雷游戏分析与设计 1.1扫雷游戏的功能说明&#xff1a; 1.1.1使用控制台实现经典扫雷的游戏 1.1.2游戏可以通过菜单实现继续玩或者退出游戏 1.1.3扫雷棋盘是9*9的格子 1.1.4默认随机布置10个雷 1.1.5 可以排查雷 2.扫雷游戏的代码实现 1.遇到的问题…

蓝桥杯练习题总结(二)dfs题、飞机降落、全球变暖

一、飞机降落 问题描述&#xff1a; N架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 个单位时间&#xff0c;即它最早可以于 1, 时刻开始降落&#xff0c;最晚可以于时刻开始降落。降落过程需要个…

【TB作品】MSP430,单片机,Proteus仿真,数字音乐盒,蜂鸣器音乐仿真

文章目录 题目要求如何根据简谱编曲仿真图代码介绍宏定义部分全局变量部分LCD 控制函数按键检测和处理函数蜂鸣器控制函数主函数部分 获取代码和仿真 题目要求 86 数字音乐盒的制作 1 设计要求 制作一个数字音乐盒,盒内存有3首乐曲,每首不少于30s。采用LCD显示乐曲信息, 开机时…

Word2vec学习笔记

&#xff08;1&#xff09;NNLM模型&#xff08;神经网络语言模型&#xff09; 语言模型是一个单纯的、统一的、抽象的形式系统&#xff0c;语言客观事实经过语言模型的描述&#xff0c;比较适合于电子计算机进行自动处理&#xff0c;因而语言模型对于自然语言的信息处理具有重…

TnT-LLM: Text Mining at Scale with Large Language Models

TnT-LLM: Text Mining at Scale with Large Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Large Language Models (LLMs)、Text Mining、Label Taxonomy、Text Classification、Prompt-based Interface 摘要 文本挖掘是将非结构化文本转换为结构化和有意义的…

分布式锁中的王者方案 - Redission

文章目录 5.1 分布式锁-redission功能介绍5.2 分布式锁-Redission快速入门5.3 分布式锁-redission可重入锁原理5.4 分布式锁-redission锁重试和WatchDog机制5.5 分布式锁-redission锁的MutiLock原理 5.1 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&am…

JVM垃圾收集器你会选择吗?

目录 一、Serial收集器 二、ParNew收集器 三、Paralle Scavenge 四、Serial Old 五、Parallel Old 六、CMS收集器 6.1 CMS对处理器资源非常敏感 6.2 CMS容易出现浮动垃圾 6.3 产生内存碎片 七、G1 收集器 八、如何选择合适的垃圾收集器 JVM 垃圾收集器是Java虚…

CSS3新属性(学习笔记)

一、. 圆角 border-radius:; 可以取1-4个值&#xff08;规则同margin&#xff09; 可以取px和% 一般用像素&#xff0c;画圆的时候用百分比&#xff1a;border-radius:50%; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&q…

Axure RP 9 for Mac中文激活版:原型设计工具

Axure RP 9 for Mac是一款值得设计师信赖的原型设计工具。它以其卓越的性能和稳定的运行赢得了广大用户的赞誉。 软件下载&#xff1a;Axure RP 9 for Mac中文激活版下载 在Axure RP 9中&#xff0c;您可以尽情发挥自己的设计才华&#xff0c;创造出独一无二的原型作品。无论是…

MySQL5.6.11安装步骤(Windows7 64位)

MySQL5.6.11安装步骤&#xff08;Windows7 64位&#xff09; 1. 下载MySQL Community Server 5.6.21&#xff0c;注意选择系统类型&#xff08;32位/64位&#xff09; 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下。 3. 添加环境变量 变量名&#xff1a;MYS…