Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
Spring Web MVC 也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet
;
应用控制器其实拆为处理映射器
(Handler Mapping)
进行处理器管理和视图解析器
(View Resolver)
进行视图管理;页面控制器
/
动作
/
处理器为
Controller
接口(仅包含
ModelAndViewhandleRequest(request, response)
方法)的实现(也可以是任何的
POJO
类);
提供了强大的约定大于配置(惯例优先原则)的契约式编程支持
Front Controller:前端控制器,负责为表现层提供统一访问点,从而避免Model2中出现的重复的控制逻辑(由前端控制器统一回调相应的功能方法,如前边的根据submitFlag=login转调login方法);并且可以为多个请求提供共用的逻辑(如准备上下文等等),将选择具体视图和具体的功能处理(如login里边封装请求参数到模型,并调用业务逻辑对象)分离。
ApplicationController:应用控制器,前端控制器分离选择具体视图和具体的功能处理之后,需要有人来管理,应用控制器就是用来选择具体视图技术(视图的管理)和具体的功能处理(页面控制器/命令对象/动作管理),一种策略设计模式的应用,可以很容易的切换视图/页面控制器,相互不产生影响。
PageController(Command):页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示,可以是命令设计模式的实现。页面控制器也被称为处理器或动作。
Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如Servlet API)的访问/设置模型数据,一般通过ThreadLocal模式实现。、
具体执行步骤如下:
1 、 首先用户发送请求 ————> 前端控制器,前端控制器根据请求信息(如 URL )来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名)
3、 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染
4、 前端控制器再次收回控制权,将响应返回给用户
文章浏览阅读1.9w次,点赞27次,收藏211次。在前面的文章中我,我们也写过kali的安装。时间久了,kali的更新也比较快。这里我们以最新版为例,进行安装演示。_kali
文章浏览阅读1.4k次。Andorid 10 SurfaceFlinger 模块介绍 SurfaceFlinger 接受来自多个源的数据缓冲区,然后将它们进行合成并发送到显示屏。WindowManager 为 SurfaceFlinger 提供缓冲区和窗口元数据,而 SurfaceFlinger 可使用这些信息将 Surf..._asurfacetransaction
文章浏览阅读1.2k次。平方根升余弦滤波器的设计2005年第9期中图分类号:TNTI3 文献标识码:A 文章编号:1009—255212oo5)o9—0058—03平方根升余弦滚 降数字滤波器 的设计与实现文安平(武汉科技大学信息科学与工程学院,武汉 430081)摘 要:现代数字通信中广泛采用平方根升余弦滚降数字滤波器作为基带成形滤波器和 匹配滤波器。介绍 了平方根升余弦滚降数字滤波器的设计和优化方法,并提 出了用..._平方根升余弦滤波器
文章浏览阅读754次。一个简单的按钮图片加载代码,一般人出现的问题都是加载的图片可能会很小,怎么解决这个问题呢?来看看下面的代码吧,对于相关的迷惑点我会给出讲解,同时在学习这个代码的过程中我们也学学其他的一些功能实现。如何显示中文、如何设置字体以及颜色等。 #include #include #include #include #include in_qt 加载图片layout
文章浏览阅读1.4k次。迪文屏幕开发——采坑指南分辨率!地址通信下载上电分辨率!硬件本身的分辨率自己制作的背景图片的分辨率新建工程的分辨率这三个分辨率必须要保持一致!否则会出现显示混乱的状况。地址这里的地址就是屏幕内部的储存地址,我们在自己选择地址储存信息的时候,可以使用的地址是0x1000~0xFFFF.通信迪文屏在进行通信的时候,需要注意三点:1、确认自己编辑的控件勾选了数据上传2、调整屏幕硬件配置,打开数据上传功能3、迪文屏所有的发送和接收的数据,都是十六进制下载上电不同尺寸的屏幕需要的电压是_迪文屏分辨率低
文章浏览阅读92次。题目描述:ydc有一棵n个结点的黑白相间的大树,从1到n编号。这棵黑白树中有m个黑点,其它都是白点。对于一个黑点我们定义他的好朋友为离他最远的黑点。如果有多个黑点离它最远那么都是它的好朋友。两点间的距离定义为两点之间的最短路的长度。现在你要摧毁一个白点。摧毁后有一些黑点会不高兴。一个黑点不高兴当且仅当他不能到达任何一个在摧毁那个白点前的好朋友。请你最大化不高兴的黑点数。解题..._ydc的大树
文章浏览阅读71次。一.构造函数 一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维护多个定时器。在构造deadline_timer时指定时间:1 basic_deadline_timer(boost::asio::io_service & io_service);2 3 basic_deadline_timer( boost::asio::io..._boost asio deadline lamdba
文章浏览阅读8.2k次,点赞9次,收藏112次。文章目录前言1 Partition Compile2 Autopartitioning(Ease of Adoption)3 Specifying Partitions Manually(Recommended)3.1 topcfg.v file3.2 Two step commands for partition compile3.3 Three step commands for partition compile3.4 Profiling of Compilation Time4 Best Pract_vcs加速编译
文章浏览阅读2.8w次,点赞68次,收藏167次。在正文开始之前,我们需要说明一件事情,在我们使用函数生成的随机数都不是真正的随机数,准确的叫法应该是伪随机数。在 C 语言当中使用随机数要用到 rand 函数和 srand 函数。int rand():返回值为随机值,参数为空,通过 rand 函数就会产生一个随机数。void srand(unsigned int seed):返回值为空, 就是设置随机种子的,当我们不设置随机种子的时候,默认设置的..._c语言生成随机
文章浏览阅读4.2k次,点赞2次,收藏8次。如果最终得到的数据是两路数据的差值, 我们可以采用ADC的 Difference 工作模式#include #include #include "inc/hw_memmap.h"#include "driverlib/adc.h"#include "driverlib/gpio.h"#include "driverlib/pin_map.h"#include "driver_adc检测 短路保护
文章浏览阅读1.7k次。当遇到crash时,查看线程栈,只能看到栈帧的地址,使用imagelookup–address地址可以方便的定位到这个地址对应的代码行。命令可以打印出线程的堆栈信息,该信息比左侧的DebugNavigator看到的还要详细一些。在调试时,动态的修改变量的值,这在调试想要让应用执行异常路径(如执行某个else情况)很有用。命令类似,所以也是可以打印常量、变量,打印表达式返回的对象等。在控制台执行该命令,可以在不修改代码,不重新编译的情况下,修改界面上的视图。命令是打印所有线程的堆栈信息。......_xcode po命令
文章浏览阅读969次。PPT的配色方法PPT中色彩的用处层次更加的清晰,ppt中有小标题 大标题 正文等不同的部分,每一个部分的重点和级别程度也不一样,可以使用不同的颜色来对重点和非重点进行区分分割内容区域,通常一个PPT具有很多个部分,每个部分表达的内容可能不一样,比如开题PPT,就包括了研究背景和意义、研究现状、研究内容、工作进度安排和参考文献五个部分。分别对每个部分用不同颜色加以区分(这里求同存异,我个人是不太赞成老师这一观点的,因为我一直觉得一套PPT必须有一套的完整风格)强化主题联系,在专业的场合,_ppt配色教程