Spring MVC/Web

news2025/1/4 19:35:27

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.coloradmin.cn/o/1693209.html

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

相关文章

【静态分析】在springboot使用太阿(Tai-e)01

参考&#xff1a;使用太阿&#xff08;Tai-e&#xff09;进行静态代码安全分析&#xff08;spring-boot篇一&#xff09; - 先知社区 ---------------------------------------------------------------------- 由于spring-boot实现了控制反转与面向切面编程的设计思想&#x…

Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装

目录 一、查询推荐安装的驱动版本 二、安装推荐版本的驱动 1. 通过终端安装&#xff0c;只安装 nvidia 驱动&#xff08;亲测可用&#xff01;&#xff09; 2. 通过 software & Updates 安装&#xff0c;安装 nvidia 驱动。 三、查询能安装的最新的显卡驱动版本 1. 方…

微信好友这样打标签更高效!

为什么要做标签管理? ① 通过标签管理&#xff0c;可以清晰的知道每个私域好友的关系程度&#xff0c;如哪些是忠诚客户&#xff0c;哪些是意向客户&#xff0c;哪些是刚加上的客户等等。 这样就知道下一步要怎么操作&#xff0c;做到精细化运营。如忠诚客户跟进维护&#x…

逍遥模拟器安装xp时报错处理

在执行script.sh&#xff0c;无法执行程序&#xff0c;报错如下&#xff1a; Mounting /system and /vendor read-write /dev/block/sda6 is read-only 尝试了很多种的方法&#xff0c;都不行 经过研究发现是逍遥模拟器的设置问题&#xff1a; 出问题时&#xff0c;磁盘共享…

VBA批量合并带有图片、表格与文本框的Word

本文介绍基于VBA语言&#xff0c;对大量含有图片、文本框与表格的Word文档加以批量自动合并&#xff0c;并在每一次合并时添加分页符的方法。 在我们之前的文章基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符&#xff08;https://blog.csdn.net/zhebu…

[读论文]精读Self-Attentive Sequential Recommendation

论文链接&#xff1a;https://arxiv.org/abs/1808.09781 其他解读文章&#xff1a;https://mp.weixin.qq.com/s/cRQi3FBi9OMdO7imK2Y4Ew 摘要 顺序动态是许多现代推荐系统的一个关键特征&#xff0c;这些系统试图根据用户最近执行的操作来捕获用户活动的“上下文”。为了捕捉…

【热门话题】CentOS 常见命令指南

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 CentOS 常见命令指南一、文件与目录操作1. 切换目录2. 查看当前目录3. 列出目录…

vue+iview tabs context-menu 弹出框怎么修改样式

今天遇到一个需求说页面顶部的菜单右键弹出框离得有点远 代码是这样 <Tabs type"card" closable class"main-tags-col-tabs" v-model"activeTab" on-click"handleClickTag" :before-remove"handleBeforeRemove" capt…

ArcGIS提取含有计曲线的等高线

喜欢就关注我们吧&#xff01; 今天我么来看看&#xff0c;如何利用DEM提取含有计曲线的等高线&#xff01; 常规的话我们利用DEM提取的等高线都是不带计曲线的&#xff0c;无法把计曲线标注出来&#xff0c;今天我们就来看下&#xff0c;如何处理一下哦&#xff01;提取带有计…

【狂神说Java】Redis笔记以及拓展

一、Redis 入门 Redis为什么单线程还这么快&#xff1f; 误区1&#xff1a;高性能的服务器一定是多线程的&#xff1f; 误区2&#xff1a;多线程&#xff08;CPU上下文会切换&#xff01;&#xff09;一定比单线程效率高&#xff01; 核心&#xff1a;Redis是将所有的数据放在内…

开视频号小店要花哪些钱?这些费用大家要知道

大家好&#xff0c;我是喷火龙。 目前&#xff0c;视频号小店从推出到现在已经快两年的时间了&#xff0c;视频号小店虽然门槛高&#xff0c;但是单价也高&#xff0c;利润也高&#xff0c;市场环境也好&#xff0c;算是一个不错的项目。 接下来给大家讲讲开视频号小店要花哪…

ensp-三层交换技术

交换机-三层交换 一.概述 单臂路由有明显的缺陷,单臂路由的链路使用率高,可能会造成网路拥塞,造成网络不可用 可以让多个交换机连接路由器的不同接口,但是路由器的接口毕竟有限,不像交换机一样有那么多接口 使用三层交换解决路由器接口不够用问题 二.三层交换 1.创建多个VLAN…

可重构柔性装配产线,为智能制造领域带来了新的革命性变革

随着科技的飞速发展&#xff0c;个性化需求逐渐成为市场的主导。在这个充满变革的时代&#xff0c;制造业正面临着前所未有的挑战和机遇。如何快速响应市场需求、提高生产效率、保证产品质量&#xff0c;成为每一家制造企业必须思考的问题。 在这样的背景下&#xff0c;富唯智…

【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在现代网络通信和路径规划领域&#xff0c;最短路径路由优化算法是一项关键技术。它涉及在给定的网络拓扑中寻找从源点到目标点的最短或成本最低的路径。近年来&#xff0c;遗传算法&#xff08;GA&#xff09;因其出色的全局…

Python3 笔记:部分专有名词解释

1、python 英 /ˈpaɪθən/ 这个词在英文中的意思是蟒蛇。但据说Python的创始人Guido van Rossum&#xff08;吉多范罗苏姆&#xff09;选择Python这个名字的原因与蟒蛇毫无关系&#xff0c;只是因为他是“蒙提派森飞行马戏团&#xff08;Monty Python&#xff07;s Flying Ci…

2024.05.18学习记录

1、Vue3 Composition API Vite jsx 2、react 基本使用、高级用法 3、刷题&#xff1a;回溯部分剩下的题目

屎山代码SSM转换Springboot

SSM项目转Springboot项目 最近很多人可能是在网上买的那种屎山代码&#xff0c;数据库都是拼音的那种 比如项目如下所示&#xff1a; 这种屎山代码我改过太多了&#xff0c;很多人可能无从下手&#xff0c;因为代码结构太混乱了&#xff0c;但是我改过太多这种代码&#xff0…

用HAL库改写江科大的stm32入门例子-6-2 定时器外部时钟

实验目的&#xff1a; 熟悉外部时钟的应用。 实验步骤&#xff1a; 创建项目参照前面的文章&#xff0c;集成oled(没有oled,用uart串口传递也可以)选择外部时钟源时钟源参数设置编写代码&#xff1a; 5.1声明全局变量&#xff0c;如果发生定时器中断的时候&#xff0c;在回调…

从ZooKeeper切换到ClickHouse-Keeper,藏着怎样的秘密

本文字数&#xff1a;7772&#xff1b;估计阅读时间&#xff1a;20 分钟 作者&#xff1a;博睿数据 李骅宸&#xff08;太道&#xff09;& 小叮当 本文在公众号【ClickHouseInc】首发 本系列前两篇内容&#xff1a; 从ES到ClickHouse&#xff0c;Bonree ONE平台更轻更快&a…

操作抖音小店一直不出单怎么办?只需要做好这两点就可以了!

大家好&#xff0c;我是电商小V 最近很多新手小伙伴来咨询我说自己操作抖音小店&#xff0c;自己的店铺长时间不出单应该怎么办&#xff1f;今天咱们就来详细的说一下&#xff0c; 咱们要清楚的就是自己的店铺不出&#xff0c;只需要咱们做好这两点就可以了&#xff0c; 第一点…