Spring Web MVC 快速入门

  • 🎥 个人主页:Dikz12
  • 🔥个人专栏:Spring学习之路
  • 📕格言:吾愚多不敏,而愿加学
  • 欢迎大家👍点赞✍评论⭐收藏

目录

什么是Spring MVC? 

MVC模式介绍 

​编辑学习Spring MVC

建立连接 

@RequestMapping 使⽤

​编辑实战练习 

加法计算器

用户登录 

接口定义


什么是Spring MVC? 

 官方描述:

来自:Spring Web MVC :: Spring Framework 

 翻译为中文:

Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它更常被称“Spring MVC”。

MVC 是⼀种架构设计模式, 也⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现. 除此之外, Spring MVC还是⼀个Web框架.
所以,, Spring MVC 是⼀个实现了 MVC 模式的 Web 框架.

MVC模式介绍 

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分 为 模型、视图和控制器 三个基本部分.
  •  View(视图)指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
  •  Model(模型)是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
  • Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型.

 不过Spring在实现MVC时,也结合⾃⾝项⽬的特点,做了⼀些改变,相对⽽⾔,下⾯这个图或许更加合适.(前后端分离)

学习Spring MVC

学习SpringMVC,重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互.

主要分以下三个⽅⾯:

  1. 建⽴连接:将⽤⼾(浏览器)和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring程序。
  2. 请求:  ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能.
  3. 响应:  执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾,也就是响应.

⽐如⽤⼾去银⾏存款:

  1. 建⽴连接:去柜台
  2. 请求:带着银⾏卡,⾝份证去存款
  3. 响应:银⾏返回⼀张存折.

对于Spring MVC来说,掌握了以上3个功能就相当于掌握了Spring MVC.

建立连接 

在Spring MVC中使⽤ @RequestMapping 来实现 URL路由映射,也就是浏览器连接程序的作⽤.
 创建⼀个UserController类,实现⽤⼾通过浏览器和程序的交互,具体实现代码如下:

@RestController
public class UserController {@RequestMapping("/hello")public String test() {return "hello,spring mvc";}
}

 浏览器查看:127.0.0.1:8080/hello  ,就可以看到程序返回的数据了.

 

@RequestMapping 使⽤

@RequestMapping 是Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的.

@RequestMapping 即可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径.

@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/hello")public String test() {return "hello,spring mvc";}
}

访问地址: 127.0.0.1:8080/user/hello


实战练习 

加法计算器

需求:输⼊两个整数,点击"点击相加"按钮,显⽰计算结果.

前端代码准备: 

<!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><form action="calc/sum" method="post"><h1>计算器</h1>数字1:<input name="num1" type="text"><br>数字2:<input name="num2" type="text"><br><input type="submit" value=" 点击相加 "></form>
</body>
</html>

 接口定义:

请求路径:calc/sum
请求⽅式:GET / POST
接⼝描述:计算两个整数相加

响应内容:计算器计算结果:18

请求参数 :

参数名类型是否必须备注
num1Integer参与计算的第⼀个数
num2Integer参与计算的第⼆个数

实例:num1 = 12 && num2 = 6

 后端实现:

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

用户登录 

 需求: ⽤⼾输⼊账号和密码,后端进⾏校验密码是否正确.

  1. 如果不正确,前端进⾏⽤⼾告知
  2.  如果正确,跳转到⾸⻚. ⾸⻚显⽰当前登录⽤⼾
  3. 后续再访问⾸⻚,可以获取到登录⽤⼾信息

接口定义

1.校验接口

 接口定义:

请求路径:/user/login
请求⽅式:POST
接⼝描述:校验账号密码是否正确

请求参数:

参数名类型是否必须备注
userNameString校验的账号
passwordString校验的密码

响应数据:

Content-Type: text/html
响应内容:

    true // 账号密码验证成功

    false  //账号或密码错误

2.查询登录用户接口

接口定义:

请求路径:/user/getLoginUser
请求⽅式:GET
接⼝描述:查询当前登录的⽤⼾

响应数据:

 Content-Type: text/html


响应内容:
     用户名   // zhangsan

前端实现:

1.登录界面.

<body><h1>用户登录</h1>用户名:<input name="userName" type="text" id="userName"><br>密码:<input name="password" type="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({url: "/user/login",type : "post",data: {"userName": $("#userName").val(),"password": $("#password").val()},success:function(result) {if(result) {location.href = "/index.html";//location.assign();}else{alert("密码错误");}}});}</script>
</body>

2.登录成功界面.

<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/getLoginUser",type : "get",success : function(result) {console.log("测试");$("#loginUser").text(result);}});</script></body>

后端实现:

@RestController
@RequestMapping("/user")
public class loginController {@RequestMapping("/login")public boolean login(String userName, String password, HttpSession session){//账号密码为空 hasLength() 为null ,返回falseif (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {return false;}//校验密码是否正确 (正常情况下是要走下数据库,这里就简单实现了)if (!userName.equals("zhangsan") || !password.equals("123456")) {return false;}System.out.println(password);//密码验证成功,把用户存到session中】session.setAttribute("userName",userName);return true;}@RequestMapping("/getLoginUser")public String getLoginUser(HttpSession session) {//从session会话中直接拿String userName = (String) session.getAttribute("userName");if (StringUtils.hasLength(userName)) {return userName;}return "";}
}

测试效果:

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

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

相关文章

flask框架的初步认识

flask框架的初步认识 这是一个轻量级的网页框架&#xff0c;在运行后&#xff0c;就相当于服务器&#xff0c;当用户输入URL就会触发对应的事件调用方法&#xff0c;返回给用户一个网页文件&#xff0c;并通过自动识别html标签&#xff0c;来为用户呈现对应的样式和效果&#…

【linux kernel】linux内核hid触摸源码hid-multitouch.c剖析

文章目录 一、内核中通用hid触摸驱动二、probe过程剖析(1)hid_parse()函数(2)hid_hw_start()函数(3)hid_connect()函数三、hid-multitouch.c应用场景一、内核中通用hid触摸驱动 在linux内核中,为HID触摸面板实现了一个通用的驱动程序,位于/drivers/hid/hid-multitouch.c文件…

【vue+el-upload】当action=“#“,代表不使用默认上传,使用自定义上传,http-request获取文件流

el-upload有多种上传行为&#xff1a; 1、立即上传&#xff1a; 当 action 属性被赋予一个有效的 URL 时&#xff0c;一旦用户选择了文件&#xff0c;el-upload 组件会立即自动将文件上传到指定的服务器地址。 2、不立即上传&#xff08;自定义触发&#xff09;&#xff1a; 如…

【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用

背景 在开发 Web 应用的过程中&#xff0c;作为开发人员&#xff0c;为了确认接口的性能能够达到要求&#xff0c;我们往往需要一个接口压测工具&#xff0c;帮助我们快速地对我们所提供的 Web 服务发起批量请求。在接口联调的过程中&#xff0c;我们通常会用 Postman 等图形化…

网络编程入门之UDP编程

欢迎各位帅哥美女来捧场&#xff0c;本文是介绍UDP网络编程。在这里&#xff0c;你会见到最详细的教程&#xff1b;细致到每一行代码&#xff0c;每一个api的由来和使用它的目的等。 目录 1.UDP相关API 1.1.两个类 1.2.两个类中的方法 2.UDP编程 2.1.大体框架 2.2.内容构…

【计算机毕业设计】基于SSM++jsp的电子竞技管理平台【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

Kafka和Spark Streaming的组合使用(Spark 3.5.1)

一、安装Kafka 1.执行以下命令完成Kafka的安装&#xff1a; cd ~ //默认压缩包放在根目录 sudo tar -zxf kafka_2.11-2.3.1.tgz -C /usr/local cd /usr/local sudo mv kafka_2.11-2.3.1 kafka-2.3.1 sudo chown -R qiangzi ./kafka-2.3.1 二、启动Kafaka 1.首先需要启动K…

五月最新流行音乐网,整点干货(10个网站)听歌就要自由!

随着互联网的迅猛发展&#xff0c;音乐产业也迎来了前所未有的变革。如今&#xff0c;我们无需再依赖传统的唱片店或电台&#xff0c;就能轻松接触到来自世界各地的音乐。而“最新流行音乐网”正是这一变革的产物&#xff0c;为广大音乐爱好者提供了一个探索音乐潮流的新天地。…

深入理解WPF的ResourceDictionary

深入理解WPF的ResourceDictionary 介绍 在WPF中&#xff0c;ResourceDictionary用于集中管理和共享资源&#xff08;如样式、模板、颜色等&#xff09;&#xff0c;从而实现资源的重用和统一管理。本文详细介绍了ResourceDictionary的定义、使用和合并方法。 定义和用法 Res…

SpringCloud Alibaba Sentinel 修改Dashboard用户名和密码

目录 一、下载Sentinel的Jar包 二、在启动时修改用户名和密码的命令 三、测试登录成功 在网上找到了一大堆文章&#xff0c;没一个有用的&#xff0c;最终还是通过不断测试找到了这个方法。 一、下载Sentinel的Jar包 Releases alibaba/Sentinel GitHub 二、在启动时修改…

uniapp+vue基于移动端的药品进销存系统r275i

最后我们通过需求分析、测试调整&#xff0c;与药品进销存管理系统管理系统的实际需求相结合&#xff0c;设计实现了药品进销存管理系统管理系统。 系统功能需求包含业务需求、功能需求用户需求&#xff0c;系统功能需求分析是在了解用户习惯、开发人员技术和实力等各个因素的前…

软件安装及YOLOv8环境配置及验证

先附上本章中所用到的软件及环境安装包&#xff0c;还有YOLOv8各任务权重&#xff1a; 软件及环境配置链接&#xff1a;https://pan.baidu.com/s/1-n2HJybicA6vW1YXfGRtcA 提取码&#xff1a;6vh8 YOLOv8各权重&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1ApYUrJ_s…

快来看 2024年ICLR杰出论文奖揭晓啦 值得关注

会议之眼 快讯 在人工智能的浪潮中&#xff0c;国际学习表征会议&#xff08;ICLR&#xff09;无疑是引领学术前沿的重要会议之一&#xff01;ICLR是深度学习领域的顶级会议之一&#xff0c;由深度学习领域的两位巨头Yoshua Bengio和Yann LeCun于2013年创办。 2024年5月6日&a…

项目管理-项目绩效域2/2

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 八大绩效域包括&#xff1a;“团干部 策划开公交” 团队、干系人、不确定性、测试、规划、开发方法与生命周期、项目工作、交付。 上节…

初识C++ · 模板初阶

目录 1 泛型编程 2 函数模板 3 类模板 1 泛型编程 模板是泛型编程的基础&#xff0c;泛型我们碰到过多次了&#xff0c;比如malloc函数返回的就是泛型指针&#xff0c;需要我们强转。 既然是泛型编程&#xff0c;也就是说我们可以通过一个样例来解决类似的问题&#xff0c…

一文盘点 Partisia Blockchain 生态 4 月市场进展

Partisia Blockchain 是一个以高迸发、隐私、高度可互操作性、可拓展为特性的 Layer1 网络。通过将 MPC 技术方案引入到区块链系统中&#xff0c;以零知识证明&#xff08;ZK&#xff09;技术和多方计算&#xff08;MPC&#xff09;为基础&#xff0c;共同保障在不影响网络完整…

python与java用途区别有哪些

区别&#xff1a; 1.Python比Java简单&#xff0c;学习成本低&#xff0c;开发效率高。 2.Java运行效率高于Python&#xff0c;尤其是纯Python开发的程序&#xff0c;效率极低。 3.Java相关资料多&#xff0c;尤其是中文资料。 4.Java版本比较稳定&#xff0c;Python2和3不…

STC8增强型单片机开发——GPIO

一、理解电灯案例的代码 #include "STC8H.H"int main() {P5M0 0x00;P5M1 0x00;P53 1;while(1) {} } #include "STC8H.H" 引入头文件P5M0 0x00;P5M1 0x00;配置引脚模式P531;配置IO引脚的电平 二、头文件STC8H.H 针对 STC8H 系列芯片的头文件&#xff…

Marin说PCB之国产电源芯片方案 ---STC2620Q

随着小米加入的造车大家庭&#xff0c;让这个本来就卷的要死的造车大家庭更加卷了。随之带来的蝴蝶效应就是江湖上各个造成门派都开始了降本方案的浪潮啊&#xff0c;开始打响价格战了。各家的新能源车企也是不得不开始启动了降本方案的计划了&#xff0c;为了应对降价的浪潮。…

使用 Parallels Desktop 在 Mac 上畅玩 PC 游戏

我们不再需要接受 “Mac 不是为游戏而打造” 这一事实&#xff1b;Parallels Desktop 通过将电脑变成高性能的游戏设备&#xff0c;从而改变了一切。 Parallels Desktop 充分利用 Mac 硬件的强大功能&#xff0c;让您无缝畅玩 Windows 专享游戏。 性能得到提升&#xff0c;可玩…