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://www.mzph.cn/pingmian/8423.shtml

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

相关文章

node.js对数据库mysql的连接与操作(增、删、改、查、五种SQL语法)

前提&#xff1a;先在vscode终端下载安装mysql&#xff1a;npm install mysql -save 步骤总结&#xff1a; (1)建立与数据库的连接 (2)做出请求&#xff1a; 实际上就是操作mysql里的数据。增删改查 insert、delete、updata、select (3)通过回调函数获取结果 一、什么是SQ…

【电容】220V整流后加不加滤波电容,加多大,加了后为什么测得电压不一样了?

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计

机器学习笔记03

1.线性回归&#xff08;linear regression&#xff09; 是利用回归方程&#xff08;函数&#xff09;对一个或者多个自变量&#xff08;特征值&#xff09;和因变量&#xff08;目标值&#xff09;之间关系进行建模的一种分析方法。 线性模型&#xff1a; 1.线性关系&#xff1…

【Kubernetes集群一主二从安装教程】

文章目录 环境准备主机间做信任安装ansible工具 升级内核版本使用elrepo源升级内核查看最新版内核安装最新的内核版本设置系统默认内核设置默认内核为我们刚才升级的内核版本 初始化关闭防火墙关闭selinux关闭swap修改主机名修改hosts文件将桥接的IPv4流量传递到iptables的链配…

论系统测试在互联网诈骗信息防范系统中的应用

引言 随着互联网的普及&#xff0c;互联网诈骗活动也日益猖獗。为了防范互联网诈骗&#xff0c;构建一个有效的互联网诈骗信息防范系统至关重要。系统测试在该系统中发挥着至关重要的作用&#xff0c;可以确保系统满足用户需求&#xff0c;并符合既定的质量标准。 系统测试的…

nlp课设 - 基于BERT 的情感分类

基于BERT 的情感分类 主要论文&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&#xff08;双向Transformer 的预训练&#xff09; 核心技术&#xff1a; Embedding 、Attention --> Transformer 任务简介、拟解决问题…

什么是oneflow

一&#xff0c;什么是OneFlow&#xff1f; OneFlow是一个用于机器学习的开源软件框架&#xff0c;它允许研究人员和开发人员设计、训练和部署机器学习模型。机器学习是人工智能的一个分支&#xff0c;它使计算机能够从数据中学习并做出预测或决策&#xff0c;而不需要明确编程…

09 - 数据清洗案例

流程图 kettle 面板图片 操作步骤 1、订阅数据源&#xff08;kafka consumer&#xff09; 2、抽取字段并转换key&#xff08;JSON input&#xff09; 3、判断img字段是否有值&#xff0c;有的话进行url转base64&#xff08;JavaScript 代码&#xff09; // 获取输入字段的值 v…

流量分析利器arkime的学习之路(三)---结合Suricata攻击检测

1、基础 Arkime安装部分参考《流量分析利器arkime的学习之路&#xff08;一&#xff09;—安装部署》 在此基础上安装suricata软件并配置。 2、安装suricata yum install suricate 可能依赖的文件包括libyaml&#xff0c;PyYAML&#xff0c;这些可能在之前安装arkime或者其他…

【遥感图像】多光谱与全色图像相关知识总结

多光谱图像&#xff08;MS&#xff09;和全色图像&#xff08;PAN&#xff09;是遥感技术中常用的两种图像类型&#xff0c;它们各自具有独特的特点和应用优势。以下是对这两种图像类型的详细解释和分析&#xff1a; 多光谱图像 (MS) 光谱分辨率&#xff1a;MS图像由多个光谱波…

面试二十四、继承多态

一、继承的本质和原理 组合&#xff08;Composition&#xff09;&#xff1a; 组合是一种"有一个"的关系&#xff0c;表示一个类包含另一个类的对象作为其成员。这意味着一个类的对象包含另一个类的对象作为其一部分。组合关系通常表示强关联&#xff0c;被包含的对象…

什么是状态模式,有哪些应用?

一、定义及应用场景&#xff1a; 状态模式允许一个对象在其内部状态发生改变时改变它的行为&#xff0c;使其看起来像是修改了其类。它通过将对象的行为包装在不同状态对象中&#xff0c;实现了在运行时更改对象的状态&#xff0c;从而影响其行为。 状态模式也有很多实际的应…

Terrain —— Nodes

目录 Convert HeightField —— 转化高度场 HeightField —— 为地形创建初始高度场或遮罩场 HeightField Blur —— 模糊高度场或遮罩场 HeightField Clip —— 限制高度场的值 HeightField Combine Layers —— 将多个volume或VDB合并为一个新的volume或VDB HeightFiel…

我独自升级崛起怎么玩 我独自升级崛起游玩教程分享

《我独自升级&#xff1a;ARISE》是一款预计在 Android、iOS 和 PC 平台推出的动作 RPG&#xff0c;故事内容基于网络漫画版本改编&#xff0c;讲述世界各地出现「次元传送门」&#xff0c;而少部分人类觉醒了可以对抗传送门中怪物的「猎人」能力&#xff0c;玩家可以在故事模式…

【进程等待】是什么 | 为什么 | 怎么办 | wait阻塞等待

目录 进程等待是什么&#xff1f; 为什么要进程等待&#xff1f; 如何进程等待&#xff1f; wait 阻塞等待 进程等待是什么&#xff1f; 进程终止会把进程退出的数据&#xff08;退出码和退出信号&#xff09;存放到进程的PCB中保存下来&#xff0c;让父进程进行等待。…

【投稿资讯】区块链会议CCF C -- CoopIS 2024 截止7.10 附录用率

会议名称&#xff1a;CoopIS CCF等级&#xff1a;CCF C类学术会议 类别&#xff1a;人机交互与普适计算 录用率&#xff1a;2023年接收率21% (21 regular 10 work-in-progress papers/100) AREA 5: HUMAN-CENTRIC SECURITY AND PRIVACY IN INFORMATION SYSTEMS Access Con…

.net core 8版本读取wwwroot目录下的静态文件方法,通过访问接口可以直接信息访问查看的方式

1、安装Nuget依赖包&#xff1a;Microsoft.AspNetCore.StaticFiles 2、在Program.cs中注册中间件 app.UseStaticFiles();3、将业务接口和实现类在Program.cs中注入到运行时 builder.Services.AddScoped<IModelServive,ModelServiveImpl>();4、新建IModelServive接口&am…

Linux网站服务

1.概念:HTML:超级文本编辑语言 网页:使用HTML,PHP,JAVA语言格式书写的文件。 主页:网页中呈现用户的第一个界面。 网站:多个网页组合而成的一台网站服务器。 URL:统一资源定位符&#xff0c;访问网站的地址。 网站架构:LAMP: LinuxApacheMYSQLPHP(系统服务器程序数据管理…

Sychronized 和 Lock 的区别

锁 Sychronized锁入门实例 public class SychronizedDemo {public static void main(String[] args) {SychronizedDemo sychronizedDemo new SychronizedDemo();sychronizedDemo.deposit(1000);sychronizedDemo.syncmethod();}//同步方法public synchronized void syncmetho…

OpenHarmony 实战开发 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境&#xff1a;Windows 11 编译环境&#xff1a;Ubuntu 22.04 开发板型号&#xff1a;DAYU 200&#xff08;RK3568&#xff09; 系统版本&#xff1a;OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…