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重新发起请求。

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

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

相关文章

设计模式—23种设计模式重点 表格梳理

设计模式的核心在于提供了相关的问题的解决方案&#xff0c;使得人们可以更加简单方便的复用成功的设计和体系结构。 按照设计模式的目的可以分为三大类。创建型模式与对象的创建有关&#xff1b;结构型模式处理类或对象的组合&#xff1b;行为型模式对类或对象怎样交互和怎样…

CSS实现图片浮动在底层 div 之上,而不会影响底层 div 的布局和内容

前言&#xff1a;遇到个需求&#xff0c;需要图片显示在div之上&#xff0c;但是不占用div的空间布局&#xff0c;网上的答案五花八门&#xff0c;但其实使用css就可以简单实现&#xff0c;仅以此博客作为记录 举个栗子 <div class"container"><img src&qu…

Linux 网络编程基础——网络模型

网络模型 网络模型1. OSI七层模型1. 物理层&#xff08;Physical Layer&#xff09;2. 数据链路层&#xff08;Data Link Layer&#xff09;3. 网络层&#xff08;Network Layer&#xff09;4. 传输层&#xff08;Transport Layer&#xff09;5. 会话层&#xff08;Session Lay…

研发机构大数据迁移如何保障敏感数据不泄露

随着云计算和大数据技术的飞速进步&#xff0c;越来越多的企业正试图通过数据迁移来提升IT基础设施的效率&#xff0c;减少成本&#xff0c;并增强业务的灵活性。但是&#xff0c;这一过程并非没有它的挑战&#xff0c;尤其是在数据安全方面。数据在转移过程中可能会遭遇黑客攻…

SQL的多表联查

这里我先附上两张表的数据&#xff1a; Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN &#x1f91d; 概念&#xff1a; INNER JOIN&#xff08;内连接&#xff09;返回两个表中匹配的记录。如果某条…

解决深度确定问题:使用不相交集合森林

解决深度确定问题&#xff1a;使用不相交集合森林 引言不相交集合森林&#xff08;DSF&#xff09;基础按秩合并与路径压缩深度确定问题的解决方案实现MAKE-TREE修改FIND-SET实现FIND-DEPTH实现GRAFT分析最坏情况运行时间结论参考文献 引言 在计算机科学中&#xff0c;树结构是…

时空扭曲:重温相对论的终极挑战,探寻真理的脚步

大家都知道&#xff0c;相对论是爱因斯坦提出的划时代理论&#xff0c;为人类认知时空和引力做出了革命性贡献。但这个理论真的万无一失吗&#xff1f;近日&#xff0c;一项新研究提出了测试时间扭曲的新方法&#xff0c;或许能让我们重新审视相对论在宇宙大尺度上的适用性。 时…

HTML5好看的通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 模板菜单1 界面1.3 模板菜单2 界面1.4 模板菜单3 界面1.5 下拉菜单1 界面1.6 下拉菜单2 界面1.7 模板菜单4 界面1.8 模板菜单5 界面1.9 界面底部 2.效果和源码2.1 动态效果2.2 源码目录2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址…

Python 造数据神器Faker

大家好&#xff0c;在编写代码过程中&#xff0c;我们经常需要一些假数据来进行测试或者演示。手动创建这些数据不仅耗时&#xff0c;而且容易出错。幸运的是&#xff0c;Python有一个非常有用的库叫做Faker&#xff0c;它可以生成各种类型的假数据&#xff0c;从名字、地址到公…

【驱动】ARM手册引脚寄存器地址(绝对物理地址)查找(以AM437x为例)

1、问题描述 在配置设备树时,经常遇到如下宏: XXX_IOPAD(pa, val)实际定义如下: DRA7XX_CORE_IOPAD(pa, val) AM33XX_IOPAD(pa, val) DM816X_IOPAD(pa, val) DM814X_IOPAD(pa, val) AM4372_IOPAD(pa, val)一般注释中的说明如下: 原文:Macro to allow using the absol…

md5和byte64字符串加密

说明&#xff1a;最近碰到一个需求&#xff0c;网络请求&#xff0c;传递json的时候&#xff0c;必须加密&#xff0c;对字符串加密&#xff0c;然后前端去解密字符串&#xff0c;然后解析json&#xff0c;展示数据&#xff0c;可逆 step1: Md5加密方式 package com.example.…

Java技术精粹:高级面试问题与解答指南(一)

Java 面试问题及答案 问题1&#xff1a;请解释Java中的多态性&#xff0c;并给出一个例子。 答案&#xff1a; 多态性是Java中的一个重要特性&#xff0c;它允许一个引用类型可以指向多种实际类型的对象&#xff0c;并且可以通过这个引用调用实际对象的方法。多态性主要通过继…

JAVA:常见的加密算法简介

一、前言 加密算法是指将明文信息转变为密文信息的过程&#xff0c;即将信息从可读形式&#xff08;明文&#xff09;转换为加密形式&#xff08;密文&#xff09;的过程。在加密过程中&#xff0c;信息通过加密算法和加密密钥被加密处理&#xff0c;加密后的信息&#xff08;密…

【代码随想录算法训练Day17】LeetCode 110. 平衡二叉树、LeetCode 257.二叉树的所有路径、LeetCode 404.左叶子之和

Day17 二叉树第四天 LeetCode 110. 平衡二叉树【后序遍历】 平衡二叉树仍是后序遍历&#xff0c;就是获取左右子树的高度然后作差&#xff0c;如果子树就不平衡&#xff0c;那么就直接将-1向上传给父节点&#xff0c;否则该数的高度为左右子树高度的最大值1。 class Solutio…

day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树

435.无重叠区间 思路 为了使区间尽可能的重叠所以排序来使区间尽量的重叠&#xff0c;使用左边界排序来统计重叠区间的个数与452. 用最少数量的箭引爆气球恰好相反。 代码 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…

如何在cPanel面板中开启盗链保护

本周有一个客户&#xff0c;购买Hostease的主机&#xff0c; 客户购买的是Linux虚拟主机&#xff0c;带cPanel面板的。询问我们的在线客服&#xff0c;如何可以防止他的网站上的图片不被盗用。cPanel的盗链保护功能可以帮助客户防止图片被盗链。 盗链&#xff08;Hotlinking&a…

.NET Core与.NET Framework的区别

.NET Core和.NET Framework是微软提供的两种主要的开发平台&#xff0c;用于构建各种应用程序。虽然它们都基于.NET技术&#xff0c;但在架构、平台支持、性能、开发工具和社区支持等方面存在显著差异。本文将详细探讨.NET Core和.NET Framework的主要区别&#xff0c;帮助开发…

呆马科技----构建智能可信的踏勘云平台

近年来&#xff0c;随着信息技术的快速发展&#xff0c;各个行业都在积极探索信息化的路径&#xff0c;以提升工作效率和服务质量。智慧踏勘云平台是基于区块链和大数据技术构建的全流程智慧可信踏勘解决平台。平台集远程视频、数据显示、工作调度、过程记录为一体&#xff0c;…

有容量限制的车辆路径规划问题(Capacitated Vehicle Routing Problem)

在看matlab的时候发现了这篇文章https://www.frontiersin.org/articles/10.3389/fict.2019.00013/full 仔细阅读一下。(英语渣渣&#xff0c;自学用) The Capacitated Vehicle Routing Problem (CVRP) is an NP-optimization problem (NPO) that has been of great interest …

图像处理之边缘检测(C++)

图像处理之边缘检测&#xff08;C&#xff09; 文章目录 图像处理之边缘检测&#xff08;C&#xff09;前言一、Roberts算子1.原理2.代码实现 二、Sobel算子1.原理2.代码实现 三、Prewitt算子1.原理2.代码实现 四、Laplacian算子1.原理2.代码实现 五、LOG算子1.原理2.代码实现 …