【问题标题】:Making an open source Java webapp easy to install and deploy on Tomcat, Jetty etc使开源 Java webapp 易于在 Tomcat、Jetty 等上安装和部署
【发布时间】:2012-03-17 05:01:45
【问题描述】:

我正在分发一个简单的 Java webapp 作为开源。 webapp 需要在运行之前进行配置——需要创建一个配置文件,并且需要将该配置文件的位置作为web.xml 中的参数告知 webapp。

现在我的问题是如何最好地打包和分发 webapp 以使其易于安装,以及如何在文档中描述该安装过程。我能想到的选项是:

  • 将 webapp 作为 WAR 存档分发。建议用户将WAR部署到他们的Tomcat/Jetty/whatever中,然后将他们的配置文件放到/webapps/myapp/WEB-INF,并修改/webapps/myapp em>/WEB-INF/web.xml 相应
  • 将 webapp 作为源分发。建议用户将他们的配置文件放到/src/main/webapp/WEB-INF 文件夹中,然后相应地修改他们的/src/main/webapp/WEB-INF/web.xml,然后使用Ant 或Maven 构建一个WAR,并将其部署到他们的servlet 容器中。

可能还有其他我想不到的选项。

对于需要安装、配置和部署 webapp 的用户来说,哪种设置可能最方便?

编辑:我应该补充一点,配置文件不仅仅是几行——它是一个包含数据库模式和其他内容的大文件,并且可能使用外部编辑器生成;所以只提供良好的默认值不是一种选择。

【问题讨论】:

    标签: java web-applications tomcat servlets jetty


    【解决方案1】:

    也许使用系统属性作为配置文件位置。可以很容易地在命令行上以-Dorg.example.config.file=/foo/bar 的形式在启动脚本或Java 代码中传递。我想我已经看到了一些工具,例如日志框架,在 webapps 中使用系统属性来处理类似的事情。

    【讨论】:

    • 缺点:这不允许运行具有不同配置的 webapp 的多个实例。为已安装的 servlet 容器设置系统属性也不是那么容易。
    【解决方案2】:

    在对该问题进行更多阅读后,提供我自己的答案:JNDI 似乎是解决此问题的“官方”方式,尽管有些重量级。使用 JNDI,可以在 web.xml 中声明一个配置选项(例如我需要的完整配置文件的位置),并且可以在 /webapps 目录中的每个 webapp context.xml 中设置其实际值Tomcat的(或Jetty的/contexts目录)。这种设置有很多优点:

    • 大配置文件可以存在于 servlet 容器和 webapp 之外
    • 可以更新 web 应用程序而不会丢失配置
    • 分布式战争无需修改或重建

    缺点:有点复杂,需要处理 XML,并且在 Tomcat 上配置 JNDI 的工作方式与 Jetty 不同(需要两倍的文档)。

    【讨论】:

      【解决方案3】:

      我会说 WAR,虽然不需要配置可能会更方便:)

      什么是松散的,必须配置为没有适合每个人的默认值?网址字符串?

      【讨论】:

      • 更新了问题。不幸的是,每个人的合理默认值都不是一种选择。
      【解决方案4】:

      将此配置外部化,并可能提供一些默认值。如果您制作应用程序的新版本,每个人都必须记住备份该配置文件,然后重新部署并复制该文件--> 这是一场噩梦。

      有很多方法可以将该配置放在其他地方。例如,您可以使用 Java Preferences

      【讨论】:

      • 关于更新应用程序难度的优点。 Preferences 听起来不错,虽然我不确定如何将它用于 web 应用程序。
      • 不过,外部化听起来绝对是正确的选择。
      猜你喜欢
      • 2011-06-24
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2018-04-26
      • 2011-06-06
      相关资源
      最近更新 更多