我一直在使用 struts 2,但出于几个原因,我正在(返回)到 Struts 1。我想知道它们之间的主要差异,例如程序可用性和一般流程。
问问题
31566 次
4 回答
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
于 2012-11-21T09:50:33.813 回答
5
在 http://www.java-samples.com中,您可以找到快速而完整的答案。换句话说,如果可以的话,忘记 Struts 并只使用 Struts2...
这是上面提到的 Programming Tutorials 站点的比较表:
End-Of-Life Struts 1 版本于 2008 年 12 月推出,版本为 1.3.10。您仍然可以获得它并且仍然可以工作,但是没有支持或进一步的开发。你自己在那里。
于 2011-11-04T09:43:47.773 回答
3
Struts(Apache 软件基金会)的创建者对 Struts 1 和 2 的比较
这是上述链接中可用的内容,以防他们将来决定更改链接或删除页面。
动作类
- Struts 1
需要 Action 类来扩展抽象基类。Struts 1 中的一个常见问题是编程到抽象类而不是接口。 - Struts 2
Action 可以实现一个 Action 接口,以及其他接口以启用可选和自定义服务。Struts 2 提供了一个基本的 ActionSupport 类来实现常用的接口。尽管不需要 Action接口。任何带有执行签名的 POJO 对象都可以用作 Struts 2 Action 对象。
- Struts 1
线程模型
- Struts 1
Action 是单例的,并且必须是线程安全的,因为只有一个类的实例来处理对该 Action 的所有请求。单例策略限制了 Struts 1 Actions 可以做什么,并且需要格外小心地开发。动作资源必须是线程安全的或同步的。 - Struts 2
Action 对象为每个请求实例化,因此不存在线程安全问题。(在实践中,servlet 容器在每个请求中生成许多丢弃的对象,多一个对象不会造成性能损失或影响垃圾收集。)
- Struts 1
Servlet 依赖
- Struts 1
Actions 依赖于 servlet API,因为在调用 Action 时 HttpServletRequest 和 HttpServletResponse 被传递给 execute 方法。 - Struts 2
Actions 不与容器耦合。大多数情况下,servlet 上下文表示为简单的 Map,允许单独测试 Action。如果需要,Struts 2 Actions 仍然可以访问原始请求和响应。但是,其他架构元素减少或消除了直接访问 HttpServetRequest 或 HttpServletResponse 的需要。
- Struts 1
可测试性
- Struts 1
测试 Struts 1 Actions 的一个主要障碍是 execute 方法暴露了 Servlet API。第三方扩展 Struts TestCase 为 Struts 1 提供了一组模拟对象。 - Struts 2
支持通过 Interceptor Stacks 在每个 Action 的基础上创建不同的生命周期。可以根据需要创建自定义堆栈并将其与不同的操作一起使用。
可以通过实例化Action、设置属性和调用方法来测试Struts 2 Actions。依赖注入支持也使测试更简单。
- Struts 1
收获输入
- Struts 1
使用一个 ActionForm 对象来捕获输入。与 Actions 一样,所有 ActionForms 都必须扩展一个基类。由于其他 JavaBeans 不能用作 ActionForms,因此开发人员经常创建冗余类来捕获输入。DynaBeans 可以用作创建传统 ActionForm 类的替代方法,但在这里,开发人员也可能会重新描述现有的 JavaBeans。 - Struts 2
使用 Action 属性作为输入属性,无需第二个输入对象。输入属性可能是丰富的对象类型,可能有自己的属性。可以通过标签库从网页访问 Action 属性。Struts 2 还支持 ActionForm 模式,以及 POJO 表单对象和 POJO Actions。丰富的对象类型,包括业务或领域对象,可以用作输入/输出对象。ModelDriven 功能简化了对 POJO 输入对象的 taglb 引用。
- Struts 1
- 表达语言
- Struts 1
与 JSTL 集成,因此它使用 JSTL EL。EL 具有基本的对象图遍历,但对集合和索引属性的支持相对较弱。 - Struts 2
可以使用 JSTL,但该框架还支持一种更强大、更灵活的表达语言,称为“对象图符号语言”(OGNL)。
- Struts 1
- 将值绑定到视图中
- Struts 1
使用标准的 JSP 机制将对象绑定到页面上下文中以供访问。 - Struts 2
使用“ValueStack”技术,以便标签库可以访问值,而无需将您的视图耦合到它正在呈现的对象类型。ValueStack 策略允许在一系列类型中重用视图,这些类型可能具有相同的属性名称但不同的属性类型。
- Struts 1
- 类型转换
- Struts 1
ActionForm 属性通常都是字符串。Struts 1 使用 Commons-Beanutils 进行类型转换。转换器是每个类的,而不是每个实例可配置的。 - Struts 2
使用 OGNL 进行类型转换。该框架包括用于基本和常见对象类型和原语的转换器。
- Struts 1
- 验证
- Struts 1
通过 ActionForm 上的 validate 方法或通过 Commons Validator 的扩展支持手动验证。类可以对同一个类有不同的验证上下文,但不能链接到子对象上的验证。 - Struts 2
支持通过 validate 方法和 XWork Validation 框架进行手动验证。Xwork 验证框架支持使用为属性类类型和验证上下文定义的验证将验证链接到子属性。
- Struts 1
- 动作执行的控制
- Struts 1
为每个模块支持单独的请求处理器(生命周期),但模块中的所有操作必须共享相同的生命周期。 - Struts 2
支持通过 Interceptor Stacks 在每个 Action 的基础上创建不同的生命周期。可以根据需要创建自定义堆栈并将其与不同的操作一起使用。
- Struts 1
于 2016-10-29T13:57:33.787 回答
1
是什么原因迫使你回到不再积极开发的struts1?
可能有人可以在这里帮助您解决有关差异的原因,请通过以下线程 Struts2 Vs Struts1
我还建议您搜索 SO 以获取更多详细信息。我所知道的 Struts2 设计和工作流程与 struts1 完全不同,它的开发也考虑了 struts1 的局限性。
于 2011-11-04T09:42:56.347 回答