View 视图 : Model2 JSP
解析模型的数据
产生HTML响应
请求模型的更新
发送用户输入给控制器
Controler 控制器:Model2 Servlet
接收并验证HTTP请求的数据
将用户数据与模型的更新相映射
选择用于响应的视图
Model 模型:Model2 JavaBean (数据模型 JavaBean 和 业务逻辑模型 JavaBean)
封装应用状态
响应状态查询
暴露应用功能
通知视图改变
交互关系:
1. 首先是展示视图给用户,用户在这个视图进行操作,并填写一些业务数据
2. 然后用户用单击提交按钮,发出请求
3. 视图发出的用户请求会达到控制器,在请求中包含了想要完成什么样的业务功能及相关数据
4. 控制器处理用户请求,会把请求中的数据进行封装,然后选择并调用合适的模型,请求模型进行状态更新,然后选择接
下来要展示给用户的视图。
5. 模型处理用户请求的业务功能,同时进行模型状态的维护和更新。
6. 当模型状态发生改变的时候,模型会通知响应的视图,告知视图它的状态发生了改变。
7. 视图接到模型的通知后,会向模型进行状态查询,获取需要展示的数据,然后按照视图本身的展示方式,把这些数据展示出来。
MVC 的核心手段是解耦
模型和视图是解耦的
Model2时期的MVC
Servlet+JSP+JavaBean
缺点: 1. 流程凌乱 servlet在完成对用户的处理后,下一个页面是谁?如何跳转,这些都是在servlet代码完成,导致
Servlet既要处理请求,还有负责页面的流程,功能不够单一,整个系统的页面流程很难把握,页面流程
都被分散到各个Serlet里面了
2. 数据传递无序。
3. 缺乏辅助功能,没有统一的分发调度、验证框架、国际化、本地化、例外消息处理等
Struts1时期的MVC
缺点: 1. Action实现类必须继承Struts1中的Action,降低了灵活性
2. 一个应用中,只能使用一个单一的ActionServlet,导致配置冲突
3. Action的API同 HttpServletRequest和HttpServletResponse是耦合的,单元测试困难
4. 页面传值的JavaBean必须继承Struts1中的FormBean,而其本质就是一个 JavaBean
5. 没有独立的拦截器模型,类似面向切面 (AOP)的操作都要写成 Filter,使用和配置都较弱
Struts2 MVC
视图(结果Result) -》 提交请求 -》 控制器(FilterDispatcher)
控制器(FilterDispatcher)-》根据URL调用动作-》模型(动作Action)
模型(动作Action)-》选择结果-》视图(结果Result)
控制器--FilterDispatcher 负责根据用户提交的URL和struts.xml中的配置,选择Action
其实就是一个过滤器,体现了J2EE核心设计模式中的前端控制器模式
动作---Action 请求经过FilterDispatcher,分发到合适的动作Action。 Action负责把用户的参数组装成合适的数
据模型,并调用相应的业务逻辑,进行真正的功能处理,然后获取下一个视图展示所需要的数据。
与Servlet API 解耦,不需要直接去引用和使用HttpservletRequest与HttpServletResponse接口,方便单元测试
视图---Result 展示动作中获取到的数据展现给用户。 jsp 模板freemarker、velocity、图表jfreechart、报表
JasperReports、XML转为为HTML的XSLT等。
转载于:https://my.oschina.net/edwin0/blog/896166