SpringMVC框架详解

news2024/11/28 0:58:54

1.MVC概念

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO,工程中的JavaBean。

View(视图) - 视图代表模型包含的数据的可视化。

Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

2.SpringMVC 

2.1 相关概念

1.Spring MVC是Spring Framework提供的Web组件,全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架,提供前端路由映射、视图解析等功能。

2.SpringMVC是一种基于MVC设计模式的Java Web框架,其主要目的是为了简化Web应用程序的开发过程。它提供了一组组件,如控制器、视图解析器、拦截器等,使得开发人员可以更加轻松地组织和管理Web应用程序的代码。其核心思想是将请求和响应分离,使得开发人员可以将业务逻辑和展示逻辑分离开来,从而提高代码的可维护性和可重用性。

2.2 BS架构

       BS架构是指Browser/Server架构,也就是浏览器/服务器架构。它是一种网络架构模式,将应用程序分为客户端和服务器端两个部分。客户端指的是用户使用的浏览器,而服务器端则是应用程序的后台处理部分。在BS架构中,客户端负责展示用户界面和处理用户输入,服务器端负责处理客户端请求并返回相应的数据。这种架构的优点是客户端无需安装任何软件,只需要一个浏览器即可访问应用程序,同时服务器端可以集中管理和维护应用程序,提高了安全性和可靠性。

2.3 创建SpringMVC项目

1.使用IDEA创建SpringMVC项目

2.实现连接

注意:在Spring框架中,@RequestMapping注解默认的请求方式为GET。也就是说,如果没有指定请求方式,那么该方法将只处理GET请求。但是,@RequestMapping注解可以指定多种请求方式,例如:@RequestMapping(value="/test", method={RequestMethod.GET, RequestMethod.POST}),表示该方法可以处理GET和POST请求。

注意:浏览器默认发送GET请求

三种方法实现连接:

@RestController
public class UserController {
    @RequestMapping(value = "/sayhi",method = RequestMethod.POST) 
    //可以为一级路由,也可以为多级路由
    //支持get和post请求方法
    public String syahi(){
        return "hi spring mvc";
    }
    @PostMapping("/sayhello")//只支持post请求方法
     public String sayHello(){
    return "hi spring sayHello";
     @GetMapping("/sayhi") //只支持get请求方法
    public String say(){
        return "hi get hello";
    }
}
}

使用postman模拟POST请求; 

 

 3.获取方法

3.1 获取单个的参数

@RequestMapping(value = "/sayhi") //可以为一级路由,也可以为多级路由
public String syahi(String name){
    return "hi "+name;
}

 参数传递,不要使用基础类型,因为基础类型会报错。

 使用包装类型传参不会出现错误:

 2.获取多个参数

3. 获取对象:

框架会实现自动的参数映射

@RequestMapping("/reg")
public Object reg(Userinfo userinfo){
    System.out.println(userinfo);
    return userinfo;
}

 

 重命名前端的传递参数名称:前端传递username
前端传递一般为对象或者json格式的字符串对象
后端获取的时候:对象/json对象格式的字符串对象

 重命名功能:

//重命名功能
@RequestMapping("/reg2")
public Object reg(@RequestParam("username",required = false) String name,String password){
    return name+":"+password;
}

 4.获取JSON对象

加上@RequestBody注解

@RequestMapping("/reg3")
public Object reg3(@RequestBody Userinfo userinfo){
    return userinfo;
}

5.从基础URL中获取参数(不是从URL的参数部分获取参数)
path(url) = /user/123456
优点1:搜索引擎抓取关键字权重更高
优点2:url更简洁

/**
 * 获取URL参数
 * @param name
 * @param password
 * @return
 */
@RequestMapping("/reg4/{name}/{password}")
public Object reg4(@PathVariable String name,@PathVariable String password){
    return "name->"+name+" | password->"+password;
}

重命名:

/**
 * 获取URL参数
 * @param name
 * @param password
 * @return
 */
@RequestMapping("/reg4/{name}/{password}")
public Object reg4(@PathVariable String name,@PathVariable(required=false,
name="pwd") String password){
    return "name->"+name+" | password->"+password;
}

@PathVariable ->基础URL里面的参数(? 之前的参数)
@RequestParm ->URL参数部分的参数( ? 之后的参数)

6.获取上传文件@RequestPart

 

/**
 * 获取上传文件
 * @param file
 * @return
 */
@RequestMapping("/myupload")
public Object upload(@RequestPart("myimg")MultipartFile file) {
    File saveFile = new File("D:\\桌面\\CsdnImg\\myimg.png");
    try {
        file.transferTo(saveFile);
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

 Postman构建:

注意:文件上传的大小默认限制为1MB;重新设置上传大小限制:

srping.servlet.multipart.max-file-size=100MB
srping.servlet.multipart.max-request-size=100MB

 文件上传不重复:

  /**
     * 获取上传文件
     * @param file
     * @return
     */
    @RequestMapping("/myupload")
    public Object upload(@RequestPart("myimg")MultipartFile file) {
        String fileName = UUID.randomUUID()+
                file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        File saveFile = new File("D:\\桌面\\CsdnImg\\"+fileName);
        try {
            file.transferTo(saveFile);
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

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

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

相关文章

阿里云服务器建站教程(5分钟网站上线)

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程: …

JAVA学习和题目

先上每日一题看看 1015. 可被 K 整除的最小整数 难度中等147收藏分享切换为英文接收动态反馈 给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 1 的最 小 正整数 n 的长度。 返回 n 的长度。如果不存在这样的 n ,就返回-1。 注意:…

async_simple编译测试(一)

前言 async_simple 阿里开源的轻量级 C 异步框架 提供了基于 C20 无栈协程(Lazy)、有栈协程(Uthread) 以及 Future/Promise 等异步组件,能够轻松完成 C 异步的开发,广泛应用于阿里的图计算引擎、时序数据库、搜索引擎等系统。 1:准备 下载地…

Microsoft Edge使用方法和心得

Microsoft Edge 使用方法和心得 本文目录: 一、写在前面的话 二、Edge浏览器简介 三、Microsoft Edge性能 3.1、睡眠标签 3.2、启动加速 3.3、清晰度提升 四、Microsoft Edge游戏特性 五、高效工作 5.1、标签页组 5.2、垂直标签 5.3、集锦 5.4、边栏 5…

Google I/O 2023 - Dart 3 发布,快来看看有什么更新吧

核心原文链接: https://medium.com/dartlang/announcing-dart-3-53f065a10635 自从 Flutter Forword 发布了 Dart 3α 预览 之后,大家对 Dart 3 的正式发布就一直翘首以待,这不仅仅是 Dart 版本号追上了 Flutter 版本号,更是 Dart…

【数据结构】- 教你一步完美应对面试官让你10分钟内实现带头双向循环链表(下)

文章目录 前言🌟一、面试官让你十分钟内实现带头双向循环链表🌟二、对链表的清晰认知🌟三、根据上述步骤简单实现🌏3.1结构:🌏3.2查找(LTFind)LTEraseLTInsert:🌏3.3头插:&#x1f4…

为什么要做计划跟踪:没有计划,就没有控制

日常工作中,我们每天都被大量的信息和任务填满,常常由于任务繁冗复杂,让人陷入一种无所适从的状态。 我们经常会看到很多如何安排工作计划的教程,比如: 要把大的项目分解为小目标,小目目标再分解为日常任务…

【技术干货】PCB焊盘设计之问题详解

SMT的组装质量与PCB焊盘设计有直接的关系,焊盘的大小比例十分重要。如果PCB焊盘设计正确,贴装时少量的歪斜可以再次回流焊纠正(称为自定位或自校正效应),相反,如果PCB焊盘设计不正确,即使贴装位置十分准确,…

十分钟教你搭建类似ChatGPT的安卓应用程序

大家好,我是易安! Chat GPT 是当今著名的人工智能工具,就像聊天机器人一样。Chat GPT会回答发送给它的所有查询。今天,我将通过集成 OpenAI API (ChatGPT)构建一个简单的类似 ChatGPT 的 android 应用程序,我们可以在其…

【docker_centos7】docker在centos7中如何安装??

Docker ???What??? Docker是一种开源的容器化平台,可以让开发者轻松地构建、打包、运输和部署应用程序。Docker容器是轻量级的、可移植的、自包含的软件包,其中包含了应用程序和其所…

Pytorch pth 格式转ONNX 格式

目录 背景介绍 安装依赖库 转换成onnx 格式 ONNX 转换成TensorRT 格式 背景介绍 PyTorch 训练的模型,需要在Jetson nano 上部署,jetson 原生提供了TensorRT 的支持,所以一个比较好的方式是把它转换成ONNX 格式,然后在通过ONNX …

给Debian 11系统,添加右键时,使用其它程序打开】

VS Code 添加到文件管理器的右键菜单中 在 Debian 系统中,nautilus-actions 软件包已经被移除了。因此,如果你想将 VS Code 添加到文件管理器的右键菜单中,你需要使用 nautilus-admin 工具。下面是详细步骤: 打开终端应用程序。运…

弃用 Docker 后!哪几种超好用的容器工具能替代?

2020 年底,Kubernetes 发布了公告,官方宣布从 v1.24 开始停止对 Docker 的支持。然而,Kubernetes 弃用 docker 对我们的影响不应过于恐慌。 有以下几种工具可以替代 Docker ?并且相比 Docker 都有哪些优点? containe…

JRebel插件热部署快速入门教程

文章目录 引入插件安装插件激活打开激活窗口激活插件 插件使用设置项目热更新热更新说明演示热更新 引入 Jrebel能够非常方便的帮助我们进行项目的热更新,尤其是前端也嵌在后端工程中的单体项目,热更新能减少一半的开发时间,这里我们演示一下…

分布式缓存Redis 面试突击

Redis分布式锁 单机版 关于 synchronized 和trylock的区别 前者 是 不见不散 我一定要等到你 后者是 过时不候 我尝试一下 获取不到就算了 可以设置一个时间 这个时间范围内获取不到就算了 用缓存两个目的:高性能与高并发 高性能:减少了查询…

使用Linkage Mapper制作环境连接图

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 文章目录 引言一. 简介1.1 Linkage Mapper 概述1.2 环境连接…

基于html+css的图展示55

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

DJ5-8 磁盘存储器的性能和调度

目录 5.8.1 磁盘性能简述 1、磁盘的结构和布局 2、磁盘的类型 3、磁盘数据的组织和格式 4、磁盘的访问过程 5、磁盘访问时间 5.8.2 磁盘调度算法 1、先来先服务 FCFS 2、最短寻道时间优先 SSTF 3、扫描算法(电梯算法)SCAN 4、循环扫描算法 …

4 IK分词器

4 IK分词器 4.1测试分词器 在添加文档时会进行分词,索引中存放的就是一个一个的词(term),当你去搜索时就是拿关键字去匹配词,最终 找到词关联的文档。 测试当前索引库使用的分词器: post 发送&#xff…

Python计算语义分割模型的评价指标

目录 一、混淆矩阵 二、分类指标 1、Accuracy(准确率) 2、Precision(查准率) 3、Recall (查全率) 4、F1-score 三、语义分割的评价指标 1、MPA(类别平均像素准确率) 2、IoU(交并比) 3、MIoU(平均交并比) 4…