Spring 框架基础(06):Mvc架构模式简介,执行流程详解
本文源码:GitHub·点这里 || GitEE·点这里
一、SpringMvc框架简介
1、Mvc设计理念
MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,MVC分层有助于管理和架构复杂的应用程序
- M:代表模型
Model
模型就是数据,应用程序的核心。
- V:代表视图
View
回显数据的界面,例如JSP就是用来展示模型中的数据。
- C:代表控制器
Controller
控制器的作用就是根据入参,把不同的响应数据(Model
),显示在不同的视图(View
)上。
2、SpringMvc简介
- 框架描述
SpringMVC
是一种基于Java
实现的MVC
设计模式的请求驱动类型的轻量级Web
框架,出自Spring
框架全家桶,与Spring
框架无缝整合,使用了MVC
架构模式的思想,将Web
层进行职责解耦。
- 框架优点
结构松散,几乎可以在SpringMVC
中使用各类视图,各个模块分离而且耦合度非常低,且易于扩展。与Spring
无缝集成,且简单,灵活,容易上手。
二、SpringMvc执行流程
1、流程图解
2、步骤描述
(1)、发起请求到前端控制器DispatcherServlet
;
(2)、前端控制器请求HandlerMapping
查找,Handler
可以根据xml
配置、注解进行查找;
(3)、处理器映射器HandlerMapping
向前端控制器返回Handler
;
(4)、前端控制器调用处理器适配器去执行Handler
;
(5)、处理器适配器去执行Handler
;
(6)、Handler
执行完成给适配器返回ModelAndView
;
(7)、处理器适配器向前端控制器返回ModelAndView
,ModelAndView
是springmvc
框架的一个底层对象,包括Model
和view
;
(8)、前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图 ;
(9)、视图解析器向前端控制器返回View
;
(10)、前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView
对象中)填充到request
域中;
(11)、前端控制器向用户响应结果 ;
3、核心组件
- 前端控制器
DispatcherServlet
:请求离开浏览器后,最先到达的就是DispatcherServlet,是整个流程控制的中心,作用接收请求,响应结果,相当于转发器,中央处理器。减少各个组件之间的耦合度。
- 处理器映射器
HandlerMapping
:根据请求的url路由到指定接口,用户请求找到Handler处理器,springmvc提供不同类型映射器,例如:Xml配置方式,注解方式等。
- 处理器适配器
HandlerAdapter
:按照特定规则去执行Handler,SpringMvc支持多种处理器,各种处理器中的处理方法各不相同,为了解决适应多种处理器,就出现了处理器适配器。
- 处理器
Handler
:处理用户请求,涉及具体业务逻辑,需要程序员根据业务需求开发。编写Handler时按照HandlerAdapter的规则开发,这样适配器才可以正确执行Handler。
- 视图解析器
ViewResolver
:负责将请求的响应结果生成View,根据逻辑视图名解析成物理视图名,就是具体页面地址,生成View视图对象,对View进行渲染,通过页面展示给用户。
- 视图
View
:SpringMvc框架提供很多的View视图类型的支持,包括:jsp、freemarker、pdf等。通过页面标签或页面模版解析模型数据回显到页面,需要根据业务开发具体页面。
三、整合Spring框架配置
1、spring-mvc配置
<!-- 扫描文件 -->
<context:component-scan base-package="com.spring.mvc.controller" />
<!-- MVC默认的注解映射的方式 -->
<mvc:annotation-driven />
<mvc:default-servlet-handler/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/page/" /><property name="suffix" value=".jsp" />
</bean>
2、Web.xml配置
<servlet><servlet-name>spring-mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>spring-mvc</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
3、测试接口
@Controller
public class HelloController {@RequestMapping("/getInfo")public @ResponseBody String getInfo (String name){return name ;}
}
4、常用注解说明
@Controller
标记一个类是Handler,也就是开发的Controller,然后使用@RequestMapping或其他相关注解(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping),用来关联请求和Controller方法之间的映射关系,这样的Controller 就可以被请求访问。
@RequestMapping
处理请求地址映射的注解,可作用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以类上标注地址作为父路径。
@requestParam
主要用于在SpringMvc框架的控制层获取参数,三个常用参数:defaultValue表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value值表示传入的参数名称。
@RequestBody
接收请求体中传递给后端的Json字符串数据的,GET方式无请求体,所以使用@RequestBody接收数据时,不能使用GET方式提交数据,需要用POST方式进行提交。
@ResponseBody
该注解用于方法的返回对象,可以通过配置转换器为指定数据响应格式,如果希望返回的数据不是View试图页面,而是指定数据格式的时候使用,例如:Json、Xml等。
@Autowired
按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
@Resource
按照ByName自动注入,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
四、常见参数映射
1、普通映射
@RequestMapping("/getSum")
public Integer getSum (int a,int b){return a+b ;
}
测试:
http://localhost:6003/getSum?a=1&b=2
传参名称和方法参数保持一致。
2、指定参数名
@RequestMapping("/getInfo")
public String getInfo (@RequestParam("name") String var1,@RequestParam("say") String var2){return var1+":"+var2 ;
}
测试:
http://localhost:6003/getInfo?name=cica&say=hello
传参名和 @RequestParam 指定的参数名要对应。
3、数组参数
@GetMapping("/getArray")
public String getArray (String[] ids){return ids[0]+"-"+ids[1] ;
}
测试:
http://localhost:6003/getArray?ids=2&ids=3
传递并解析数组类型的参数格式。
4、Map参数
@RequestMapping("/getMap")
public String getMap (@RequestParam Map<String,String> paramMap){return paramMap.get("name") ;
}
测试:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
这里以Post方式将相关参数传递CityEntity实体对象中。
5、包装参数
@PostMapping("/getCityEntity")
public CityEntity getCityEntity (CityEntity cityEntity){return cityEntity ;
}
测试:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
这里以Post方式将相关参数传递CityEntity实体对象中。
6、Rest风格参数
@GetMapping("/getId/{id}")
public String getId (@PathVariable("id") Integer id){return "id="+id ;
}
测试:
http://localhost:6003/getId/1
RestFul 风格参数映射。
五、源代码地址
GitHub·地址
https://github.com/cicadasmile/spring-mvc-parent
GitEE·地址
https://gitee.com/cicadasmile/spring-mvc-parent
Spring 框架基础(06):Mvc架构模式简介,执行流程详解相关推荐
- data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解
本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...
- MySQL系列---架构与SQL执行流程详解
文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...
- spring mvc返回页面显示空白_Spring 框架基础(06):Mvc架构模式简介,执行流程详解...
一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...
- .net mvc actionresult 返回字符串_Spring 框架基础(06):Mvc架构模式简介,执行流程详解
一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...
- spring框架两大核心:IOC和AOP的详解
目录 一.IOC和AOP的介绍 二.IOC 1.IOC初始化属性的方式 1.使用构造方法完成属性初始化 2.使用type数据类型完成属性初始化 3.使用p命名空间初始化对象 4.使用c命名空间初始化对 ...
- 达梦DM8单进程多线程架构模式下各线程详解
达梦数据库进程管理方式类似于Mysql,属于单进程多线程模式.数据库服务进程包含:DmServer(主服务进程)和DmAPService(备份服务进程).线程主要包括:监听线程.IO线程.工作线程.调 ...
- 智能座舱架构与功能开发流程详解
作者 | Jessie 出品 | 焉知 智能汽车座舱发展主要经历了四个阶段:包括电子座舱阶段.智能助理阶段.人机共驾阶段.第三生活空间.当前随着智能汽车在AI算法.智能驾驶上的不断发展进入了L3级自动 ...
- MVC架构模式(2)
简介: MVC最初是在Smaltalk_80中被用来构建用户界面的.M代表模型Model,V代表视图View,C代表控制器Controller. Model模型层,可以简单理解就是数据层,用于提供数据 ...
- MVC架构模式详细说明
一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式(Mod ...
最新文章
- Linux抓包工具tcpdump详解
- 原来腾讯面试题也不难,面试官:给我说一下你理解的分布式架构?
- Servlet之Filter过滤器
- FFT快速傅式变换算法halcon算子,持续更新
- [css] transition、animation、transform三者有什么区别?
- 计算机内部总线和外部总线,科学网-怎样将计算机内部总线扩展为外部网络?-姜咏江的博文...
- C# 循环语句 for
- 海康威视摄像头激活失败的几个原因和方法
- python多重背包_多重背包
- 大话西游2人数最多服务器,大话2大话各个服务器狂人榜排名 看大话如今服务器...
- 中国新材料产业十四五竞争格局及产销趋势研究报告2021年版
- 10分钟让你掌握Linux常用命令(+2万+++收藏)
- python除法程序_Python中的除法
- 北京航空航天大学计算机学院保研率,北京航空航天大学计算机学院(专业学位)计算机技术保研夏令营...
- halcon测量总结
- 用js将HTML文本导出生成word文档
- 找出游戏的获胜者(java)
- python电商数据分析统计服_python爬虫学习:电商数据分析
- 关于设定校园二手租赁系统的计划、功能及建议
- 数据雪崩和数据穿透、击穿
热门文章
- 两台服务器建立信任关系(root,普通用户)
- 闲心之谈之虚拟货币系列:1、KDJ图实用技巧
- 常用的寄存器( bss段的作用)
- tensorflow中的Session方法解释
- USACO-Section2.1 Healthy Holsteins (深度优先搜索)
- Python url中提取域名(获取域名、获取顶级域名、tldextract)
- golang操作mysql数据库(Go-SQL-Driver/MySQL)
- twisted系列教程八–延迟的诗
- Codeforces Round #565 (Div. 3) A B C E
- 移动端常用的四个框架