谢谢了快

解决方案 »

  1.   

    http://download.csdn.net/source/2267846
      

  2.   


       Action 类:
    Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
    Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
    线程模式:
    Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
    Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
    Servlet 依赖:
    Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
    Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
    可测性:
    测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
    Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
    捕获输入:
    Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
    Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。
    表达式语言:
    Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
    Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).
    绑定值到页面(view):
    Struts 1使用标准JSP机制把对象绑定到页面中来访问。
    Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
    类型转换:
    Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
    Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
    校验:
    Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
    Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
    Action执行的控制:
    Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
    Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
    Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点:
    Struts2得到request和response对象的方式:HttpServletRequest request=ServletActionContext.getRequest ();HttpServletResponse response = ServletActionContext.getResponse (); 
      

  3.   

    我的读书笔记,希望能帮助你Struts2
    Struts2的前身是OpenSymphony公司的叫做WebWork的命令模式框架(Command Pattern)。由Apach Project作为Struts2推出。
    Struts2在做成的Action里不必知道API固有的HttpServletRequest,并且导入了DI(Dependency Injection)的概念。在Struts2里可以很简洁的记述程序,并且可以通过Interceptor(拦截器)来对Action群加上前处理和后处理。Struts2是一个扩展性非常优越的Web应用程序框架。
    为了了解Struts2,要先了解一下以下的概念。
    POJO Action
    Interceptor(拦截器)
    OGNL ValueStack
    DI(Dependency Injection)Struts2与Struts1的不同点
    Struts1中必须了解Servlet,并强烈的依存于Servlet。Struts2中,不必了解HttpServletRequest和HttpServletResponse等类
    Struts1中Action需要继承特定的类来实装。Struts2中可以利用POJO。Struts1中的Action要依存于Struts容器,Struts2中可以让Action不依存于容器。
    Struts1中Action是单例(Singleton),对于处理多个请求的线程来说要考虑线程安全来编程。Struts2中每个请求都会产生一个Ation实例,因此对于Action类来说不必考虑线程安全。
    由于每个请求产生的Action实体对象各不相同,可以在Action对象中保存请求的固有信息。实际上在Struts2中通过值栈(ValueStack)来活用这一优点。
    Struts1中执行时调用的方法被固定为execute,因此一个类中只能处理一个Action。Struts2中,调用方法的名字可以任意取,对于不同请求可以调用不同名字的方法,因此对于同一个处理单元的Action可以写入同一个类中。
    Struts1被调用的execute中不管使用与否都要在参数里设定请求情报。Struts2中请求执行中调用的方法没有参数。由此,不必要的参数不需要被宣言,Action的可读性大大提高。Struts2中通过DI(Dependency Injection)将请求注入到Action里。通过这种机制可以只把需要的数据注入到Action中,程序非常整洁调试也非常容易。
    Struts1在Action里保存传入参数的表单(Form)需要继承特定的类。并且输入检验,动态数据处理的表单要继承不同的类。在Struts2中保存数据的表单类烨可以是POJO,不作成Web应用程序接收传递数据的结构,可以只使用单纯的Java模型来保存数据。
    Struts1的View中使用Java标准标签库(JSTL),用JSTL-EL来执行bean属性的参照。在Struts2中也可以使用EL,但是Struts2主要使用OGNL。具备与OGNL组合来调用或代入带参数的方法的强大功能。
    Struts1在视图上表示数据是通过将bean作为属性保存在Request的Context,用JSTL将这些保存的数据表示出来。Struts2中Action等携带的属性通过ValueStatck用OGNL来取得并表示。
    Struts1一般将表单数据全部作为String型来处理。Struts2中有TypeConversion机制,可以受取本来的数据型的输入值。
    Struts2的动作概念
    从浏览器接收到请求后
    1.通过FilterDispatcher来执行向Action的映射,来决定哪个Action被执行。
    2.通过ActionProxy生成Action实体储存到ValueStatck中
    3.被action指定的拦截器按定义的顺序执行,进行向Action里注入依存关系。
    4.必要的时候将拦截器的状态信息保存到ValueStatck中。如果全部的拦截器执行完了的话
    5.调用Action指定的方法
    Action将Action的执行结果最为字符串返回
    寻找与Action的执行结果lobal-exception-mapping指定的结果一致的结果,向最初一致的结果转移处理
    6.结果(Dispatch的时候),根据被指定文件的扩展名利用JSP,FreeMarker,Velocity中任何一个相应的引擎来处理指定的文件。
    JSP的引擎,把指定的文件作为jsp执行
    在JSP文件中表示Struts2的标签(Custom Tag)结果。这种情况是在Struts2标签的属性里利用OGNL式来调用ValueStack的属性或者方法参照Action的属性来输出结果。
    7.返回到拦截器的控制,让拦截器里的处理按顺序一一完成。
    8.请求终了
      

  4.   

    struts2最大的区别就是拦截器了,面向切面编程
      

  5.   

    太恶心了,格式都乱了。
    重贴一次
    Struts2
    Struts2 的前身是OpenSymphony 公司的叫做WebWork 的命令模式框架(Command Pattern)。由
    Apach Project 作为Struts2 推出。
    Struts2 在做成的Action 里不必知道API 固有的HttpServletRequest,并且导入了DI(Dependency
    Injection)的概念。在Struts2里可以很简洁的记述程序,并且可以通过Interceptor(拦截器)来对
    Action群加上前处理和后处理。Struts2是一个扩展性非常优越的Web应用程序框架。
    为了了解Struts2,要先了解一下以下的概念。
    • POJO Action
    • Interceptor(拦截器)
    • OGNL ValueStack
    • DI(Dependency Injection)Struts2 与Struts1 的不同点
    • Struts1中必须了解Servlet,并强烈的依存于Servlet。Struts2中,不必了解
    HttpServletRequest 和HttpServletResponse 等类
    • Struts1中Action需要继承特定的类来实装。Struts2中可以利用POJO。Struts1中的Action要
    依存于Struts 容器,Struts2 中可以让Action 不依存于容器。
    • Struts1中Action是单例(Singleton),对于处理多个请求的线程来说要考虑线程安全来编程。
    Struts2中每个请求都会产生一个Ation实例,因此对于Action类来说不必考虑线程安全。
    由于每个请求产生的Action实体对象各不相同,可以在Action对象中保存请求的固有信息。实
    际上在Struts2中通过值栈(ValueStack)来活用这一优点。
    • Struts1中执行时调用的方法被固定为execute,因此一个类中只能处理一个Action。Struts2中,
    调用方法的名字可以任意取,对于不同请求可以调用不同名字的方法,因此对于同一个处理单元
    的Action 可以写入同一个类中。
    • Struts1被调用的execute中不管使用与否都要在参数里设定请求情报。Struts2中请求执行中调
    用的方法没有参数。由此,不必要的参数不需要被宣言,Action的可读性大大提高。Struts2中
    通过DI(Dependency Injection)将请求注入到Action里。通过这种机制可以只把需要的数据
    注入到Action中,程序非常整洁调试也非常容易。
    • Struts1在Action里保存传入参数的表单(Form)需要继承特定的类。并且输入检验,动态数据
    处理的表单要继承不同的类。在Struts2中保存数据的表单类烨可以是POJO,不作成Web应用
    程序接收传递数据的结构,可以只使用单纯的Java模型来保存数据。
    • Struts1的View中使用Java标准标签库(JSTL),用JSTL-EL来执行bean属性的参照。在
    Struts2中也可以使用EL,但是Struts2主要使用OGNL。具备与OGNL组合来调用或代入带
    参数的方法的强大功能。
    • Struts1在视图上表示数据是通过将bean作为属性保存在Request的Context,用JSTL将这些
    保存的数据表示出来。Struts2中Action等携带的属性通过ValueStatck用OGNL来取得并表
    示。
    • Struts1一般将表单数据全部作为String型来处理。Struts2中有TypeConversion机制,可以受
    取本来的数据型的输入值。Struts2的动作概念
    从浏览器接收到请求后
    1. 通过FilterDispatcher来执行向Action的映射,来决定哪个Action被执行。
    2. 通过ActionProxy 生成Action实体储存到ValueStatck中
    3. 被action指定的拦截器按定义的顺序执行,进行向Action里注入依存关系。
    4. 必要的时候将拦截器的状态信息保存到ValueStatck中。如果全部的拦截器执行完了的话
    5. 调用Action指定的方法
    Action将Action的执行结果最为字符串返回
    寻找与Action的执行结果lobal-exception-mapping指定的结果一致的结果,向最初一致的结果
    转移处理
    6. 结果(Dispatch的时候),根据被指定文件的扩展名利用JSP,FreeMarker,Velocity中任何一个
    相应的引擎来处理指定的文件。
    JSP的引擎,把指定的文件作为jsp执行
    在JSP文件中表示Struts2的标签(Custom Tag)结果。这种情况是在Struts2标签的属性里利
    用OGNL式来调用ValueStack的属性或者方法参照Action的属性来输出结果。
    7. 返回到拦截器的控制,让拦截器里的处理按顺序一一完成。
    8. 请求终了
      

  6.   

    hibernate中session.get()和session.load()的区别
    谈谈spring的声明式事务管理
    谈谈spring中 getSession与getHibernateTemplate的异同
      

  7.   

    主要是struts1是单例模式而struts2不是