简单的答案:
- 因为这就是 Struts 1 的工作方式。
- 因为您必须以某种方式将请求映射到操作。
更长的答案:
1.在 S1 中,一切都依赖于子类化框架类。(见注释)基Action
类实际上只提供了一小部分框架功能(主要是消息和资源),以及一小部分其他非 POJO 框架类,特别是ActionForm
.
在 Struts(以及许多旧软件中)中,程序是针对实现而不是接口编写的。Action
是一个类,而不是一个接口。大多数 S1 框架的实现引用Action
,这意味着为了实现框架方法签名和返回值,您必须子类化Action
.
2. MVC 的一个目标是将请求路由到适当的处理程序。在 S1 中,这由ActionServlet
. 它查看请求,并根据 Struts 配置确定哪个操作将处理请求。它(或多或少)充当控制器。
进一步研究:功能的重要部分和扩展的主要点位于类的RequestProcessor
表面之下。请注意,处理请求的实例化操作需要Action
返回一个。这意味着请求必须由 处理,尽管可以使用Action
任何子类,例如,您自己的操作、框架操作(如or )等。Action
DispatchAction
ForwardAction
我要补充一点,您的问题可以通过阅读其网站和 Internet 上有关 Struts 1 的大量信息来回答。由于源是可用的,因此检查和验证针对它的假设也很重要。我可能会建议查看 Struts 1.2 源代码而不是 1.3,因为添加了一小层功能,使基础知识变得模糊。
综上所述,除非您有非常令人信服的理由这样做,否则学习 Struts 1 是浪费时间。它已经停产,多年来没有被推荐用于新项目,以相当老的风格编写,等等。现代 Java Web 框架更容易使用。Struts 1 是很久以前写的,在继承失宠之前,在注释存在之前,在标记接口被到处使用之前,等等。