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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【游戏引擎】Unity脚本基础 开启游戏开发之旅

持续更新。。。。。。。。。。。。。。。 【游戏引擎】Unity脚本基础 Unity脚本基础C#语言简介C#基础 Unity脚本基础创建和附加脚本MonoBehaviour生命周期生命周期方法 示例脚本 Unity特有的API常用Unity API 实践示例&#xff1a;制作一个简单的移动脚本步骤1&#xff1a;创建…

SpringCloud系列(30)--准备使用Hystrix的前期工作,创建服务消费者模块

前言&#xff1a;在上一章节中我们创建了服务提供者模块&#xff0c;而本节内容则是创建服务消费者模块。 1、创建一个服务提供者模块&#xff0c;命名为cloud-consumer-feign-hystrix-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并选择模块要使用的JDK版本 …

Ansible自动化运维中的Setup收集模块应用详解

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月22日13点14分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xf…

分享:怎么才能保证大数据查询的准确性?

随着大数据应用到金融风控领域&#xff0c;大数据越来越重要了&#xff0c;很多朋友在查大数据的时候都会遇到一个问题&#xff0c;那就是自己查询的大数据什么信息都没有&#xff0c;要么就是很少&#xff0c;这是什么原因呢?要怎么才能保证大数据查询的准确性呢?下面小编就…

WordPress搭建流程

1. 简介 WordPress 是一个 PHP 编写的网站制作平台。WordPress 本身免费,并且拥有众多的主题可以使用,适合用于搭建个人博客、公司官网、独立站等。 2. 环境准备 2.1 WordPress 下载 WordPress 可以在 Worpress中文官网 下载(如果后续要将后台调成中文的话,一定要从中文…

如何通过软件SPI读写W25Q64

STM32F1之SPI通信软件SPI代码编写-CSDN博客 目录 1. W25Qxx系列简介 2. W25Q64硬件电路 3. W25Q64框图 4. Flash操作注意事项 5. 代码编写 5.1 初始化 5.2 W25Q64读取ID号 5.3 W25Q64写使能 5.4 W25Q64等待忙 5.5 W25Q64页编程 5.6 W25Q64扇区擦除&#x…

521源码-在线客服-CRMChat网页版客服系统 UNIAPP 全方位在线客服系统源码与管理体系平台

CRMChat客服系统&#xff1a;基于Swoole4Tp6RedisVueMysql构建的高效沟通桥梁 CRMChat是一款独立且高性能的在线客服系统&#xff0c;它结合了Swoole4、Tp6、Redis、Vue以及Mysql等先进技术栈&#xff0c;为用户提供了卓越的在线沟通体验。该系统不仅支持在Pc端、移动端、小程…

16.线性回归代码实现

线性回归的实操与理解 介绍 线性回归是一种广泛应用的统计方法&#xff0c;用于建模一个或多个自变量&#xff08;特征&#xff09;与因变量&#xff08;目标&#xff09;之间的线性关系。在机器学习和数据科学中&#xff0c;线性回归是许多入门者的第一个模型&#xff0c;它…

【机器学习】机器学习基础概念与初步探索

❀机器学习 &#x1f4d2;1. 引言&#x1f4d2;2. 机器学习概述&#x1f4d2;3. 机器学习基础概念&#x1f389;2.1 机器学习的分类&#x1f389;2.2 数据预处理&#x1f308;数据清洗与整合&#x1f308; 特征选择和特征工程&#x1f308;数据标准化与归一化 &#x1f4d2;4. …

Android Studio 所有历史版本下载

一、官网链接 https://developer.android.google.cn/studio/archive 操作 二、AndroidDevTools地址 https://www.androiddevtools.cn/ 参考 https://blog.csdn.net/qq_27623455/article/details/103008937

电表远传抄表是什么?

1.电表远传抄表&#xff1a;简述 电表远传抄表&#xff0c;又称为远程控制自动抄表系统&#xff0c;是电力行业的智能化技术运用&#xff0c;它通过无线或通信网络技术&#xff0c;完成对电表数据信息的远程收集解决。此项技术不仅提升了抄水表高效率&#xff0c;降低了人工偏…

RK3568平台(UART篇)uart应用编程读取模块数据

一.串口介绍 串口设备是嵌入式开发中最常用的外设之一&#xff0c;通过串口打印信息可以调试程序的运行&#xff0c;通 过串口也可以链接很多种外设&#xff0c;比如串口打印机&#xff0c;蓝牙&#xff0c;wifi&#xff0c;GPS&#xff0c;GPRS 等等。 数据传输方式&#xf…

C++ | Leetcode C++题解之第97题交错字符串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isInterleave(string s1, string s2, string s3) {auto f vector <int> (s2.size() 1, false);int n s1.size(), m s2.size(), t s3.size();if (n m ! t) {return false;}f[0] true;for (int i …

全同态加密生态项目盘点:FHE技术的崛起以及应用

撰文&#xff1a;Chris&#xff0c;Techub News 在当今数字化的时代&#xff0c;隐私保护已成为一个全球性的焦点话题&#xff0c;特别是在加密货币和区块链技术快速发展的背景下。虽然当前的隐私技术在保护数据安全方面多有欠缺&#xff0c;引发了广泛的关注和批评&#xff0c…

Java枚举的本质

目录 1.枚举简介 1.1.规范 1.2.枚举类真实的样子 1.3.枚举类的特点 1.4.枚举可以使用的方法 1.4.1.toString()方法 1.4.2.valueOf方法 1.4.3.values方法 1.4.4.ordinal方法 1.5.枚举的用法 1.5.1.常量 1.5.2.switch 1.5.3.枚举中增加方法 1.5.4.覆盖枚举方法 1.5…

热题系列章节1

22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&#xff1a…

LeetCode/NowCoder-链表经典算法OJ练习3

孜孜不倦&#xff1a;孜孜&#xff1a;勤勉&#xff0c;不懈怠。指工作或学习勤奋不知疲倦。&#x1f493;&#x1f493;&#x1f493; 目录 说在前面 题目一&#xff1a;返回倒数第k个节点 题目二&#xff1a;链表的回文结构 题目三&#xff1a;相交链表 SUMUP结尾 说在前…

两篇文章讲透数据结构之堆(一)!

目录 1.堆的概念 2.堆的实现方式 3.堆的功能 4.堆的声明 5.堆的实现 5.1堆的初始化 5.2堆的插入 5.2.1向上调整算法 5.2.2堆的插入 5.3堆的删除 5.3.1向下调整算法 5.3.2堆的删除 5.4获取堆顶元素 5.5获取堆的元素个数 5.6判断堆是否为空 5.7打印堆 5.8建堆 …

SQL开窗函数

文章目录 概念&#xff1a;语法&#xff1a;常用的窗口函数及示例&#xff1a;求平均值&#xff1a;AVG() &#xff1a;求和&#xff1a;SUM():求排名&#xff1a;移动平均计数COUNT():求最大MXA()/小MIN()值求分区内的最大/最小值求当前行的前/后一个值 概念&#xff1a; 开窗…

算法题1:电路开关(HW)

题目描述 实验室对一个设备进行通断测试,实验员可以操控开关进行通断,有两种情况: ps,图没记下来,凭印象画了类似的 初始时,3个开关的状态均为断开;现给定实验员操控记录的数组 records ,records[i] = [time, switchId],表示在时刻 time 更改了开关 switchId 的状态…