【问题标题】:Can Spring Web Flow Work in Non Spring MVC application? [closed]Spring Web Flow 可以在非 Spring MVC 应用程序中工作吗? [关闭]
【发布时间】:2014-02-26 00:36:10
【问题描述】:

我正在评估 Spring Web Flow 以处理当前使用的 Web 应用程序中的会话流。目前,我们使用的 Web 应用程序是 custom company 制造的 MVC 框架,该框架是在 10 多年前开发的,当时还没有 Spring MVC 或 Struts 等。应用程序中有一个 ControllerServlet,它是目前做的是管理请求的工作,类似于 Spring MVC 的 DispatcherServlet。

现在,我们希望利用 Spring Web Flow 功能更新应用程序并简化开发人员的生活。我想从过去将遗留 MVC 应用程序迁移到 Spring Web Flow 的所有有类似经历的人那里了解一下。

请建议我应该考虑的配置和/或更改以将其带入正确的方向。

我很自然地想到的一些问题是:

  1. web.xml 的配置更改?或者添加一个spring相关的xml文件?
  2. 我们需要对 JSP 进行任何更改吗?我假设 Spring Web Flow 将要求我对 JSP 进行更改。你们有什么感觉?
  3. 我们怎样才能摆脱 ControllerServlet?还是更好地要求 ControllerServlet 为所有请求引用 Spring Web-Flow?
  4. 如果 Spring Web Flow 正在替换 ControllerServlet,那么其中编写的所有代码会发生什么变化?我们需要写什么等价的 Spring Web Flow?

谢谢, 约根德拉

【问题讨论】:

    标签: spring spring-mvc servlets model-view-controller spring-webflow


    【解决方案1】:

    为什么要替换,您可以完美地使用 Spring Web Flow(和/或 Spring MVC)以及您自己的 MVC 框架。只有在跨越 2 之间的边界时,您才需要小心。

    我们在这种情况下所做的是引入一个DispatcherServlet 仅用于处理 Spring Web Flow 请求,其他一切都像以前一样处理。所以你基本上有 2 个 servlet 而不是 1 个。

    另一种解决方案是/可能是用DispatcherServlet 替换您自己的servlet,并让对应用程序旧部分的所有请求委托给您自己的ControllerServlet,为此您可以使用Spring MVC 的ServletWrappingController .

    最后一种方法的好处是您可以创建一个HandlerInterceptor,它可以将一些东西从您自己的 MVC 框架移动到 SWF,反之亦然。

    在每辆车中,您都需要更改使用 Spring Web Flow 的页面以使用 Spring 标签库,以便正确处理表单,对于 Spring Web Flow 未使用/服务的页面,一切都可以保留相同。

    【讨论】:

    • 感谢最初的指导。实际上我刚刚发现应用程序中有超过 15 个控制器!一个控制器用于一个模块/功能。现在,问题是,我们正在尝试摆脱旧架构并将所有内容迁移到 SWF。所以我的一个问题是了解那些 15+ 控制器中编写的代码会发生什么?当前编写的 JSP 有很多自定义标记代码,您认为我们必须修改所有这些 JSP 以支持 SWF 吗?有没有更安全的方法来进行这种迁移,比如分阶段进行?
    • 如前所述,您可以完美地将 Spring Web Flow 与您自己的基础架构一起使用。这应该为您提供迁移路径并在您移动时将功能移动到 Spring MVC/Web Flow。很难说您的自定义标签库会发生什么,这取决于您必须使用 Spring MVC 标签替换它或迁移您的标签以使用 Spring 基础架构。我会说一次移动所有东西将是一个巨大的挑战,您可能希望在每个控制器(或每个向导的向导)的基础上进行。
    • Deinum,我还有一个查询,与这篇文章中提到的完全一样:stackoverflow.com/questions/21379010/…。我有一个 Web 应用程序,其中有一个选项,例如“转到此应用程序 ID 的最后访问页面”,我们想要的是,用户应该能够在注销之前转到用户离开的页面。我尝试在 Spring 官方文档中搜索很多,但找不到任何示例实现。您能否提供一个示例以将流对话保存在 DB 中并检索回来?
    • 我到处看到的都是诸如“为此使用对话管理器”或“您需要将整个对话保存到数据库”之类的指针,而没有人指出它是如何完成的真实示例!我对 Spring Web Flow 真的很陌生,不太了解。我希望你是这本书的作者,我相信你可以通过一个简单的例子来帮助实现这一点。谢谢,
    • 有什么不明白的,实现ConversationManager。它是一个仅实现它的接口,而不是将对象存储在会话中,而是将其存储在数据库中。您可能需要对 BLOB 字段进行一些技巧(用于对象序列化)。我真的没有看到困难的部分。创建实现,使用JdbcTemplate根据会话ID将对象存储在数据库中。您可能还需要另一种创建对话 ID 的方法(现在这对于您的应用程序而不是会话应该是唯一的)。
    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2017-08-31
    • 2011-09-16
    • 1970-01-01
    • 2012-10-16
    • 2021-08-24
    相关资源
    最近更新 更多