【问题标题】:Serving static content outside the WAR with Embedded Jetty使用 Embedded Jetty 在 WAR 之外提供静态内容
【发布时间】:2019-09-29 18:36:15
【问题描述】:

我有一个 WAR(通过 Embedded Jetty 提供服务),我想在 WAR 之外包含静态文件。我的目标是:

  • 从 WAR 外部的路径提供静态文件,相对于 Embedded Jetty 运行的目录。所以,如果我调用/srv/app 中的jar,我想配置一个http://myapp.com/static/js/my.js 的URL 来服务/src/app/public/js/my.js
  • 安全:没有目录列表或../ 路径转义
  • 不要重新发明轮子:我不想编写新的 Servlet,而是要利用现有功能
  • 理想情况下(非必需):隐藏 WAR 中的静态内容,这样如果我有 /src/app/public/index.html,将提供该文件,如果不存在,将提供 WAR 的 index.html。李>

这是我检查的内容,以及我遇到的问题:

  1. DefaultServlet:看起来很理想,但是,我找不到任何方法让它在 WAR 之外提供文件。 DefaultServlet 有没有办法在 WAR 之外提供静态内容,路径相对于应用程序的密码?
  2. 配置 Jetty,如 https://www.eclipse.org/jetty/documentation/current/static-content-deployment.html 中所述;这似乎是理想的,但是,当复制进来时,似乎没有做任何事情(这是一个 NOOP)。
  3. ResourceHandler:这是正确的做法吗?我无法弄清楚如何使用它来实现我的目标

【问题讨论】:

    标签: servlets jetty embedded-jetty


    【解决方案1】:

    ResourceHandler:这是正确的做法吗?我无法弄清楚如何使用它来实现我的目标

    不要使用ResourceHandler,它不如DefaultServlet

    配置 Jetty,如 https://www.eclipse.org/jetty/documentation/current/static-content-deployment.html 中所述;这似乎是理想的,但是,当复制进来时,似乎没有做任何事情(这是一个 NOOP)。

    这仅在您不与部署的 web 应用共享相同的 contextPath 时才有效。

    DefaultServlet 有没有办法在 WAR 之外提供静态内容,路径相对于应用程序的密码?

    是的,这已在 stackoverflow 上以几种不同的方式记录。 关键是,您将在不同的url-patterns 上使用额外的DefaultServlet 条目,这些条目由它们自己的“资源基本路径”(必须是完全限定的路径条目,没有相对路径)定义。

    见:

    【讨论】:

    • 你能详细说明这应该怎么做吗?我是 Jetty 和 Servlets 的新手,希望使用您的回答来指导我的实施。
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    相关资源
    最近更新 更多