【问题标题】:Action class execution flow in Struts 2Struts 2 中的动作类执行流程
【发布时间】:2017-09-21 09:15:01
【问题描述】:

我的印象是,Struts 中的execute() 方法是从struts.xml 调用动作类时调用的第一个方法。但是当我调试在动作类中有构造函数的代码时,我看到构造函数首先被执行(我没有在这里创建任何实例)。

  1. 能否解释一下动作类中的执行流程,即在实际执行之前调用了哪些方法。

  2. 我不确定为什么要调用构造函数。

【问题讨论】:

  • 你知道什么是构造函数吗?
  • 构造函数被调用是因为构造函数是在类被构造的时候被调用的。动作是类,是根据请求创建的,所以。我想这就是原因。

标签: java configuration struts2


【解决方案1】:

Struts 在执行动作之前调用了很多东西。但它可以在struts.xml 中配置。您可以从this answer 看到 action 执行的请求流程。

Struts 内部使用ObjectFactory 来构建所有对象 由配置定义。查看更多关于 ObjectFactory 文档的信息 或The Struts 2 Request Flow


构造函数应该有default constructorno-argument constructor,否则它不会被构造。有关差异的详细说明,您可以查看Java default constructor

你不必为你的类提供任何构造函数,但是你 执行此操作时必须小心。编译器自动提供一个 无参数,任何没有构造函数的类的默认构造函数。 此默认构造函数将调用 超类。在这种情况下,编译器会抱怨,如果 超类没有无参数构造函数,因此您必须验证 它确实如此。如果你的类没有明确的超类,那么它有一个 Object 的隐式超类,它确实没有参数 构造函数。


这些方法主要由拦截器在执行操作之前调用。默认拦截器堆栈是defaultStack。它涉及很多在动作之前执行的功能。请参阅this 回答以了解默认配置。

拦截器在动作执行之前被调用。这就像一个 为请求提供服务的管道。他们每个人都在之后调用了一个 其他。当最后一个拦截器处理完毕时,动作被执行。 在操作配置中配置的要调用的拦截器或 通过注释。拦截器的详细解释见docs


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多