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

时间:2012-10-24 19:29:16

标签: java spring spring-mvc

我有一个现有的Java应用程序(基于Spring),它目前没有Web界面,也没有在Web容器中运行。它很好地与启动程序打包并且正常工作。

我需要做的是为一些管理类型的东西添加一个管理Web界面,检索实时指标,也许还有一些图表,让用户感到温暖的模糊感,知道一切正常。由于我们是一家Spring商店,而且我们的一些Web应用程序已经使用了Spring MVC,这对我们来说才有意义,但是,我对我们内部的Spring人员对我应该如何处理的建议感到不满。 / p>

这个网络界面的理想方式是什么?

  • 将我的应用程序转换为Web应用程序,并让Web容器启动该应用程序。我不太热衷于这种方法,因为Web层确实是主要应用程序的次要因素。
  • 创建一个单独的项目,将其打包为战争,将Jetty嵌入到我现有的应用程序中并让它加载战争。我想我可以使用上下文加载器监听器来使我的应用程序的根上下文成为Web应用程序spring上下文的父上下文。这将涉及将我的Maven项目分解为我相信的两个项目。我不能使用现有的Web技术在Web层和主应用程序之间进行通信,因为我的主要应用程序不支持Web。
  • 嵌入Jetty并将Spring MVC内容直接放入我的应用程序中。虽然之前我已经完成了这种方法,但它确实涉及一些丑陋 - 例如将JSP标签库扩展到我的jar中。

有关清洁分离的任何想法吗?

另外值得注意的是,我当前的jar包含一些shell脚本启动的实用程序应用程序。走纯粹的WAR路线会让这变得不那么容易,因为我不能在我的war文件中点java并选择要执行的类。

感谢。

2 个答案:

答案 0 :(得分:2)

如果web只是一个小小的添加应用程序,将其迁移到WAR并在servlet容器中部署可能是一种过度杀伤力。嵌入Web服务器/ servlet容器看起来要简单得多,尽管它不一定是Jetty或Tomcat。您可以使用内置于JDK中的Web服务器,也可以在或甚至原始套接字上编写一个。但这是一个难以维持的地方。

另一种解决方案是在阅读时向我的母亲说明:

  

某些管理类型的Web界面,检索实时指标,可能还有一些图表

也许您不需要界面,而是监控基础设施?查看JMX(Spring有great support for JMX) - 并编写第二个Web应用程序,它只需通过JMX连接到您的独立Java应用程序,并以奇特的方式显示指标。另一种方法是通过Jolokia公开JMX,它将JMX转换为REST服务。

这种方法有几个优点:

  • 监控API是通用的,您可以免费获得

  • 您不必使用Web客户端,监控应用程序完全解耦,

  • 最终对原始应用程序的更改很少。查看此概念证明:12

答案 1 :(得分:0)

这实际上取决于您现有的Java / Spring应用程序的结构以及它提供的API的大小。我已经做了类似的事情,我通过创建一个单独的Spring MVC项目来接近它,然后将现有的Java应用程序指定为JAR依赖项。

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

如果这不容易,那么我建议的下一个选项就是将Spring应用程序转换为Spring MVC应用程序。我已经在另一个应用程序上工作了。使用Maven,可以指定构建可以创建war文件或jar文件(或两者)。因此它可以部署为webapp(通过war)或普通app(通过jar)。是的,jar版本有点膨胀,但它是值得妥协的。

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