ssm科普篇
springMVC执行步骤:
1、用户发送请求到前端控制器,前端控制器根据请求信息来决定选择页面控制器,并将请求委托给它
2、页面控制器收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,并进行验证,然后将命令对象委托给业务对象
处理;处理完后返回一个ModelAndView(模型数据和逻辑试图名)
3、前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染
4、前端控制器收回控制权,将响应返回给用户。
springMVC核心架构的主要流程
1、用户请求给DispatcherServlet前端控制器,前端控制器收到请求后委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制
2、DispatcherServlet前端控制器给HandlerMapping类控制器,类控制器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处
理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,方便后续添加新的映射策略。
3、DispatcherServlet前端控制器给HandlerAdapter方法控制器,方法控制器将会处理器包装给适配器,从而支持多种类型的处理器,即适配器
设计模式的应用,从而很容易支持很多类型的处理器
4、HandlerAdapter方法控制器给处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用对应的处理器的处理方法,完成功能处理;
并返回一个ModelAndView对象(包含模型数据,逻辑视图名)
5、ModelAndView的逻辑视图名给ViewResolver视图控制器,ViewResolver将把逻辑视图名解析为具体的view,通过这种策略模式,也可以换成其他
视图技术。
6、将控制权返给DispatcherServlet,由DispatcherServlet返回响应给用户
在web.xml中配置view分发器
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置HandlerMapping(页面控制器)
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
支持多种类型的页面控制器
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
viewResoler的配置
<bean class="org.springframework.web.servlet.view.InternalResouceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
Spring MVC四大核心接口
1、DispatcherServlet接口
前端控制器,所有的请求都需要经过它来进行统一分发处理。 在DispatcherServlet将请求分发给spring controller之前。需要借助于spring提供的
HandlerMapping定位具体的controller
2、HandlerMapping接口
请求到controller映射
3、HandlerAdapter接口
处理器给你处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的处理方法,并完成功能处理;返回一个ModelAndView对象
4、ViewResolver接口
在web应用中查找view对象,从而将相应结果渲染给用户
ssm科普篇的更多相关文章
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- PDG科普篇
作者:马健邮箱:stronghorse_mj@hotmail.com发布:2009.09.26 更新历史 2014.11.11补充了文字版PDG的部分内容增加CX PDF等打包格式的相关内容 2009 ...
- Nodejs的运行原理-科普篇
前言 Nodejs目前处境稍显尴尬,很多语言都已经拥有异步非阻塞的能力.阿里的思路是比较合适的,但是必须要注意,绝对不能让node做太多的业务逻辑,他只适合接收生成好的数据,然后或渲染后,或直接发送到 ...
- Andriod Studio科普篇——4.关于编译的常见问题
1.android支持库未安装 编译不过,提示如下: Could not find any version that matches com.android.support:appcompat-v7: ...
- Andriod Studio科普篇——3.关于gradle插件的常见问题
1.andriod gradle插件版本过低. 出错位置: dependencies{ classpath 'com.android.tools.build:gradle:0.10.2' } 提示信息 ...
- Android Studio科普篇——2.误区
1.删除一行是ctrl+x? 这是一个被谣传得很广泛的快捷键,但其实删除一行的快捷键不是ctrl+x,而是ctrl+y.ctrl+x在不选中内容的情况下,是剪切当前行,而ctrl+y才是删除当前行,它 ...
- Android Studio科普篇——1.几个个性化设置
本人未研读过android-studio使用文档,亦未去好好琢磨它的各种使用技巧等.以下内容均来自个人使用经验,如有讹误,还请指正. 1.主题. File->Settings, 搜索Theme, ...
- 初级Java面试题 – SSM框架篇
加入我的QQ群(701974765) 获取更多好用又好玩的软件,还有不定期发放的福利呦(- ̄▽ ̄)- Spring的优点/对Spring的理解 Spring的AOP编程 Spring的IOC Spri ...
- MongoDB入门系列之科普篇
目录 背景 对比 MongoDB的数据存储格式 背景 最近公司扩展了很多国外客户,那么一个很严重的问题就是翻译,对于国外客户来说,肯定看不懂中文,那就要项目中提供切换各自国家语言的功能. 由于每个 ...
随机推荐
- linux运维、架构之路-内网NTP时间服务器
一.环境 [root@m01 tmp]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@m01 tmp]# hostname -I ...
- C++ 单链表模板类实现
单链表的C语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立不带头结点的单链表(头插入法建表).建立带头结点的单链表(尾插入法建表),输出带头结点的单链表 #i ...
- UE4开发PSVR游戏,使用RazorGPU进行调试的方法
打开Project Launcher,如果没有需要的Devkit平台目标,就点下方的Device Manager,右键Claim 相应的目标.如果已经出现在Project Launcher中,点击上方 ...
- PB TB级数据
Byte.KB.MB.GB.TB.PB.EB.ZB.YB. 1KB=1000B1MB=1000KB1GB=1000MB1TB=1000GB 1TB=240B=1024MB 1PB=250B k M G ...
- JS-计算身份证校验码(最后一位)
在线预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- 122、TensorFlow多设备运行
# 如果你想使你的程序运行在不同的设备上 # tf.device函数提供了一个方便的方法来实现 # 所有在特定上下文中的操作都放置在相同的设备上面 # A device specification h ...
- mysql处理百万数据遍历速度提升(遍历图片名字是否存在)
CREATE DEFINER=`root`@`localhost` FUNCTION `fun_wcmappendix02`(image_name VARCHAR(50)) RETURNS int(1 ...
- day24—JavaScript实现导航栏底部引线跟随移动
转行学开发,代码100天——2018-04-09 前面的学习笔记中记录过,利用:before和:after实现导航栏鼠标移动跟随效果,今天通过JavaScript代码实现同样的效果,以作对比. < ...
- php基础函数,数组
1·字符串的处理: 2·爆炸函数(explode()): 里面填两个参数把.炸掉,在abc里 炸出来的数组 粘回去(implode()): 两个参数同上 3·截取字符串(substr()) 里面放三个 ...
- hdu6570Wave (暴力求解)
Problem Description Avin is studying series. A series is called "wave" if the following co ...