Struts1.2与Struts2.0
来源:互联网 发布:中央电视10套网络直 编辑:程序博客网 时间:2024/05/25 01:36
1.谈谈你对MVC的理解
MVC是一种设计模式,它强制的将应用程序的输入、处理、和输出分开。
使用了MVC的应用程序被分为3个核心部件:试图(View)、模型(Model)、控制器(Controller)。它们各司其职,既分工明确又相互合作
2.项目为什么使用SSH
使用Struts:因为Struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注与业务逻辑的实现。并且Struts有着丰富的taglib,如果能够灵活运用,则能大大的提高开发效率。
使用Hibernate:因为Hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。Hibernate是一个轻量级的持久性框架、功能丰富。
使用Spring: 因为Spring基于IOC(inversion of control)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块。采用IOC使得可以很容易的实现bean的装配,提供了简洁的AOP,并据此实现了事务管理(Transcation Management),等等。
相关链接:http://zhongshiyu.blog.163.com/blog/static/213653231201321410197971/
3.Struts1.2和Struts2.0的工作原理
struts 1.2 工作原理:
1.ActionServlet核心控制器会拦截所有*.do的请求
2.从struts-config.xml中找到用户请求的Action
3.通过struts-config.xml中的配置再去找这个Action对应的ActionForm,并实例化
4.把用户填写的数据自动填充到ActionForm中(调用ActionForm中的setXX()方法填充)
5.同时把ActionForm放入到指定的范围中(request,session)
6.然后把请求转发给Action
7.Action获取ActionForm中的值然后调用业务逻辑层实现功能
8.在通过ActionMapping查找Actionforward实现转发; 流程如下:
struts 2.0的工作原理:
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMeshPlugin);
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。
相关链接:http://www.24xuexi.com/w/2011-07-06/94529.html
4.Struts1.2和Struts2.0区别
简要例举下他们之间的区别和改进。
/**Action类
Struts1要求Action类继承一个抽象类,Struts1使用抽象类编程而不是接口
Struts2可以实现Action接口也可以不实现,Struts2提供一个ActionSuport基类去实现常用接口。Action接口不是必须的,任何有execute的标识的
POJO都有可能成为struts2的Action的对象
/**线程模式
Struts1的Action是单例模式并且是线程安全的,仅有Action一个实例来处理所有请求。单策略模式限制了Struts1Action能做的事。比且在开发时要
注意Action资源必须是线程安全比且是同步的。
Struts2的Action对象为每个请求产生一个实例,因此没有线程安全问题。
/**Servlet依赖
Struts1Action依赖与ServletAPI,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。
Struts2Action不依赖与容器,允许Action脱离容器被单独测试。如果需要,struts2依然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。
/**可测性:
测试Struts1Action的一个主要问题是execute方法暴漏了Servlet API(这使得测试要依赖于容器)。一个第三方扩展--StrutsTestCase--提供了一套Struts1的模拟对象(来进行测试)
struts2Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
/**捕获输入:
struts1使用ActionForm对象捕获输入。所有ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的基类不或输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有沉余的JavaBean)。
Struts2直接使用Acrtion属性作为输入属性,消除了对第二个输入对象的请求。输入属性可能是有自己(子)属性的Rich对象类型。Action属性能过通过web页面上的Taglibs访问。struts2也支持ActionForm模式。Richard对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven特性简化了Taglib对POJO输入对象的引用。
/**表达式语言
Struts1整合了JSTL,因此使用JSTLEL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很脆弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--“objectgraph Notation Language”(OGNL)
/**绑定值到页面(view)
Struts1使用标准JSP机制吧对象绑定到页面中来访问。
struts2使用ValueStack技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重同页面(view)
/**类型转换
Struts1ActionForm属性通常都是String类型。struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的
struts2使用OGNL进行类型转换,提供基本和常用对象的转换器。
/**效验
Struts1支持在ActionForm的validate方法中手动效验,或者通过CommonsValidator的扩展来效验。同一个类可以有不同的效验内容,但不能效验子对象。
Struts2支持通过validate方法和XWork效验框架进行效验。XWork效验框架使用为属性类类型定义的效验和内容效验,来支持Chain效验子属性。
/**Action执行的控制
Struts1支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不能的生命周期。堆栈能够根据需要和不同的Action一起使用。
相关链接:http://wenda.so.com/q/1366081437060432
5.Action是单实例还是多实例
struts2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了;
struts1的Action是单实例的,因为它的数据保存在Form类中,多线程环境下,Action只负责处理一些逻辑,并没有数据,也就是大家把它当做一个工具使用。同样servlet也是单实例的。
相关链接:http://blog.csdn.net/jobjava/article/details/8645854
6.谈谈你对Struts2.0的理解
Struts2的控制器由两部分组成:核心控制器FilterDispatcher和业务控制器Action
相关链接:http://blog.sina.com.cn/s/blog_4cf58c9c010190h7.html
7.Struts2国际化实现过程
相关链接:http://blog.sina.com.cn/s/blog_6608320c0100j3v8.html
8.Struts2页面开发中常用标签使用说明
相关链接:http://zhidao.baidu.com/question/443211184.html
9.struts组件介绍
基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件
相关链接:http://greenyouyou.blog.163.com/blog/static/1383881472011365630540/
10.SpringMVC和Struts2的区别
1. 机制:springmvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
2.性能:spring会稍微比struts快。springmvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用settergetter方法把request中的数据注入;struts2实际上是通过settergetter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
3.参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4.设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
5.intercepter的实现机制:struts有以自己的interceptor机制,springmvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,springmvc使用更加简洁,开发效率Spring MVC确实比struts2高。springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restfulurl要费劲,因为struts2action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3mvc的方法之间基本上独立的,独享requestresponse数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
6. 另外,spring3mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
相关链接:http://blog.csdn.net/ya2dan/article/details/7395458
- Struts1.2与Struts2.0
- struts1.0与struts2.0的区别
- struts2.0与struts1.0的区别
- struts1.2与struts2的区别
- struts2与struts1.2的对比
- Struts1.2与Struts2的区别
- Struts2 与 Struts1区别
- struts1 与 struts2 比较
- Struts2与Struts1.X
- struts1与struts2比较
- struts2与struts1
- struts1与struts2区别
- struts1与struts2流程图
- struts1与struts2区别
- Struts1与Struts2原理
- struts1与struts2比较
- Struts1与Struts2区别
- struts1与struts2
- 关于在CSDN Blog公告栏加入Google搜索功能的问题
- 网页完美居中方案
- Thinking in BigDate(13)大数据之DM经典模型(4)
- Jsp&Servlert
- Find a number in the array having least difference with the given number (n)
- Struts1.2与Struts2.0
- 一道VB输出结果的小题目
- Struts2中的ModelDriven机制及其运用
- Jdbc&Hibernate&MyBatis&IBatis
- 2014/03/07对类和对象的初步理解
- 将一个int类型变量(4字节), 以二进制形式进行输出--showbits.c
- 查看CPU使用率
- Spring3.0&SpringMVC
- Jquery&EasyUi