大家好,欢迎来到IT知识分享网。
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的区别?
特性 |
Struts1 |
Struts2 |
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容器给每一个请求产生许多丟弃的对象,并且 不会导致性能和 垃圾回收问 |
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对象来捕获输入。象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的工作流程。(也可以画图说明)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29418.html