当前位置: 首页 > news >正文

Spring MVC/Web

1.Spring MVC 的介绍

Spring Web MVC是基于Servlet API构建的原始Web框架,也是Spring框架的一部分。它提供了灵活可扩展的MVC架构,方便开发者构建高性能的Web应用程序,并与 Spring 生态系统无缝集成。

2.MVC 设计模式


MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件:

  • 模型(Model):模型是应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作,以及业务规则的处理。模型通常是独立于用户界面的,可以在不同的视图和控制器之间共享和重用。
  • 视图(View):视图是用户界面的呈现部分,负责展示数据给用户,并接收用户的输入。视图通常是根据模型的数据进行渲染和更新的,它可以是Web页面、图形界面或命令行界面等。
  • 控制器(Controller):控制器是模型和视图之间的协调者,负责接收用户的输入并根据输入调用相应的模型逻辑。控制器将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示。控制器还可以处理视图的事件和状态变化

MVC是一种思想,而Spring MVC是一种实现

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

连接

想要实现路由注册必须需要@Controller控制器注解

给类设置路由需要@RequesMapping注解 提供路由地址

@ResponseBody是说明返回的是一个非静态页面

@RestController注解是@Controller@ResponseBody

//只有Controller控制器才能实现路由注册
//RestController和Controller能实现连接//@Controller //控制器 在spring启动时 加载并注册
//@ResponseBody //返回的是一个非静态页面
@RestController//是一个控制器 返回的是一个非静态数据 组合注解
@RequestMapping("/web") //给当前类设置路由  当访问/web时 可以访问到当前类
public class Demo1 {
//    @ResponseBody //返回的是一个非静态页面
//    @RequestMapping("/tweb") //可以支持get、post请求@RequestMapping(value = "/tweb",method = RequestMethod.GET) //指定get方法public Object test(){return "二级路由访问";}
}

返回一个静态页面 很少用得到

@Controller
public class Demo2 {@RequestMapping("/test2")public Object test2(){return "/index.html";}
}

static里需要此页面

Get请求方法

@RequestMapping("/tweb") //可以支持get、post请求
@RequestMapping(value = "/tweb",method = RequestMethod.GET) //指定get方法
@GetMapping("/tweb1")

获取单个数据

//这两种都支持获取单个参数 多个参数也可以
//在Spring MVC中默认内置隐藏两个参数 一个是Request Response  如果想要使用 只需要在方法中声明即可//方式一
@GetMapping("/tweb1") //只支持get方法public Object test1(HttpServletRequest request){return request.getParameter("name");}//方式二  推荐@GetMapping("/tweb2")
//int不支持参数为空 Integer支持为空public Object test2(/*int*/ Integer age){//参数名必须相同 才能获取到return age;}

@GetMapping("/tweb2")
public String test2(/*int*/ Integer age,String name){//参数顺序不同不影响 只要保证key准确就可以return name+" "+age;
}

获取参数是对象形式

参数请求类型

  • URL传参

  • Ajax传参

  • Form表单传参

URL传参

Form传参

//使用参数
@GetMapping("tweb4")public String test4(String name,Integer password){return name+" "+password;}
//使用对象
@GetMapping("/tweb4")
public String test4(Student student){//保证前端传来的数据 类内有即可return student.toString();
}

Ajax传参

<script>function on(){jQuery.ajax({url:"tweb5",type:"GET",data:{"name":jQuery(".name").val(),"password":jQuery(".password").val()},success:function(res){alert(res);}});}
</script>
@GetMapping("/tweb5")
public Object tese5(String name,Integer password){User user=new User();user.setName(name);user.setPassword(password);return user;
}

普通得URL传参和JSON的格式是不同的

url是在url传参,而JSON是在body内

如果后端想接受JSON格式的,就需要使用@RequestBody注解 获取JSON格式

后端接收前端传来的文件

@GetMapping("/tweb6")
//                   (key的名字 不是图片的名字) 获取key为myfile的文件 赋值给这个file
public String test6(String name, @RequestPart("myfile") MultipartFile file) throws IOException {file.transferTo(new File("D:\\Spring Boot\\SpringMVCDemo1\\src\\main\\resources\\img.png"));return "success";
}

获取cookie

//获取cookie
@GetMapping("/tweb7")//获取key为cookie的值 赋值给cookie
public String test7(@CookieValue("cookie") String cookie){return cookie;
}

这里可以设置Cookie

设置session

//设置session
@GetMapping("tweb9")
public String test9(HttpServletRequest request){HttpSession session=request.getSession();if(session==null){session.setAttribute("username","wangwu");}return "创建成功";
}

获取/创建session

@GetMapping("tweb8")
//                                   如果有则返回 没有则创建 值为null
public String test8(@SessionAttribute(value = "session",required = false) String session){return "session: "+session;
}

获取请求头内的数据

//获取请求头内的数据
@GetMapping("tweb10")
//                   获取请求头内key为 Host的数据
public String test10(@RequestHeader("Host") String head){return "head"+head;
}

获取URL内的参数

只能获取层级的参数 无法获取?后面的参数

更改URL参数

//更改URL参数
//当前的传的参数名不准确 可以通过后端来更正 (前端参数依旧是改不了 只是改了后端)
@GetMapping("tweb11")
// 前端参数名为a 当再传a时 识别成user               设置成false 非必传参数 这个参数不穿可以可以的
//默认为true 必传参数         这时只能识别名为a的参数 依旧无法识别user的参数
public String test11(@RequestParam(value = "a",required = false) String user){return "user: "+user;
}

请求转发和请求重定向的区别

请求转发通常发生在服务器端,当一个服务器接收到请求后,它可能会将这个请求转发给另一个服务器或者服务来处理。这个过程对于客户端来说是透明的,客户端并不知道请求被转发了。转发过程发生在服务器之间,客户端只与第一个服务器通信。

请求重定向发生在客户端和服务器之间的交互中。当服务器接收到一个请求后,它可能会告诉客户端需要重新向另一个URL发送请求。客户端接收到这个重定向指令后,会根据服务器提供的新URL重新发起请求。

相关文章:

Spring MVC/Web

1.Spring MVC 的介绍 Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;也是Spring框架的一部分。它提供了灵活可扩展的MVC架构&#xff0c;方便开发者构建高性能的Web应用程序&#xff0c;并与 Spring 生态系统无缝集成。 2.MVC 设计模式 MVC&#xff08;Model…...

C++中获取int最大与最小值(补)

上文中&#xff0c;我们学习了C中获取int最大与最小值的两种方法&#xff1a;C库和移位运算&#xff0c;这篇文章将解决在移位运算中遇到的各种报错&#xff0c;并提出一种新的生成int最值的方法 上文链接&#xff1a;http://t.csdnimg.cn/cn7Ad 移位运算取最值常见报错 Dev…...

一个开源的工具类轮子是怎么造出来的

心路历程 为什么要做 在22年9月的某一天&#xff0c;在公司开需求评审时&#xff0c;接到了一个给PDF、图片添加水印的需求。做为一个刚工作的CURD程序员&#xff0c;在遇到这些问题时&#xff0c;第一反应是去github上找找有没有类似的开源框架。但是&#xff0c;出乎我意料…...

零基础学Java第二十二天之迭代器 Iterator

迭代器 Iterator 的理解和相关集合 使用 1、理解 迭代器&#xff08;Iterator&#xff09;是设计模式中的一种&#xff0c;它允许程序员遍历容器&#xff08;例如列表、集合等&#xff09;中的元素&#xff0c;而无需了解容器底层的实现细节。在编程中&#xff0c;迭代器提供了…...

微服务架构-异步消息传递设计模式

微服务架构-异步消息传递设计模式 异步消息允许服务发送消息后立即返回&#xff0c;而不需要等待消息被处理完毕&#xff0c;这种异步方式可以大大提高系统的处理速度、和吞吐量。 微服务架构&#xff0c;通常涉及多个服务之间的相互调用&#xff0c;如果通信只是在少数几个微…...

基于SSM的大学生兼职管理系统

基于SSM的大学生兼职管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 企业界面 前台学生界面 管理员界面 摘要 随着大学生兼职市场的日益繁…...

leetcode刷题记录:前缀和

https://labuladong.online/algo/problem-set/perfix-sum/#%E8%A7%A3%E6%B3%95%E4%BB%A3%E7%A0%81-3 适用范围&#xff1a;快速、频繁地计算一个索引区间内的元素之和 303 区域和检索&#xff1a;数组不可变 https://leetcode.cn/problems/range-sum-query-immutable/ class …...

TENT: FULLY TEST-TIME ADAPTATION BY ENTROPY MINIMIZATION--论文笔记

论文笔记 资料 1.代码地址 https://github.com/DequanWang/tent 2.论文地址 https://arxiv.org/abs/2006.10726 1论文摘要的翻译 在这种完全测试时适应的情况下&#xff0c;模型只有测试数据和自身参数。我们建议通过测试熵最小化&#xff08;tent&#xff09;进行适应&…...

Java期末复习指南(1):知识点总结+思维导图,考试速成!

&#x1f516;面向对象 &#x1f4d6; Java作为面向对象的编程语言&#xff0c;我们首先必须要了解类和对象的概念&#xff0c;本章的所有内容和知识都是围绕类和对象展开的&#xff01; ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说&#xff0c;类就是对具有相同特征的一类事…...

OpenMV学习笔记1——IDE安装与起步

目录 一、OpenMV IDE下载 二、OpenMV界面 三、Hello World&#xff01; 四、将代码烧录到OpenMV实现脱机运行 五、插SD卡&#xff08;为什么买的时候没送&#xff1f;&#xff09; 一、OpenMV IDE下载 浏览器搜索OpenMV官网&#xff0c;进入后点击“立即下载”&#xff0…...

C++设计模式|结构型 适配器模式

1.什么是适配器模式&#xff1f; 可以将⼀个类的接⼝转换成客户希望的另⼀个接⼝&#xff0c;主要⽬的是 充当两个不同接⼝之间的桥梁&#xff0c;使得原本接⼝不兼容的类能够⼀起⼯作。 2. 适配器模式的组成 &#xff08;1&#xff09;接口类&#xff0c;给客户端调用&…...

视频码流分析工具

一、VQ Analyzer 在线使用说明&#xff1a; https://vicuesoft.com/vq-analyzer/userguide/ ref&#xff1a; Video Analyzer and Streaming Tester Software – VQ Analyzer HEVC 分析工具 - 懒人李冰 推荐一个开源且跨平台的免费码流分析软件YUView - 知乎...

记一次重定向问题(浏览器安全)解决

近期做单点登陆功能&#xff0c;本身应该是一个很简单的功能&#xff0c;却发生了意向不到的问题…让我们看下&#xff1a; 首先第三方给出的地址需要通过JWT框架获取token拼接后跳转&#xff0c;我这边为了方便首选肯定是考虑用response.sendRedirect(url)&#xff0c;但是做好…...

【传知代码】transformer-论文复现

文章目录 概述原理介绍模型架构 核心逻辑嵌入表示层注意力层前馈层残差连接和层归一化编码器和解码器结构 数据处理和模型训练环境配置小结 本文涉及的源码可从transforme该文章下方附件获取 概述 Transformer模型是由谷歌在2017年提出并首先应用于机器翻译的神经网络模型结构…...

大模型日报|今日必读的 13 篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.MIT新研究&#xff1a;并非所有语言模型特征都是线性的 最近的研究提出了线性表征假说&#xff1a;语言模型通过操作激活空间中概念&#xff08;“特征”&#xff09;的一维表征来执行计算。与此相反&#xff0c;来…...

Python 魂斗罗的音效和动漫效果

一、实现游戏音效 音效是游戏中不可或缺的一部分&#xff0c;它可以为游戏增添氛围和趣味性。在 Pygame 中&#xff0c;我们可以使用 pygame.mixer 模块来播放音效。下面是一个简单的示例代码&#xff0c;演示如何在游戏中播放音效&#xff1a; import pygamepygame.mixer.init…...

Raylib 绘制自定义字体的一种套路

Raylib 绘制自定义字体是真的难搞。我的需求是程序可以加载多种自定义字体&#xff0c;英文中文的都有。 我调试了很久成功了&#xff01; 很有用的参考&#xff0c;建议先看一遍&#xff1a; 瞿华&#xff1a;raylib绘制中文内容 个人笔记&#xff5c;Raylib 的字体使用 - …...

C++学习笔记(21)——继承

目录 1. 继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 继承的概念总结&#xff1a; 2. 基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数知识点&#xff1a;派生类中6个默认成员函数…...

DOS学习-目录与文件应用操作经典案例-more

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 DOS系统的more命令是一个用于查看文本文件内容的工具。…...

android 在 Activity 的 onCreate 中获取View 的宽高

view 的 post 执行时&#xff0c;首先会判断view 的 mAttatchInfo 是否为空&#xff0c;如果不为空&#xff0c;则将Runnable 添加到mAttachInfo.handler 的 UI线程MessageQueue 中&#xff1b;如果为空&#xff0c;则先将Runnable 暂存在view 的类为HandlerActionQueue的mRunQ…...

Java编程避坑指南:九大类常见陷阱与解决方案,助你写出高质量代码

文章目录 基础类 类、继承与内存 继承特性与注意事项 内存管理 现代 Java 特性 记录类与密封类常见陷阱 集合与遍历 相等性约定 集合常见陷阱 并发与同步 并发 异常处理 泛型与类型擦除 泛型陷阱 泛型与类型擦除 泛型陷阱 JVM、垃圾回收与模块系统 JVM/GC 常见陷阱 模块系统(J…...

同学花200降AI我花50就搞定了差在哪

我室友处理论文AI率花了200多块&#xff0c;我同样的工作量只花了52元&#xff0c;最终效果差不多。 她不是被宰了&#xff0c;是走了一些弯路。这篇文章说说差距在哪里&#xff0c;以及怎么在50元左右搞定降AI率。 室友的200元是怎么花出去的 室友的论文约1.5万字&#xff…...

从采购到回款:拆解华为IFS如何用PTP/OTC流程优化缩短30天账期

华为IFS流程再造实战&#xff1a;如何通过PTP/OTC优化实现账期缩短30天 在供应链金融和财务运营领域&#xff0c;账期管理一直是企业现金流健康的关键指标。全球领先企业华为通过其集成财务服务&#xff08;IFS&#xff09;变革&#xff0c;特别是在采购到付款&#xff08;PTP&…...

测试缺陷类型词云图分析:聚焦“需求理解错误”

在软件质量保障的浩瀚星图中&#xff0c;缺陷是不可避免的阴影。通过对海量缺陷报告进行文本挖掘与可视化分析&#xff0c;一张揭示问题本质的“词云图”便清晰浮现。在这张图上&#xff0c;若“需求理解错误”一词以其巨大、醒目的字体高频占据中心&#xff0c;它便不再是一个…...

5大维度解析zteOnu:让ONU设备管理效率提升300%的开源工具

5大维度解析zteOnu&#xff1a;让ONU设备管理效率提升300%的开源工具 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 问题引入&#xff1a;网络运维工程师的日常困境 你是否也曾面临这…...

解锁Unity游戏插件开发:从概念到实战的MelonLoader全攻略

解锁Unity游戏插件开发&#xff1a;从概念到实战的MelonLoader全攻略 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 一、认知篇…...

ai协作新范式:用快马平台ccswitch模型智能生成天气预报组件代码

今天想和大家分享一个有趣的AI辅助开发实践——用InsCode(快马)平台的ccswitch模型智能生成天气预报组件。整个过程就像有个懂编程的助手在实时配合&#xff0c;特别适合想快速实现功能又希望保持代码质量的场景。 理解ccswitch模型的调节作用 这个模型最实用的地方在于它能智能…...

对比实验:Lychee模型与传统算法在推荐系统中的表现

对比实验&#xff1a;Lychee模型与传统算法在推荐系统中的表现 1. 实验设计与方法 为了客观评估Lychee多模态重排序模型在推荐系统中的实际效果&#xff0c;我们设计了一套完整的对比实验方案。实验聚焦电商推荐场景&#xff0c;选取了家居、服饰、电子产品三个典型品类&…...

如何利用YimMenu彻底改变你的GTA5游戏体验:终极GTA5增强工具完全指南

如何利用YimMenu彻底改变你的GTA5游戏体验&#xff1a;终极GTA5增强工具完全指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Tr…...

IM1281B电量计模块避坑指南:从接线到数据解析的全流程实战

IM1281B电量计模块实战全解析&#xff1a;从硬件对接到数据处理的完整解决方案 在智能电表、能耗监测和物联网设备开发中&#xff0c;精确测量电能消耗是核心需求之一。IM1281B作为一款高性价比的单相电能计量模块&#xff0c;以其Modbus通信协议和直接电能脉冲输出功能&#x…...