【问题标题】:Flow of control in Struts 1.2 (Lifecycle)Struts 1.2 中的控制流(生命周期)
【发布时间】:2013-10-22 08:38:24
【问题描述】:

标题可能听起来有点模糊,但我会试一试。我有 2 个 servlet:

  1. one.java: 扩展Action class,根据index.jsp 处的输入将页面转发为成功或失败
  2. two.java: 扩展了ActionForm class,具有getter 和setter 方法

我有 3 个 jsp 文件:

  1. index.jsp:是欢迎页面并要求用户名组合
  2. success.jsp:如果组合正确则调用
  3. failure.jsp:如果组合为假则调用

我有 2 个 xml 文件:

  1. web.xml: DD
  2. struts-config.xml: Struts 配置文件

我了解 web.xml 的工作原理。我唯一的疑问是,one.java /two.java 中的哪一个是首先从 struts.xml 调用的?

我尝试调试,发现首先调用ActionForm类即two.java,然后将值返回给Actionone.java

但是Action类不是应该先执行,然后是动作形式吗?我的意思是这就是 MVC 架构所遵循的。

请解释一下。指向非常详细的工作流程的链接将非常有帮助。

【问题讨论】:

    标签: java struts struts-1 struts-config


    【解决方案1】:

    ActionForm 类在 Action 之前被调用并不奇怪 - Struts 表单应该在调用 Struts 动作方法之前填充用户数据,其中任何一个都有 4 个参数:

    ActionMapping actionMapping,
    ActionForm actionForm,
    HttpServletRequest request,
    HttpServletResponse response
    

    第二个 - ActionForm - 应该准备好进行最远的数据处理。我刚刚找到 great sequence diagram 来说明所有 Struts 生命周期阶段:

    简而言之:

    1. 在得到客户端的请求后,Struts 前端控制器调用RequestProcessor 以使用 struts-config.xml 找出适当的操作和表单
    2. RequestProcessor 获取 Struts 表单对象(如果不存在则创建它),填充来自请求的数据,启动验证(如果存在)并调用适当的 Struts 操作。
    3. Struts 动作执行所有进一步的必要操作。

    【讨论】:

    • @PunjanSudhar,我不太了解在后端使用 ExtJS
    • 我的错,我想补充一点。如果我们使用 EXTJS 作为 FrontEnd(我错误地提到了后端),则不会调用 Actionform。我认为这是因为 extjs 中已经有数据验证机制。所以不需要检查表格梁。这个概念正确吗?
    • 你如何在前端使用 ExtJS?实际上我不相信 Struts 对 Ext 验证一无所知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多