0

我目前正在学习 Struts 1.3!

为什么我们在 struts 1.3 中扩展Action类

public class LoginAction extends Action

当我查看 web.xml 文件时,映射说

<servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

ActionServlet 类的意义是什么,为什么 ActionServlet 与 Action 映射。

谢谢

4

1 回答 1

0

简单的答案:

  1. 因为这就是 Struts 1 的工作方式。
  2. 因为您必须以某种方式将请求映射到操作。

更长的答案:

1.在 S1 中,一切都依赖于子类化框架类。(见注释)Action类实际上只提供了一小部分框架功能(主要是消息和资源),以及一小部分其他非 POJO 框架类,特别是ActionForm.

在 Struts(以及许多旧软件中)中,程序是针对实现而不是接口编写的。Action是一个类,而不是一个接口。大多数 S1 框架的实现引用Action,这意味着为了实现框架方法签名和返回值,您必须子类化Action.

2. MVC 的一个目标是将请求路由到适当的处理程序。在 S1 中,这由ActionServlet. 它查看请求,并根据 Struts 配置确定哪个操作将处理请求。它(或多或少)充当控制器。


进一步研究:功能的重要部分和扩展的主要点位于类RequestProcessor表面之下。请注意,处理请求的实例化操作需要Action返回一个。这意味着请求必须由 处理,尽管可以使用Action任何子类,例如,您自己的操作、框架操作(如or )等。ActionDispatchActionForwardAction

我要补充一点,您的问题可以通过阅读其网站和 Internet 上有关 Struts 1 的大量信息来回答。由于源是可用的,因此检查和验证针对它的假设也很重要。我可能会建议查看 Struts 1.2 源代码而不是 1.3,因为添加了一小层功能,使基础知识变得模糊。

综上所述,除非您有非常令人信服的理由这样做,否则学习 Struts 1 是浪费时间。它已经停产,多年来没有被推荐用于新项目,以相当老的风格编写,等等。现代 Java Web 框架容易使用。Struts 1 是很久以前写的,在继承失宠之前,在注释存在之前,在标记接口被到处使用之前,等等。

于 2014-05-29T11:45:56.157 回答