Spring MVC及与structs MVC对比
一、Spring MVC
MVC: Model + View + Controller(数据模型+视图+控制器)
三层架构: Presentation tier + Application tier + Data tier(展现层+应用层+数据访问层)
MVC只存在于三层架构的展现层,三层架构是由Spring框架负责管理的。Service层、DAO层,则反馈在应用层和数据访问层。
M实际上是数据模型,是包含数据的对象。在Spring MVC里,有一个专门的类叫Model,用来和V之间的数据交互、传值;
V指的是视图页面,包含JSP、freeMarker、Thymeleaf等;
C就是控制器(Spring MVC的注解@Controller的类)。
二、原理:

解析步骤:
第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handler或称Controller):通过xml配置或者注解进行查找
第三步:找到之后,处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)
第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)
第五步:处理器适配器去执行Handler
第六步:Handler执行完给处理器适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析
第九步:视图解析器向前端控制器返回View
第十步:前端控制器对视图进行渲染
第十一步:前端控制器向用户响应结果
Tip:
前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。
处理器映射器(HandlerMapping):根据URL去查找处理器
处理器(Handler):(需要程序员去写代码处理逻辑的)
处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)
视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面。
三、struts组件的MVC实现
View部分:由jsp页面实现,并且struts提供了丰富的标签库,通过使用struts标签库可以快速实现view部分,当然也可以不用struts标签库,而用普通的jsp页面。
Controler:有两个控制器。
A:核心控制器(ActionSerlvet,只有一个,由struts自动创建)
B:业务逻辑控制器(Action,有多个,由用户自己创建)。业务逻辑控制器负责处理用户请求,它本身不具备处理能力,而是调用Model来完成处理。
Model部分:由ActionForm和JavaBean组成。其中ActionForm用于封装用户在jsp页面中所填写的数据。所有的用户填写的数据由系统自动封装成ActionForm对象。该对象被ActionServlet转发给Action。Action根据从ActionForm中取得用户所填写的数据,交给JavaBean进行处理。ActionForm实际上也是一个普通的JavaBean。它对应于jsp页面中各个输入数据项 。
struts工作流程
简述:
jsp页面向服务器发出请求,被ActionServlet拦截。ActionServlet根据用户的请求在struts配置文件中查找与之对应的Action,同时将用户的数据填充给对应的ActionForm,然后将ActionForm一起分发给Action进行处理,Action会自动调用相应的方法,将从ActionForm里面获取用户填写的数据,并调用模型(javaBean)进行相应的处理,然后把处理的结果显示在jsp页面中。
详述如下:
1.客户端填写完jsp页面的数据之后单击提交按钮向服务器发出http请求,客户端所有的请求都被 ActionSerlvet拦截。
2.ActionServlet根据用户的请求在struts-conifg.xml配置文件中查找与之对应的Action,同时把用户的数据填 充给对应的ActionForm,然后把ActionForm一起分发给Action进行处理。
3.Action会自动调用excute方法,在该方法里面Action将从ActionForm里面获取用户填写的数据,并调用模型(javaBean)进行相应的处理,然后把处理的结果显示在其它的视图(jsp页面)
Spring MVC及与structs MVC对比的更多相关文章
- spring mvc拦截器和<mvc:annotation-driven />的详解
MVC的拦截器 经本人在Spring mvc中对方案1和方案2的测试表明,并没有拦截静态资源,所以可以放心使用方案1和方案2,方案3可以放弃,并且可以放心使用<mvc:annotation-dr ...
- Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler /> 转载
Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler /> mvcmvc:resources ...
- 关于spring 3.0.5的 <mvc:resources mapping="***" location="***">标签的使用
spring mvc 的<mvc;resources mapping="***" location="***">标签是在spring3.0.4出现的 ...
- 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系
#[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 搭建你的环境 使用这套框架不是很长时间.但也基本应用了几个项目中了.在此和大家分享一下我是怎样一步一步搭建此框架 ...
- JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系
郭晨 软件151 1531610114 [整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 visio文件下载 概述 一个JavaEE的项 ...
- Spring.Net是怎么在MVC中实现注入的(原理)
本文将介绍Spring.Net(不仅仅是Spring.Net,其实所有的IoC容器要向控制器中进行注入,原理都是差不多的)在MVC控制器中依赖注入的实现原理,本文并没有关于在MVC使用Spring怎么 ...
随机推荐
- MVPR下的PHP分页教程
这个PHP分页其实不难,现在就开始看看核心思路吧. 我习惯从最底层开始看起. 1. 首先用LIMIT偏移QUERY的指针 /* * get hot post by current page * @pa ...
- 吴裕雄--天生自然 JAVA开发学习:switch case 语句
public class Test { public static void main(String args[]){ //char grade = args[0].charAt(0); char g ...
- Ubuntu---VIM 常用命令
今天学习 VIM 的一些常用命令,向传说中的“最后一个编辑器”进攻,哈哈 插入命令: # insert i : 当前光标之前插入 I : 在此行的行首插入 o : 在下一行新起一行插入 O : 在上一 ...
- PAT Advanced 1070 Mooncake (25) [贪⼼算法]
题目 Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many typ ...
- PAT Advanced 1084 Broken Keyboard (20) [Hash散列]
题目 On a broken keyboard, some of the keys are worn out. So when you type some sentences, the charact ...
- 图论模型--dijstra算法和floyd算法
matlab代码实现:https://blog.csdn.net/weixin_40108753/article/details/81237585 python代码实现:
- iOS Reactivecocoa(RAC)知其所以然(源码分析,一篇足以)
前言 如今RAC大行其道,对其讲解的博客也多不胜数,稍微有点经验的估计也已经对这个爽到不要不要的框架运用自如了,真正沉下来研究其实现原理的估计也不在少数,这里仅仅是记录一下自己的分析理解,更是在写这篇 ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第十天】(单点登录系统实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
- kotlin 单例模式
class Single{ companion object { val instance:Single by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZE ...
- The website is API(3)
网络爬虫实战知识准备: Requests库.robots(网络爬虫排除标准).BeautifulSoup库 一.Re正则表达式 1. 简洁地表达一组字符串 通用的字符串表达框架 字符串匹配 编译: 2 ...