java - Heroku 上带有 WAR 和 Jetty 的静态内容

标签 java heroku jetty

我有一个 REST 服务器,它被打包成 WAR 并在 Heroku 上与 Jetty 一起运行。我有一个新的要求,需要提供一些简单的静态内容。

这很简单,我可以将静态内容放入我的“src/main/webapp”中,默认的 servlet 将处理它。

但是,我不想每次我们的 HTML 人员更新静态内容时都必须重建我的 WAR。所以我有两个问题。

  1. 如何让 Jetty 提供我的 REST 服务以及静态 HTML 内容,而不必在每次静态内容更改时重建我的 war。
  2. 如何将新的静态内容推送到 heroku,而无需重建项目并重新启动 jetty?

目前部署很简单,我只需要担心代码更改,所以我只需从 git 放到 heroku 中,它就会调用 mvn package 并重新启动我的 dynos。但对于静态内容仅进行更改,我不希望发生这种情况。

谢谢!

最佳答案

有几种选择供您选择。

  1. 定义另一个 DefaultServlet,将新请求路径映射到磁盘上的目录。
    • 定义于WEB-INF/web.xml
    • 或在 Jetty 上下文可部署 xml 中定义
  2. 定义一个 DefaultHandler,将新请求路径映射到磁盘上的目录。
    • etc/jetty.xml 中的服务器级别定义
    • 或添加到您选择的新 xml 文件中的处理程序列表中,例如 etc/my-external-static.xml
    • 参见 contexts-available/resources.xml 以分布为例。
  3. 定义一个 ResourceHandler,将新请求路径映射到磁盘上的目录。
    • etc/jetty.xml 中的服务器级别定义
    • 或添加到您选择的新 xml 文件中的处理程序列表中,例如 etc/my-external-resources.xml
    • 参见 etc/jetty-fileserver.xml 以分布为例。
  4. 在您的网络应用旁边部署静态上下文引用

我要尝试的第一个技术是......

  • 打开 etc/webdefault.xml 来自分布。
  • 查找 <servlet> 名为 default 的 servlet 的声明默认Servlet。
  • 复制<servlet>定义到您的网络应用程序的 WEB-INF/web.xml
  • 重命名 <servlet-name>default 以外的其他内容(它是一个特殊的保留名称)。我们称之为<servlet-name>extrastatic</servlet-name>
  • 添加新的<init-param>定义 resourceBase值指向磁盘上查找内容的位置。
<init-param>
  <param-name>resourceBase</param-name>
  <param-value>/var/web/static/</param-value>
</init-param>
  • 添加<servlet-mapping>定义从什么 URL 模式提供此静态内容的部分。
<servlet-mapping>
  <servlet-name>extrastatic</servlet-name>
  <url-pattern>/static/*</url-pattern>
</servlet-mapping>
  • 现在再次部署你的 war 。

这是如何工作的......你现在在网络应用程序之外拥有额外的静态内容。

假设您已将 war 部署到上下文 /myapp那么像这样的 URL 请求将提供来自这个新的 extrastatic 的内容。 servlet。

http://machine.corp.com/webapp/static/ 
   serves: /var/web/static/ (possibly index.html - see dirAllowed init-param)

http://machine.corp.com/webapp/static/css/main.css
   serves: /var/web/static/css/main.css

http://machine.corp.com/webapp/static/js/jquery-min.js
   serves: /var/web/static/js/jquery-min.js

关于java - Heroku 上带有 WAR 和 Jetty 的静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641576/

相关文章:

java - pom.xml 中存在依赖项错误 : Missing artifact org. eclipse.jetty.tests :test-mock-resources:jar:9. 1.0.v20131115

java - Maven:在 Eclipse 的构建路径中使用列出的依赖项?

mysql - 诊断 2013 与 MySQL 的连接丢失

maven - 强制 jetty (在 maven 上运行)忽略 ssl 错误

node.js - 从 heroku 中删除 'server' 和 'via' header ?

php - 如何在 Heroku 中卸载此构建包?

logging - jetty :如何禁用日志记录?

java - 如何确保 ResultSet 包含 "missing"观察的行

java - Scala/Java Spark

java - 如何在 Java Swing 应用程序中打包和运行 Windows 帮助 (.chm) 文件