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怎么 ...
随机推荐
- Shell程序实例集锦一
2007-12-13 07:51:40 标签:实例 程序 Shell 休闲 职场 Shell程序实例集锦一 前言:下面这些hell实例都是自己写的或者用过的一些Shell小程序.整理整理. ...
- IDEA忽略文件,防止git提交不想提交的文件
IDEA忽略文件,防止git提交不想提交的文件 方法一(只对没有add到仓库的文件有效): 方法二(只对没有add到仓库的文件有效): 在IDEA中安装.ignore插件.创建好了之后: 安装.git ...
- h5-拖拽接口
1.原效果网页 拖拽后: 2.主要实现代码 <div class="div1" id="div1"> <!--在h5中,如果想拖拽元素,久必须 ...
- Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员、局部),匿名对象的调用,构造代码块(5)
Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员.局部),匿名对象的帝爱用,构造代码块(5)
- Linux 杀掉所有Java进程
ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9 管道符"|"用来隔开两个命令,管道符左 ...
- 项目常用JS方法封装--奋斗的IT青年(微信公众号)
...
- PTA 自测-4 Have Fun with Numbers
#include<iostream> #include<string> #include<cstring> #include<vector> using ...
- bzoj2127happiness(最小割)
一眼最小割. 一种比较好想的建图方式如下: 连源点表示学文,连汇点表示学理,然后adde(S,id(i,j),a[i][j]),adde(id(i,j),T,b[i][j]):对于相邻座位选择同一科的 ...
- P1781 宇宙总统
题目地址:https://www.luogu.com.cn/problem/P1781 题目描述:地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n 个非凡拔尖的人竞选总统,现在票 ...
- POJ-2031 Building a Space Station (球的最小生成树)
http://poj.org/problem?id=2031 Description You are a member of the space station engineering team, a ...