【问题标题】:Migration to Spring project from JSP/Servlet/Portlets(Jetspeed) - application design从 JSP/Servlet/Portlets(Jetspeed) 迁移到 Spring 项目 - 应用程序设计
【发布时间】:2013-08-16 16:35:45
【问题描述】:

我正在将现有的基于 jsp/servlet/portlet(jetspeed) 的应用程序迁移到 spring。我和我的同事是唯一设计、编码、部署和维护应用程序的开发人员(我列出职责的原因不是为了炫耀,而是为了解释我的责任和我的行为的影响)。想要在意识到为时已晚之前对我的初始应用程序设计和架构保持警惕。现有的 Web 应用程序已在全球范围内使用。我在设计新应用程序时遇到了一些问题。

1) 将应用程序压缩到的 webapps 数量:目前,我有 5 个 webapps。如果需要,所有这些都可以合并到一个 web 应用程序中,这有助于避免在迁移到 spring 时在它们之间共享数据的额外编码。但是,不想在可扩展性和维护上妥协。例如,不想为单个类更改部署整个战争文件。我的问题:在设计和选择一个或多个 webapp 时需要考虑哪些因素?

2) webapps之间的数据共享:如果有多个webapp,需要共享数据。我正在考虑不那么抽象的解决方案。我对 Spring 比较陌生,目前通过两个上下文之间的过滤器和请求对象在 webapps 之间共享数据。能够找到几个帖子,例如( How do you share Spring beans between different Spring contexts?) 但在我意识到春天之前,我不想最终陷入太多抽象。但是,我再次意识到,在项目的后期实施变更相对困难。我的问题:在不同的 spring 上下文之间共享数据的任何其他方式具有较少的抽象?

3) 要使用的弹簧版本。肯定是最新的,因为它的功能,但想选择一个有更多社区支持的。我认为在不久的将来我不需要在最新版本中使用 spring 的所有高级功能。

4) 视图:我计划通过转换现有的 JSP 来使用 JSTL 作为表示层,因为我已经对它进行了一些工作并且是直接的(较少抽象)。我的问题:除 JSTL 之外的任何其他技术,例如 JSF 和您对 JSTL 的建议。

感谢您的宝贵时间。

【问题讨论】:

    标签: java spring web-applications


    【解决方案1】:

    回答你的问题 2。如果你有 spring bean 可以在不同的应用程序之间共享。我会考虑为它定义一个单独的模块。例如,如果您有 webapp1、webapp2,它们使用公共 bean 来验证某些业务规则。您可以创建一个名为 validation-manager 的模块,该模块将打包为 jar 文件并作为 webapp1 和 webapp2 的依赖项包含在内。

    要让 webapp1 和 webapp2 都可以访问 jar 中包含的公共 bean,您可以在应用程序上下文中配置这些 bean,如下所示:

    验证管理器应用程序上下文配置

    <!-- beans definitions shared between webapp1 and webapp2 -->
    <bean id="userValidation" class="com.example.UserValidation" />
    <bean id="orderValidation" class="com.example.OrderValidation" />
    

    webapp1 配置

    <!-- import beans definitions for validation-manager -->
    <import resource="classpath:applicationContext-validation-manager.xml" />
    
    <!-- beans definitions specific to webapp1 -->
    

    webapp2 配置

    <!-- import beans definitions for validation-manager -->
    <import resource="classpath:applicationContext-validation-manager.xml" />
    
    <!-- beans definitions specific to webapp2 -->
    

    我们的想法是尽可能地模块化您的代码,以便能够在不同的 web 应用程序中重用常用功能。

    希望对您有所帮助。

    【讨论】:

    • 这个spring配置是不是和非spring应用类似,把jar文件放在tomcat/shared文件夹下,在不同的webapps中使用类。例如:shared/mydao.jar ?其次,validation-manager.xml 和validation-beans.jar 驻留在tomcat/shared 中的什么位置?第三,应该为 webapp1 和 webapp2 设置什么类路径才能找到validation-manager.xml?感谢您的宝贵时间。
    • 在 tomcat 中,您的应用程序 jar 文件将驻留在您的 /WEB-INF/lib 目录中。因此对于 webapp1,您的共享 jar 将部署在 /webapps/webapp1/WEB-INF/lib/validation-manager.jar 和 webapp2 将是相同的 /webapps/webapp2/WEB-INF/lib/验证管理器.jar。 Tomcat 文档不鼓励将应用程序 jar 部署到 /lib 目录,因为该目录下的 jar 文件对 tomcat 内部类和应用程序特定类都是可见的。 validation-manager.xml 会打包到jar的根目录
    • 我有一个问题要问你。你打算在你的项目中使用 maven 或 ant 吗?我强烈推荐使用 maven。
    • 我正在使用蚂蚁。将来会切换到maven。我正在等待执行您建议的方法,看看我是否提出任何问题,但这需要我更多时间。我接受你的回答,因为第二点是我问的所有 4 点中的主要点。谢谢。
    • 祝项目好运,我强烈建议在此过程的早期而不是后期切换到 maven。
    【解决方案2】:

    这里试图回答你的问题;

    1. 只要您拥有良好的版本控制和发布管理周期,单独的 Web 应用确实可以更轻松地维护和“隔离”更改的效果。我的建议是通过一次将一个应用程序迁移到“符合 Spring”的样式而不是采用“大爆炸”的方法来允许过渡迁移。

    2. 在数据共享方面,您需要考虑几件事情,以及您是否将每个单独的 Web 应用程序视为“服务”(不仅能够与其他网络应用程序,但未来的应用程序)或作为单独的已知/耦合网络应用程序。如果您选择前者,那么 RESTful 服务和消息服务有多种选择。如果您选择后者,那么您正在寻找稍微耦合的数据共享方法。无论如何,您可能想让自己熟悉 Spring Integration 作为在应用程序之间交换消息/数据的一种方式,因为它从消费应用程序和消息传递管道中抽象出来。看看Spring Integration documents 的入门知识以及理论知识的EAI patterns

    3. 选择最新的;从 3.1 到 3.2 有一点过渡,但 3.2 中包含一些非常简洁的 Spring Web/MVC 测试工具,它们将真正帮助您的开发。 (看看this

    4. JSTL 和 JSF 有不同的交互模式,所以如果你在当前的应用程序中使用 JSP 和 JSTL,Spring MVC 很好地支持它并且有很多可用的资源。 (不反对 JSF,只是为什么要引入额外的复杂性)

    【讨论】:

      猜你喜欢
      • 2015-11-17
      • 2018-05-07
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多