从JSP / Servlet / Portlets(Jetspeed)迁移到Spring项目 - 应用程序设计

时间:2013-08-14 15:56:01

标签: java spring web-applications

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

1)将应用程序挤入的webapp数量:目前,我有5个webapps。如果需要,所有这些都可以分成一个webapp,这有助于避免在迁移到spring时在其间共享数据的额外编码。但是,不希望在可扩展性方面做出妥协。保养。例如,不希望为单个类更改部署整个war文件。我的问题:在设计和选择一个与多个Web应用程序时需要考虑哪些因素?

2)webapps之间的数据共享:如果有多个webapp,则需要共享数据。我在考虑不那么抽象的解决方案。我是一个比较新的春天,目前通过过滤器和网络分享webapps之间的数据。请求两个上下文之间的对象。能找到几个帖子像( How do you share Spring beans between different Spring contexts?)但是在我意识到春天之前,我不想结束过多的抽象。但是,我再次意识到相对而言,在项目的后期阶段难以实施变革。我的问题:在不同的弹簧上下文之间以较少的抽象方式共享数据的任何其他方式?

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

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

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

这是尝试回答你的问题;

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

  2. 在数据共享方面,您需要考虑几件事情,以及您是否将每个单独的网络应用视为“服务”(能够共享信息而不仅仅是其他网络应用程序,但未来的应用程序)或作为单独的已知/耦合的网络应用如果你想要前者,那么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,只是为什么要引入额外的复杂性)

答案 1 :(得分:0)

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

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

validation-manager application context config

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

webapp1 config

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

<!-- beans definitions specific to webapp1 -->

webapp2 config

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

<!-- beans definitions specific to webapp2 -->

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

希望有所帮助。