【问题标题】:Running spring + hibernate application without actual servlet container在没有实际 servlet 容器的情况下运行 spring + hibernate 应用程序
【发布时间】:2012-09-06 18:24:37
【问题描述】:

我有一个 Spring+Hibernate 应用程序,我将其编译为 *.war 文件并将其部署到 Tomcat。这对我作为开发人员有用,但是:

有没有办法在安装了 Java 但未安装 tomcat 的用户计算机上运行该应用程序?

我什至会接受这个解决方案,它使用某种实际运行 servlet 容器并将应用程序部署到用户计算机的包,但我不希望用户必须安装容器并对其进行配置等。

有什么建议吗?

编辑:

基本上我希望用户从可执行文件运行我的网络应用程序,而无需安装 tomcat 或其他工具。

【问题讨论】:

  • war=web archive 虽然你总是可以使用 hibernate 和 spring 开发桌面应用程序,因为它们都不需要容器
  • @UmeshAwasthi 我不必使用 *.war ,但我想保持我的源代码不变,使用 spring+hibernate 和注释和其他东西
  • 要明确:您希望在用户的计算机、Web 应用程序上运行什么,或者从 main() 方法运行的代码的某些变体(并且可能不需要响应)到 HTTP 请求)?
  • @mattb 我的意思是,我正在使用所有 web 技术开发我的应用程序。spring web、mvc 等,我自己通过 Tomcat 运行它,但我想给用户一个可执行的东西,即他可以运行,无需安装tomcat或其他工具,希望这个解释
  • 只是好奇,你打算用什么数据库?

标签: java spring hibernate tomcat servlets


【解决方案1】:

您当然可以从命令行运行 spring +hibernate 应用程序,使用 ClassPathXmlApplicationContext 在您的 main 方法中加载 spring 配置文件来初始化 spring 容器和其余的接线。

但是,要运行使用 servlet 或使用 Java Servlet 规范的类似范例编写的 Web 应用程序,您需要一个像 Tomcat、AFAIK 这样的 servlet 容器。

【讨论】:

  • 这不运行servlet容器,没有一个webapp就有点没用了。
  • 不知道你为什么提到“servlet 容器”。我指的是包含所有实例化 bean 的“Spring 容器”。
  • 我从 OP 的初始问题中假设该应用程序是一个 Web 应用程序,需要在 servlet 容器中运行才能有意义地运行。目前尚不清楚他/她是否正在尝试运行 webapp 而无需用户了解如何安装 servlet 容器,或者当前打包为 war 的代码是否还包含一个 main() 入口点,该入口点将启动常规的非 Web 应用程序。
  • 从他对问题评论的回复中,我了解到 OP 想从命令行运行它,但我可能错了!
【解决方案2】:

你有几个选择:

    1234563插件。
  1. 您可以在您的应用程序中使用embed Tomcatembed Jetty,以便在您的应用程序中运行main() 方法会启动一个侦听某个端口的servlet 容器并运行您的应用程序。这样就可以将整个应用程序打包为单个 .jar 文件,并使用 java -jar your.jar 运行它。

【讨论】:

  • @Jaanus 在这种情况下,将 Tomcat 嵌入到您的应用程序中听起来像是要走的路。这样做的作用是,您不仅仅将您的应用程序分发为要在 Tomcat 安装中运行的 .war 文件,您还可以在代码中包含必要的 Tomcat 设置/配置。
  • 在运行标准 Spring 应用程序时配置该解决方案是否困难:viralpatel.net/blogs/…,有任何关于它的示例吗?我之前发现了一些嵌入 tomcat 教程,但它们看起来像是很多代码编辑而不是很简单..
  • 我在答案中链接到了两个教程,这两个教程看起来都很简单。快速 google 搜索会找到更多教程,而且看起来嵌入在 Tomcat 7 中变得更加容易。请参阅 arhipov.blogspot.com/2011/03/…devcenter.heroku.com/articles/…(跳过与 Heroku 相关的所有内容)。当然,使用 Spring MVC,您想要配置嵌入式服务器执行的操作是调用 DispatcherServlet。
【解决方案3】:

Winstone servlet 容器允许将战争文件嵌入 inside winstone jar,从而形成单个 jar 部署,可以使用“java -jar foo.jar”或作为可点击运行罐。

Jenkins/Hudson 使用它。我们已经使用它和一些类路径技巧来使用爆炸战争。

详情请见http://winstone.sourceforge.net/#embedding

这很可能是目前最优雅的方式。

【讨论】:

【解决方案4】:

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 2017-03-13
    • 2019-11-17
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2023-03-10
    相关资源
    最近更新 更多