Spring MVC

一、什么是MVC

MVC就是一种思想,而Spring MVC是对MVC思想的具体实现

MVC是Model View Controller的所缩写,是一种软件架构模式,它将软件系统Fenwick墨香,视图和控制器三个基本部分。

Model:是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据

View:是应用程序中处理数据显示的 部分,通常视图是一句模型数据创建的

Controller:是应用程序中处理用户交互的部分。通常控制器负责从视图中读取数据,控制用户输入并且向模型发送数据。

MVC执行流程:

  1. 用户的请求首先先到Controller

  2. Controller将请求转发给Model

  3. Model处理业务并且将数据结果给Controller

  4. Controller会将数据给View引擎

  5. View转换数据生成最终的页面给用户

二、什么是Spring MVC

Spring MVC是一个Web框架,是基于Servlet API构建的框架。

它是对MVC思想的具体实现。

在构建项目时,Spring Web就是Spring MVC框架,是Spring boot里的核心。

三、Spring MVC功能

1.连接的功能:将用户浏览器和java程序连接起来,也就是访问一个地址能够调用到Spring程序。

2.获取参数的功能:用户访问的时候会带一些参数,在程序中获取到参数

3.返回数据的功能:执行了业务逻辑以后,要把程序的执行结果返回给用户

🍅Spring MVC创建和连接

        🎈使用@RequestMapping

使用@RequestMapping来实现URL路由映射,使得浏览器连接程序。

@RestController
//可以设置请求类型,规定路径,也可以只写一个name
//name小写
@RequestMapping(path="/sayhi",method = RequestMethod.GET) //必须通过path来
public class TestController {@RequestMapping("/sayhi")public String sayHi(){return "hello";}
}

访问http://localhost:8080/test/sayhi

        🎈@GetMapping

实现HTTP连接,但是只支持GET类型的请求。

如果有规定之只能使用get类型的请求,就直接使用

@GetMapping("/sayhi2")public String sayHi2(){return "hello";}

 访问2http://localhost:8080/test/sayhi2

 @PostMapping就是只支持Post类型的请求。

🍅获取参数

        🎈获取单个参数

得到name。

@RestController
@RequestMapping("/test")
public class TestController2 {@RequestMapping("/getname")
//使用servletpublic String getName(HttpServletRequest request){return "Name:"+request.getParameter("name");}@RequestMapping("/getnam2")
//使用Spring的方式
public String getName2(String name) { //依赖注入return "Name:" + name;
}

        🎈上传文件

@RequestMapping("/upload")public String upLoad(@RequestPart("myfile")MultipartFile file) throws IOException {//1.生成一个唯一的id | UUID = 全球唯一ID -> MAC + 随机种子 + 加密算法String name = UUID.randomUUID().toString().replace("-","");//2.得到源文件的后缀名name += file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));String path = "D:\\image\\ " + name;file.transferTo(new File(path));return path;}

        🎈获取Cookie/Session/header

获取Cookie

//获取cookie@RequestMapping("/getcookie")public String getCookie(@CookieValue("java")String ck){return ck;}

获取session 

//设置session@RequestMapping("/set_session")public String doPostConstruct(HttpServletRequest request){HttpSession session = request.getSession();if (session != null){session.setAttribute(_SESSION_KEY,"张三");return "session set success";}else {return "session set fail";}}//获取session@RequestMapping("/getsession")public String getSession(@SessionAttribute(required = false,value = "SESSION_KEY")String name){return name;}

获header

@RequestMapping("/header")
@ResponseBodypublic String header(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent;

🍅返回数据

       🎈 返回静态页面

首先创建一个静态页面:

 

@Controller
public class TestController3 {@RequestMapping("/index")public String index(){return "hello.html";}}

        

        🎈返回text/html 

@Controller
@ResponseBody//当成数据返回
public class TestController3 {@RequestMapping("/index")public String index(){return "hello.html";}
}

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

 1.请求重定向(redirect)将请求重新定位到资源;

        请求转发(forward)服务器端转发

2.请求重定向地址发生变化;

        请求转发地址不发生变化

3.请求重定向与直接访问新地址效果一致,不存在原来的外部资源不能访问;

        请求转发服务器端转发有可能会造成原外部资源不能访问

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

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

相关文章

7.27 Qt

制作简易小闹钟 Timer.pro QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # dep…

Cisco 路由器配置管理

大多数网络中断的最常见原因是错误的配置更改。对网络设备配置的每一次更改都伴随着造成网络中断、安全问题甚至性能下降的风险。计划外更改使网络容易受到意外中断的影响。 Network Configuration Manager 网络更改和配置管理 (NCCM)解决方案&#xff…

Python(四十五)二层循环中的break和continue

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

C#之泛型

目录 一、概述 二、C#中的泛型 继续栈的示例 三、泛型类 (一)声明泛型类 (二)创建构造类型 (三)创建变量和实例 (四)比较泛型和非泛型栈 四、类型参数的约束 (一…

elementUI --- el-select 下拉框 日历 级联选择

element UI 组件库中的 select 选择器 中下拉列表的样式,在页面渲染的时候,总是渲染为仅次于body级别的div ,这样子覆盖样子会影响全局其他的select选择器下拉框样式,试图通过给el-select加父标签来覆盖,然而并没有卵用…

【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法

一. 问题描述 当用户通过缩放手势、平移手势、倾斜手势和旋转手势与地图交互,控制地图移动改变其可见区域时,华为地图SDK没有提供直接获取用户手势类型的API。 二. 解决方案 华为地图SDK的地图相机有提供CameraPosition类&…

哈希表及其模拟实现

文章目录 一、解决哈希冲突1.1闭散列1.1.1线性探测1.1.2二次探测 1.2开散列 二、模拟实现哈希表三、HashMap源码的一些相关内容 哈希(散列)方法:构造一种存储结构,通过某种函数使元素的存储位置与它的关键码之间能够建立 一 一 映…

【JavaWeb】Tomcat底层机制和Servlet运行原理

🎄欢迎来到dandelionl_的csdn博文,本文主要讲解Java web中Tomcat底层机制和Servlet的运行原理的相关知识🎄 🌈我是dandelionl_,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一…

HCIA实验二

实验要求: 1.R2为ISP,只能配置IP 2.R1-R2之间为HDLC封装 3.R2-R3之间为PPP封装,pap认证,R2为主认证方 4.R2-R4之间为PPP封装,chap认证,R2为主认证方 5.R1、R2、R3构建MGRE,仅R1的IP地址固定…

【Nginx12】Nginx学习:HTTP核心模块(九)浏览器缓存与try_files

Nginx学习:HTTP核心模块(九)浏览器缓存与try_files 浏览器缓存在 Nginx 的 HTTP 核心模块中其实只有两个简单的配置,这一块也是 HTTP 的基础知识。之前我们就一直在强调,学习 Nginx 需要的就是各种网络相关的基础知识&…

AndroidStudio设计一个计算器

界面设计 activity_calcuator.xml 设计&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto&qu…

3ds Max图文教程: 创建致命的冠状病毒动画

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 病毒建模 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 在透视视口中创建一个半径为 50&#xff0c;线段为 20 的 GeoSphere。 创建地球 步骤 3 打开修改器列表并将置换修改器应用于地理 球。 置换…

【STL】模拟实现反向迭代器

目录 1. 读源码 2. 搭建框架 3. 迭代器的操作 operator*() operator->() operator() operator--() operator!() 4. 实现 list 的反向迭代器 5. 实现 vector 的反向迭代器 6. 源码分享 写在最后&#xff1a; 1. 读源码 我们之前实现的 vector&#xff0c;list…

类加载机制,类加载顺序

类加载顺序 ①类加载从上往下执行&#xff0c;依次执行静态的初始化语句和初始化块&#xff0c;而且类加载优先于对象创建。&#xff08;静态初始化语句和初始化块只加载一次&#xff09; ②创建本类的对象时&#xff0c;从上往下执行一次非静态的初始化语句和初始化块&#…

Unity《勇士传说》开发日记:如何制作可互动标识

要实现的需求&#xff1a; 在游戏当中&#xff0c;我们的主角走到宝箱前&#xff0c;可以将宝箱打开&#xff0c;走到洞穴口可以进入下一个场景&#xff0c;此时需要有个互动标识来提示用户。如图所示&#xff1a; 当角色走到宝箱前&#xff0c;弹出互动标识提示用户按下E键可…

关于idea如何成功运行web项目

导入项目 如图 依次选择 file - new - Project from Existing Sources 选择存放的项目目录地址 如图 导入完成 点击ok 如图 依次选择 Create project from existing sources 点击next如图 &#xff0c;此处默认即可 点击 next如图 点击next有该提示 是因为之前导入过…

jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序&#xff1a; 测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器 组件的作用范围&#xff1a; 同级组件同级组件下的子组件父组件 目前市面上的三类接口 1、基…

10分钟带你实现一个Android自定义View:带动画的等级经验条

先展示一下静态效果图 介绍一下我们的实现流程&#xff1a; 首先整个经验条有一个圆角边框的背景打底&#xff1b;然后给经验条绘制一条轨道&#xff0c;让用户比较直观地看到总进度的长度&#xff1b;在轨道的上层绘制我们的渐变色经验条&#xff1b;在经验条的上层绘制等级…

用html+javascript打造公文一键排版系统8:附件及标题排版

最近工作有点忙&#xff0c;所 以没能及时完善公文一键排版系统&#xff0c;现在只好熬夜更新一下。 有时公文有包括附件&#xff0c;招照公文排版规范&#xff1a; 附件应当另面编排&#xff0c;并在版记之前&#xff0c;与公文正文一起装订。“附件”二字及附件顺序号用3号黑…