什么是MVC模式?
MVC (Model View Controller) 是⼀个设计模式,使⽤MVC应⽤程序被分成三个核⼼部件:模型、视图、控制器。它们各⾃处理⾃⼰的任务。M是指数据模型,V是指⽤户界⾯,C则是控制器。使⽤MVC的⽬的是将M和V的实现代码分离,从⽽使同⼀个程序可以应⽤于不同的表现形式。
MODEL: 封装了所有的商业逻辑以及规则。通常被JavaBean或EJB实现。
VIEW: 使⽤商业逻辑处理后的结果并构建呈现给客户端的响应。通常被JSP实现。 CONTROLLER:管理和控制所有⽤户和应⽤程序间的交互。通常是⼀个servlet接收⽤户的请求并把所有的输⼊转交给实际⼯作的MODEL。最后调⽤JSP返回输出。
MVC模式的好处:
1.各施其职,互不⼲涉
在MVC模式中,三个层各施其职,所以如果⼀旦哪⼀层的需求发⽣了变化,就只需要更改相应的层中的代码⽽不会影响到其它层中的代码。
2.有利于开发中的分⼯
在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分⼯。⽹页设计⼈员可以进⾏开发视图层中的JSP,对业务熟悉的开发⼈员可开发业务层,⽽其它开发⼈员可开发控制层。
3.有利于组件的重⽤
分层后更有利于组件的重⽤。如控制层可独⽴成⼀个能⽤的组件,视图层也可做成通⽤的操作界⾯。
Struts就是⼀个基于MVC模式的框架。
2.请说说Struts1和Struts2的区别?
特性Struts1Struts2
Action Struts1.x要求Action类要扩展⾃
⼀个抽象基类。Struts1.x的⼀个
共有的问题是⾯向抽象类编程⽽
不是⾯向接⼝编程。Struts2的Action类实现了⼀个Action接⼝,连同其他接⼝⼀起来实现可选择和⾃定义的服务。Struts2提供⼀个名叫ActionSupport的基类
来实现⼀般使⽤的接⼝。当
然,Action接⼝不是必须的。任何使⽤
execute⽅法的POJO对象可以被当
作Struts 2的Action对象来使⽤。
线程模型Struts1.x Action类是单例类,因
为只有⼀个实例来控制所有的请
求。单例类策略造成了⼀定的限
制,并且给开发带来了额外的烦
恼。Actio
n资源必须是线程安全或者同步
的。Struts2 Action对象为每⼀个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每⼀个请求产⽣许多丟弃的对象,并且
不会导致性能和垃圾回收问
javabean是干什么的Servlet依赖Struts1.x的Action类依赖于
servlet API,当Action被调⽤
时,以HttpServletRequest和
HttpServletResponse
作为参数传给execute⽅法。Struts2的Action和容器⽆关。Servlet上下⽂被表现为简单的Maps,允许Action被独⽴的测试。Struts2
的Action可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访
问 HttpServletRequest或HttpServletResponse。
易测性测试Struts1.x的主要问题是
execute⽅法暴露了Servlet API
这使得测试要依赖于容器)。第
三⽅的扩展,如Struts
TestCase,提供了⼀套
Struts1的模拟对象(来进⾏测
试)。Struts2的Action可以通过初始化、设置属性、调⽤⽅法来测试。依赖注⼊的⽀持也是测试变得更简单。
捕获输⼊Struts1.x使⽤ActionForm对象来Struts2直接使⽤Action属性作为
捕获输⼊Struts1.x使⽤ActionForm对象来
捕获输⼊。象Action⼀样,所有
的 ActionForm必须扩展基类。
因为其
他的JavaBean不能作为
ActionFor
m使⽤,开发者经常创建多余的
类来捕获输⼊。 DynaBeans可
以被⽤来作为替代ActionForm的
类来
创建。但是,开发者可能是在重
新描述(创建)已经存在的
JavaBean(仍然
会导致有冗余的javabean)。Struts2直接使⽤Action属性作为输⼊属性,消除了对第⼆个输⼊对象的需求。输⼊属性可能是有⾃⼰
(⼦)属性的rich对象类型。Action 属
性能够通过web页⾯上的taglibs 访问。Struts2也⽀持ActionForm 模式。rich对象类型,包括业务对
象,能
够⽤作输⼊/输出对象。这种Model
Driven 特性简化了taglib对POJO 输⼊对象的引⽤。
表达式语⾔Struts1.x整合JSTL,所以它使⽤
JSTL的表达式语⾔。表达式语
⾔有基本的图形对象移动,但是
对集合
和索引属性的⽀持很弱。Struts2使⽤JSTL,但是也⽀持⼀个更强⼤和灵活的表达式语⾔--”Object Graph Notation Language” (OGNL)。
将值绑定到页⾯Struts1.x使⽤标准JSP机制来绑
定对象到页⾯上下⽂。
Struts2使⽤“ValueStack”技术,
使taglib能够访问值⽽不需要把
你的页⾯(view)和对象绑定起
来。ValueStack策略允许通过
⼀系列名
称相同但类型不同的属性重⽤页
⾯
(view)
类型转换Struts1.x的ActionForm属性经常
都是String。Struts 1.x使⽤
Commons-Beanutils来进⾏类型
转换。转换
每⼀个类,⽽不是为每⼀个实例
配置。Struts2使⽤OGNL进⾏类型转换。提供基本和常⽤对象的转换器。
验证Struts1.x⽀持在ActionForm的
validate⽅法中⼿动校验,或者
通过Commons Validator的扩展
来校验。同
⼀个类可以有不同的校验内容,
但
不能校验⼦对象。Struts2⽀持通过validate⽅法和XWork校验框架来进⾏校验。XWork校验框架使⽤为属性类类型定义
的
校验和内容校验,来⽀持 chain 校
验⼦属性
Action执⾏控制Struts1.x⽀持每⼀个模块有单独
的Request Processors(⽣命周
期),但是模块中的所有Action
必须共享相
同的⽣命周期。
Struts2⽀持通过堆栈
(Interceptor Stacks)为每⼀个
Action创建不同的⽣命周期。堆
栈能够根据需
要和不同的Action⼀起使⽤。
3. 请说说Struts2的⼯作流程。(也可以画图说明)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论