0

我体验过struts1.x,在这个默认情况下,所有动作类都是单例行为。
我们可以通过扩展 DispatchAction 类在单个动作类中编写多个方法,这样对方法的任意数量的请求将只创建一个对象并共享所有实例成员。

但是在Struts2中,有一个特点就是可以写多个方法。
在 struts2 中,对于每个请求都会创建新实例。那么在一个 Action 类中编写多个方法有什么用呢?
每个方法可能有多个实例成员,然后如果你将它们组合并创建一个对象,每次创建对象时都会占用大量内存。
你能告诉我在单个动作类中编写多个方法有什么用Struts2.x ???

4

2 回答 2

2

Struts1 和 Struts2 的设计方式和动作类的编写方式完全不同。

Actions 基本上代表一组相关操作的用户操作。这是一个以良好方式模块化应用程序的功能。虽然您可以在操作类中自由定义单个方法,但我相信它会破坏 Action 类的目的一个好方法。

例如,假设我们想要开发一个用户管理功能,其中包括

  1. 用户注册。
  2. 用户更新
  3. 其他一些用户功能。

如果我们仔细观察,我们将创建一个 User bean 来保存与用户相关的属性,现在我们需要考虑 ActionClasses 的设计。我将创建一个UserManagementAction类似的方法

  1. 创建用户
  2. 更新用户
  3. 任何其他此类方法

我认为这种方法将集中用户管理系统,因为所有这些方法都与用户管理功能相关,而且您的操作类的所有组件都可以像用户 bean、用户服务等一样使用,因为它们特定于用户并将被使用在所有方法调用中。

另一方面,在第二种方法中,我们只剩下一个选择,例如为每个功能创建操作,例如

  1. UserRegistrationAction
  2. 更新用户操作

并且在所有这些操作中,我们复制了 biz DTO 的服务类和任何其他实用程序方法的大部分内容,除了痛苦地拥有如此多的操作和一些不必要的配置。

简而言之,它决定了您想要设计和开发应用程序的方式和方式。

于 2012-08-13T05:09:40.263 回答
1

struts2 甚至在 struts1 动作类中允许多个方法的原因与对象创建(动作类)无关。原因是帮助开发人员将执行类似操作的操作分组到一个类中。例如,如果你有一个实体说product,你可能想要createmodify或者remove一个产品。create, modify and remove出于代码组织的目的,如果您有这些操作,即在单个操作类中,它将是干净的。因此,对于每个请求,都会创建您的操作类的实例,并在服务请求后将其销毁。

于 2012-08-13T04:40:12.977 回答