SpringMVC

文章目录

  • 一.SpringMVC的概念
    • 1.1 Spring的概念
    • 1.2 MVC和SpringMVC的关系
  • 二.SpringMVC步骤
    • 2.1 创建一个springMVC项目
    • 2.2 获取参数的功能
    • 2.3 输出参数的功能
  • 三.SpringMVC的注解介绍
    • 3.1 获取参数
      • 3.1.1 获取参数单个参数
      • 3.1.2 获取多个参数
      • 3.1.3获取对象
      • 3.1.4 获取json对象
      • 3.1.5 从基础的url获取参数
      • 3.1.6 获取上传文件
      • 3.1.7 获取Cookie
      • 3.1.8 获取header
      • 3.1.9 获取Seesion
    • 3.2 返回数据
      • 3.2.1 返回静态页面
      • 3.2.2 返回非静态页面
    • 四.其他

一.SpringMVC的概念

1.1 Spring的概念

SpringMVC是一个Java框架,用于开发基于Java的Web应用程序。它是Spring框架的一部分,专注于在Web应用程序中实现Model-View-Controller(MVC)设计模式。MVC模式是一种常用的软件设计模式,用于将应用程序的逻辑分离成三个主要组件:模型(Model)、视图(View)和控制器(Controller),从而实现代码的解耦和更好的可维护性。
大家看下面的图片,就知道现在这个流程了.
在这里插入图片描述

1.2 MVC和SpringMVC的关系

MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序的逻辑分离成三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这个模式的目的是实现代码的解耦和更好的可维护性。

SpringMVC是Spring框架的一部分,专注于在Java Web应用程序中实现MVC设计模式。因此,可以说SpringMVC是Spring框架对MVC模式的具体实现。它提供了一组组件和工具,用于开发基于Java的Web应用程序,并按照MVC模式来组织应用程序的代码结构。

下面是MVC和SpringMVC之间的关系:

MVC是一种设计模式:MVC是一种通用的设计模式,不仅用于Web应用程序,还可以用于其他类型的应用程序。它将应用程序划分为模型、视图和控制器,每个组件有自己的职责,从而实现了代码的分离和解耦。

SpringMVC是MVC在Spring框架中的实现:SpringMVC是Spring框架为Web应用程序提供的MVC实现。它通过控制器(Controller)、视图(View)、模型(Model)、处理器映射器(Handler Mapping)、视图解析器(View Resolver)等组件来实现MVC模式。

Spring框架是更大范围的解决方案:Spring框架提供了广泛的功能和模块,用于开发企业级Java应用程序。除了SpringMVC,它还包括Spring Core(核心容器)、Spring Security(安全)、Spring Data(数据访问)、Spring AOP(面向切面编程)等模块。SpringMVC是Spring框架的一个模块,用于处理Web应用程序的请求和响应。

综上所述,MVC是一种通用的设计模式,而SpringMVC是Spring框架对MVC模式在Web应用程序中的具体实现。使用SpringMVC,开发者可以更轻松地构建灵活可扩展的Java Web应用程序,并且能够充分利用Spring框架的其他功能和特性。

二.SpringMVC步骤

我们学习SpringMVC需要掌握一下3个功能:

  1. 连接的功能︰将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的
    Spring程序。
  2. 获取参数的功能︰用户访问的时候会带一些参数,在程序中要想办法获取到参数。
  3. 输出数据的功能:执行了业务逻辑之后,要把程序执行的结果返回给用户。
    对于Spring MVC 来说,掌握了以上3个功能就相当于掌握了Spring MVC。
    我们先来做一个简单的demo

2.1 创建一个springMVC项目

实际上springMVC项目可以基于springboot创建,创建一个sprigboot项目,再勾选上springWeb就创建好了.
在这里插入图片描述
创建一个UserController 类,实现用户到Spring程序的互联互通.
代码入下:

public class UserController {public String hi(String name) {return "spring mvc hi" +name;}}

2.2 获取参数的功能

获取参数的功能,就是依赖一个注解,代码如下:

public class UserController {@RequestMapping("/hi")public String hi(String name) {return "spring mvc hi" + name;}}

2.3 输出参数的功能

输出参数的功能,要在类上加入一个注解,这个注解就是@RestController
代码如下:

@RestController
public class UserController {@RequestMapping("/hi")public String hi(String name) {return "spring mvc hi" + name;}}

最后的大致流程如图所示.
在这里插入图片描述

看了上面的流程之后,我接下来会介绍获取参数和答应参数的一些注解

三.SpringMVC的注解介绍

3.1 获取参数

3.1.1 获取参数单个参数

三种请求方式
@RequestMapping
@GetMapping
@PostMapping
代码如下:

   @RequestMapping("/e1")public String example(String str){return "hello world "+str;}@GetMapping("/e2")public String example2(String str){return "hello world "+str;}@PostMapping("/e3")public String example3(String str){return "hello world "+str;}

在这里插入图片描述

3.1.2 获取多个参数

代码如下:

 @RequestMapping("/e4")public String example4(String username,String password){return "hello world "+ username +" "+ password;}

在这里插入图片描述

3.1.3获取对象

获取对象的步骤
1.检查控制器方法的参数列表,发现有一个类型为User的参数。
2.根据请求参数名username和password ,id 和age 与User类中的属性名匹配,创建User对象。
3.将请求参数的值绑定到User对象的属性上。
4.将创建并填充好的User对象传递给saveUser方法,作为参数。

 @RequestMapping("/reg")public Object example6(User user){System.out.println(user);return user;}

在这里插入图片描述

3.1.4 获取json对象

这里具体的步骤就是:
1.前端发送JSON数据:前端通过AJAX或其他方式将JSON数据发送给后端。确保请求的Content-Type设置为application/json,以便告知后端该请求包含JSON数据。

2.创建Java对象:在后端的控制器方法中,创建对应的Java对象,用于接收JSON数据。这个Java对象通常是一个POJO(Plain Old Java Object),包含与JSON数据字段对应的属性。

3.使用@RequestBody注解:在控制器方法参数中使用@RequestBody注解来接收JSON数据,并将其转换为Java对象。

4.处理JSON数据:在控制器方法中,你可以对接收到的Java对象进行业务逻辑的处理。
代码如下:

    @RequestMapping("/reg2")public Object example7(@RequestBody User user){System.out.println(user);return user;}

这里我们就不构造前端界面了,我们直接使用postman来构造请求.
在这里插入图片描述

3.1.5 从基础的url获取参数

代码如下:

//6.从基础的url获取参数@RequestMapping("/url/{username}/{password}")public String  example8(@PathVariable String username,@PathVariable String password){return "username "+ username + "password  " +password;}

在这里插入图片描述

3.1.6 获取上传文件

具体步骤:
1.客户端发送一个带有文件上传的multipart/form-data类型的POST请求时
2.Spring MVC会将上传的文件数据自动绑定到file参数,
在这里插入图片描述

具体代码如下:

 @RequestMapping("/myupload1")public Object upload1(@RequestPart("myimg") MultipartFile file){File file1=new File("D:\\Study\\java\\myimg.jpg");try {file.transferTo(file1);return true;}catch (IOException ioException){ioException.printStackTrace();}return false;}

这里的如果反复提交文件,文件会被覆盖,为了防止我们上传文件,被覆盖,我们修改了一下代码:

 @RequestMapping("/myupload2")public Object upload2(@RequestPart("myimg") MultipartFile file) {String fileName = UUID.randomUUID() + // 文件名file.getOriginalFilename().substring( // 文件后缀file.getOriginalFilename().lastIndexOf("."));File saveFile = new File("D:\\Data\\" + fileName);try {file.transferTo(saveFile);return true;} catch (IOException e) {e.printStackTrace();}return false;}

3.1.7 获取Cookie

@RequestMapping("/getCk")public Object getCk(@CookieValue(value = "java",required = false) String java){return java;}

3.1.8 获取header

 @RequestMapping("/gethd")public Object getHeader(@RequestHeader("Host") String ht) {return "Host -> " + ht;}

3.1.9 获取Seesion

   /*** 存储 session*/private static final String SESSION_KEY = "USERINFO_SESSION_KEY";@RequestMapping("/setsess")public void setSess(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute(SESSION_KEY, "zhangsan");}/*** 获取 session*/@RequestMapping("/getsess")public Object getSession(@SessionAttribute(SESSION_KEY) String name) {return "session->" + name;}

3.2 返回数据

3.2.1 返回静态页面

在这里插入图片描述

3.2.2 返回非静态页面

在这里插入图片描述

四.其他

补充以下请求转发和充定向的区别:

  1. 执行位置:
    重定向:是在客户端(浏览器)发生的,即在服务器端处理完当前请求后,服务器会发送一个特殊的HTTP响应状态码(302或者303)和一个新的URL给客户端,然后客户端会重新向新的URL发送请求,实现页面跳转。
    请求转发:是在服务器端发生的,即在服务器端处理完当前请求后,服务器会将请求转发到指定的目标URL,并由服务器端直接返回目标URL对应的响应,客户端并不知道页面的跳转。

  2. URL变化:
    重定向:会改变浏览器的URL地址,因为在重定向后客户端会重新向新的URL发送请求,所以浏览器的地址会变成新的URL。
    请求转发:浏览器的URL地址不会改变,因为请求转发是服务器端直接转发请求,客户端并不知道页面的实际跳转。
    在这里插入图片描述

  3. 请求对象和响应对象:
    重定向:在重定向中,客户端会发送两次请求,第一次请求由服务器处理并发送重定向响应,第二次请求是客户端根据重定向响应重新发送的。
    请求转发:在请求转发中,只有一次请求,请求是直接由服务器处理的,并直接将响应返回给客户端。

  4. 数据传递:
    重定向:由于两次请求,因此数据传递比较麻烦,一般通过URL参数或Session来传递数据。
    请求转发:由于只有一次请求,因此数据传递相对简单,可以通过请求属性(Request Attribute)来传递数据。

  5. 适用场景:
    重定向:适用于页面跳转后,客户端需要刷新或新加载数据的情况,例如表单提交成功后的跳转、登录成功后的跳转等。
    请求转发:适用于页面跳转后,客户端不需要刷新或新加载数据的情况,例如服务器内部的页面跳转、过滤器的页面跳转等。

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

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

相关文章

深度学习常用优化器总结,具详细(SGD,Momentum,AdaGrad,Rmsprop,Adam,Adamw)

学习需要,总结一些常用优化器。 目录 前言SGD:随机梯度下降BGD:批量梯度下降MBGD:小批量梯度下降MomentumAdaGradRMSpropAdam: Adaptive Moment EstimationAdamW参考文章 前言 优化器的本质是使用不同的策略进行参数更新。常用的…

【C++】多态

一、多态的概念 多态,顾名思义就是多种状态。 多态概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 举个例子:比如买票这个行为,当普通人买票时&#xff…

【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】

查询执行 查询执行概述查询执行策略可优化语句和数据定义语句四种执行策略策略选择实现Portal执行的过程 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的…

基于LoRA微调部署Stable Diffusion【免费试用阿里云】

文章目录 Stable Diffusion介绍环境及资源准备过程注交互式建模(PAI-DSW)的试用在创建的工作空间中创建实例安装 Diffusers Stable Diffusion介绍 Stable Diffusion 是一种文本到图像的潜在扩散模型,由 Runway 和慕尼黑大学合作构建&#xf…

vue开发环境搭建指南

nodejs下载和安装 从nodejs官网下载nodejs安装版本(愿配置环境变量的可以下载zip版本,解压,添加path环境变量) 在命令行里运行 node -v显示如下版本,则安装成功 10.15.3 #vue-cli3安装 在命令行里运行 npm i -g @vue/cli查看版本号 vue -V显示如下版本,则安装成功 3…

微信小程序反编译

PC--微信小程序反编译 小程序反编译工具: 免责声明:不得将小程序反编译源码程序和反编译图片素材挪作商业或盈利用 使用教程地:https://www.kancloud.cn/ludeqi/xcxzs/2607637 最新版下载地址:https://xcx.siqingw.top/xcx.zip 小…

Python Flask构建微信小程序订餐系统 (十二)

🔥 创建切换商品分类状态的JS文件 🔥 ; var food_act_ops={init:function(){this.eventBind();},eventBind:function(){//表示作用域var that = this;$(".wrap_search select[name=status]").change(function(){$(".wrap_search").submit();});$(&qu…

海外网红营销合作指南:详解海外合同与协议要点

随着互联网的发展和社交媒体的普及,海外网红营销成为了品牌推广和营销的重要力量。然而,这种跨国合作需要谨慎考虑,签订合适的合同与协议显得尤为重要,以确保各方权益得到保障并促进合作的顺利进行。本文Nox聚星将详细介绍与海外网…

web前端设计师的主要职责说明(合集)

web前端设计师的主要职责说明1 职责: 1. 根据UI设计师提供的设计图,实现一流的Web界面,优化代码并保持在各浏览器下良好的兼容性; 2. Web前端表现层及与后端交互的架构设计和开发; 3. JavaScript程序模块开发,通用类库、框架编…

STM32 互补PWM 带死区 HAL

1、设置PWM波频率100KHz,占空比50%,死区时间1us 2、 while 循环之前启动PWM HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //启动TIM1_CH1 PWM输出 HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);//启动TIM1_CH1N PWM输出 3、死区计算 DT_time…

每日一题——判断链表中是否有环

题目 判断给定的链表中是否有环。如果有环则返回true&#xff0c;否则返回false。 数据范围&#xff1a;链表长度 0≤n≤10000&#xff0c;链表中任意节点的值满足 ∣val∣<100000 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度 O(n) 输入分为两部分&#xff0c…

优维低代码实践:添加构件

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

HCIA静态路由综合实验(eNSP)

实验题目及要求&#xff1a; 1、分析IP地址分配。 主干IP掩码均为30&#xff1b; 环回IP掩码为28&#xff0c;方便汇总掩码27&#xff1b; 然后预留部分IP地址。 如下图&#xff1a; 2、按如上图片要求连接设备&#xff0c;并标记好IP分配信息&#xff0c;便于命令配置时一…

Jenkins环境配置篇-邮件发送

作为持续集成的利器Jenkins已经得到了广泛地应用&#xff0c;仅仅作为一个工具&#xff0c;Jenkins已然有了自己的生态圈&#xff0c;支持其的plugin更是超过1300。在实际中如何使用以及如何更好地使用jenkins&#xff0c;一直是大家在实践并讨论的。本系列文章将会从如何使用j…

StableDiffusion 换脸实现

先看效果&#xff1a; 想要换的脸&#xff1a; 想要把脸放到的目标图片&#xff1a; 实现方案&#xff1a; StableDiffusionroop&#xff08;本次实验基于roopV0.02版本&#xff09; 1/安装SD&#xff0c;模型选择 DreamShaper,Sampler使用 Euler a 2/安装roop插件 roop插…

uniapp 微信小程序 uni.modal弹框+content内容自定义(内容换行)

效果图&#xff1a; 1、template <view click"showPriceDialog"></view>2、data data() {return {contentText:"",} },3、methods // 价格公示 showPriceDialog: function() {// 吨let minPriceTon 1900let maxPriceTon 3895// 袋let …

使用 Logstash 及 enrich processor 实现数据丰富自动化

在我之前的文章&#xff1a; Elasticsearch&#xff1a;enrich processor &#xff08;7.5发行版新功能&#xff09; Elasticsearch&#xff1a;使用 Elasticsearch ingest pipeline 丰富数据 通过上面的两篇文章的介绍&#xff0c;我们应该充分掌握了如何使用 enrich proce…

uniapp使用自定义导航栏和手机自带的状态栏重叠

【问题界面】&#xff1a; 【正常界面】&#xff1a; 【解决方法】&#xff1a; 在页面顶部添加代码<!-- #ifndef H5 --> <statusBar></statusBar> <!-- #endif --> 2.引入占位条并注册 import statusBar from "/uni_modules/uni-nav-bar/c…

IDEA使用lombok实体类加上@Data注解后无法找到get和set方法

文章目录 一、问题原因二、解决方法1.File→Settings2.Plugins→搜索"lombok"→Install3.Restart IDE&#xff08;重启IDEA&#xff09; 一、问题原因 IDEA没有安装lombok插件 二、解决方法 1.File→Settings 2.Plugins→搜索"lombok"→Install 3.Restart…

IDEA安装热部署插件JRebel详解

JRebel 简介 JRebel是一套JavaEE开发工具。JRebel允许开发团队在有限的时间内完成更多的任务修正更多的问题&#xff0c;发布更高质量的软件产品。 JRebel是收费软件&#xff0c;用户可以在JRebel官方站点下载30天的评估版本。 Jrebel 可快速实现热部署&#xff0c;节省了大量重…