Struts 1和Struts 2之间的区别?

时间:2011-11-04 09:26:44

标签: struts2 struts-1 struts-validation

我一直在使用struts 2,但由于一些原因,我正在转移(返回)Struts 1。我想知道它们之间的主要差异,如编程可用性和一般流程。

4 个答案:

答案 0 :(得分:12)

让我们看一下struts 1.x和struts 2.x

之间的组件和功能差异
 In struts 1.x front controller is ActionServlet
    In 2.x front controller is FilterDispatcher

In struts 1.x we have RequestProcessor class
    In 2.x we have Interceptors instead RequestProcessor will see about this concept later just remember as of now

In struts 1.x we have multiple tag libraries like, html, logic, bean..etc
    In 2.x we do not have multiple libraries, instead we have single library which includes all tags

In struts 1.x the configuration fine name can be [any name].xml and we used to place in web-inf folder
    In 2.x the configuration file must be struts.xml only and this must be in classes folder

In struts 1.x we have form beans and Action classes separately
    In 2.x form bean, Action classes are combinedly given as Action class only, of course we can take separately if we want ;)

In struts 1.x properties file must be configured in struts-config.xml
    But in 2.x we need to configure our resource bundle(s) in struts.properties file

In struts 1.x we have programmatic and declarative validations only
    In 2.x we have annotations support too along with programmatic and declarative validations

功能差异

In struts 1.x declarative validations are done by using validation frame work
    In 2.x, declarative validations are done by using xwork2 frame work by webwork the reason being, its support valuations through Annotations

In struts 1.x an Action class is a single ton class, so Action class object is not a thread safe, as a programmer we need to make it as thread safe by applying synchronization
    In 2.x an Action class object will be created for each request, so it is by default thread safe, so we no need to take care about safety issues here

In struts 1.x we have only jsp as a view technology
    In 2.x we have support of multiple view technologies like velocity, Freemarker, jasper reports, jsp bla bla

In struts 1.x Action class is having servlet dependency, because in execute() method accepts req, res parameter right ! so.
    In 2.x Action class doesn’t have any servlet dependency, because its execute() method doesn’t accepts any parameters, however we can access all servlet objects with dependency injection

答案 1 :(得分:4)

In http://www.java-samples.com您可以找到快速完整的答案。换句话说,如果可以,请忘记Struts并仅使用Struts2 ...

这是上面提到的编程教程网站的比较表:enter image description here

生命终结Struts 1版本于2008年12月推出,版本为1.3.10。您仍然可以获得它并且仍然可以工作,但是没有支持或进一步开发。你在那里自己。

答案 2 :(得分:3)

Struts的创建者(Apache软件基础)对Struts 1和2的比较

Comparing Struts 1 and Struts 2

以下是上述链接中提供的内容,如果他们决定在未来更改链接或删除该页面,则可以使用。

  1. 行动类

    • Struts 1
      需要Action类来扩展抽象基类。 Struts 1中的一个常见问题是编写抽象类而不是接口。
    • Struts 2
      Action可以实现Action接口以及其他接口以启用可选服务和自定义服务。 Struts 2提供了一个基本的ActionSupport类来实现常用的接口。虽然,Action界面是必需的。具有执行签名的任何POJO对象都可以用作Struts 2 Action对象。
  2. 线程模型

    • Struts 1
      操作是单例,必须是线程安全的,因为只有一个类的实例来处理该Action的所有请求。单例策略限制了Struts 1 Actions可以完成的任务,并且需要额外注意开发。操作资源必须是线程安全的或同步的。
    • Struts 2
      为每个请求实例化操作对象,因此没有线程安全问题。 (实际上,servlet容器会为每个请求生成许多丢弃对象,而另外一个对象不会对性能造成影响或影响垃圾回收。)
  3. Servlet依赖

    • Struts 1
      由于在调用Action时将HttpServletRequest和HttpServletResponse传递给execute方法,因此操作依赖于servlet API。
    • Struts 2
      操作未绑定到容器。通常,servlet上下文表示为简单映射,允许单独测试Actions。如果需要,Struts 2 Actions仍然可以访问原始请求和响应。但是,其他架构元素减少或消除了直接访问HttpServetRequest或HttpServletResponse的需要。
  4. <强>可测

    • Struts 1
      测试Struts 1 Actions的一个主要障碍是execute方法公开了Servlet API。第三方扩展Struts TestCase为Struts 1提供了一组模拟对象。
    • Struts 2
      支持通过拦截器堆栈在每个操作的基础上创建不同的生命周期。可以根据需要创建自定义堆栈并与不同的Actions一起使用。
      可以通过实例化Action,设置属性和调用方法来测试Struts 2 Actions。依赖注入支持也使测试更简单。
  5. 收集输入

    • Struts 1
      使用ActionForm对象捕获输入。与Actions类似,所有ActionForms都必须扩展基类。由于其他JavaBeans不能用作ActionForms,开发人员通常会创建冗余类来捕获输入。 DynaBeans可以用作创建传统ActionForm类的替代方法,但是,开发人员也可以重新描述现有的JavaBeans。
    • Struts 2
      使用Action属性作为输入属性,无需第二个输入对象。输入属性可能是丰富的对象类型,可能有自己的属性。可以通过taglib从网页访问Action属性。 Struts 2还支持ActionForm模式,以及POJO表单对象和POJO操作。丰富的对象类型(包括业务或域对象)可用作输入/输出对象。 ModelDriven功能简化了对POJO输入对象的taglb引用。
  6. 表达语言
    • Struts 1
      与JSTL集成,因此它使用JSTL EL。 EL具有基本的对象图遍历,但收集和索引属性支持相对较弱。
    • Struts 2
      可以使用JSTL,但框架还支持更强大,更灵活的表达式语言,称为&#34;对象图表符号语言&#34; (OGNL)。
  7. 将值绑定到视图中
    • Struts 1
      使用标准JSP机制将对象绑定到页面上下文中以进行访问。
    • Struts 2
      使用&#34; ValueStack&#34;技术使taglib可以访问值而无需将视图耦合到它呈现的对象类型。 ValueStack策略允许在一系列类型中重用视图,这些类型可能具有相同的属性名称但属性类型不同。
  8. 类型转换
    • Struts 1
      ActionForm属性通常都是Strings。 Struts 1使用Commons-Beanutils进行类型转换。转换器是每个类,而不是每个实例可配置。
    • Struts 2
      使用OGNL进行类型转换。该框架包括基本和常见对象类型和基元的转换器。
  9. 验证
    • Struts 1
      支持通过ActionForm上的验证方法进行手动验证,或通过Commons Validator的扩展。类可以为同一个类具有不同的验证上下文,但不能链接到子对象的验证。
    • Struts 2
      支持通过validate方法和XWork Validation框架进行手动验证。 Xwork验证框架支持使用为属性类类型和验证上下文定义的验证将验证链接到子属性。
  10. 控制行动执行
    • Struts 1
      支持每个模块的单独请求处理器(生命周期),但模块中的所有操作必须共享相同的生命周期。
    • Struts 2
      支持通过拦截器堆栈在每个操作的基础上创建不同的生命周期。可以根据需要创建自定义堆栈并将其与不同的操作一起使用。

答案 3 :(得分:1)

迫使你回到struts1的原因是什么?这不再是积极的开发?

可能有些人可以帮助您解决有关差异的原因,请通过以下主题  Struts2 Vs Struts1

我还建议您搜索SO以获取更多详细信息。我所知道的Struts2设计和工作流程与struts1完全不同,它的开发考虑了struts1的局限性。