将Web界面(Spring MVC)添加到现有的Java应用程序

3
我有一个现有的Java应用程序(基于Spring),目前没有Web界面,也没有在Web容器中运行。它可以通过启动程序很好地打包起来,而且只需要工作。
我需要做的是添加一个管理Web界面,用于一些管理类型的事情,检索实时指标以及可能提供一些图表,让用户感到温暖和舒适,知道一切都在工作。由于我们是一个Spring商店,而且我们的一些Web应用程序已经使用了Spring MVC,所以对我们来说只有这样做才有意义,然而,我对内部Spring人员提出的建议不满意。
什么是理想的方式来增加这个Web界面?
1.将我的应用程序转换为Web应用程序,并让Web容器启动该应用程序。我不太喜欢这种方法,因为Web层实际上是次要的。
2.创建一个作为War打包的单独项目,将Jetty嵌入到我的现有应用程序中,并让它加载War。我认为我可以使用上下文加载器侦听器将我的应用程序的根上下文作为Web应用程序Spring上下文的父级。我认为这将涉及将我的Maven项目拆分为2个项目。我不能使用现有的Web技术来在Web层和主要应用程序之间进行通信,因为我的主要应用程序没有启用Web。
3.嵌入Jetty并直接将Spring MVC内容放在我的应用程序中。虽然我以前做过这种方法,但它确实涉及到一些丑陋的事情-例如将JSP标签库爆炸到我的jar中。
有什么想法可以进行清晰的分离吗?
此外,我的当前jar包含一些实用程序应用程序,一些shell脚本启动。走纯WAR路线会使这变得不太容易,因为我不能只是指向我的war文件并选择要执行的类。谢谢。
2个回答

2
如果Web只是应用程序的一个较小的附加部分,那么将其迁移到WAR并在servlet容器中部署可能会过度杀伐。嵌入Web服务器/Servlet容器看起来更简单,虽然它不一定是Jetty或Tomcat。您可以使用JDK中内置的Web服务器或在之上编写一个Web服务器,甚至可以使用原始套接字。但这很难维护。
阅读以下内容时,另一个解决方案浮现在我的脑海中:
“一些管理类型事物的Web界面,检索实时指标,以及可能的一些图表”
也许您不需要界面,而是需要监控基础设施?查看JMX(Spring对JMX有很好的支持)-编写第二个Web应用程序,通过JMX仅连接到您的独立Java应用程序,并以精美的方式显示指标。另一种方法是通过Jolokia公开JMX,将JMX转换为REST服务。
此方法具有几个优点:
监控API是通用的,而且您可以免费使用它。您不必使用Web客户端,监控应用程序完全解耦。最后,对您原始应用程序的更改很小。请查看这个概念验证:12

2
关于 JMX 的观点非常好。我会进一步研究它。 - Jason

0

这真的取决于您现有的Java/Spring应用程序的结构以及它提供了多少API。我曾经做过类似的事情,我的方法是创建一个单独的Spring MVC项目,然后将现有的Java应用程序指定为JAR依赖项。

这在Maven(或Ivy等)中很容易实现,并提供了良好的解耦。关键是能够在Spring MVC应用程序中编写服务类,然后通过简单的DAO类通过依赖的Spring应用程序访问数据。这就是我一开始说的,它取决于您原始Java应用程序的结构。它必须能够为数据访问提供API,以便您可以将DAO(impl)插入其中。

如果这不容易实现,则我建议下一个选项是将您的Spring应用程序转换为Spring MVC应用程序。我曾经在另一个应用程序上工作过,我们就是这样做的。使用Maven,可以指定构建可以创建war文件或jar文件(或两者兼备)。因此,它可以部署为Web应用程序(通过war)或普通应用程序(通过jar)。是的,jar版本有点臃肿,但这是值得妥协的。

嵌入Jetty或通过war文件使用Tomcat的问题是完全独立的问题,它有其优缺点。这不应影响您在首次构建Web应用程序时采取的方法。


我开始觉得我需要重新考虑制作Spring应用程序的方式了。最好从一开始就采用Web应用程序的方法。以防后来需要添加Web界面。这种情况经常发生,即使只是为了向我们的支持人员提供数据提取接口。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接