我有一个 WAR(通过嵌入式 Jetty 提供服务),我想包含静态文件战争之外。我的目标是:
- 从 WAR 外部的路径(相对于嵌入式 Jetty 运行的目录)提供静态文件。所以,如果我调用 jar
/srv/app
,我想配置一个 URLhttp://myapp.com/static/js/my.js
服务/src/app/public/js/my.js
.
- 安全:没有目录列表或
../
路径逃逸
- 不重新发明轮子:我不想编写新的 Servlet,而是利用现有功能
- 理想情况下(不是必需的):隐藏 WAR 中的静态内容,这样如果我有
/src/app/public/index.html
,该文件将被提供,并且,如果不存在,则 WAR 的index.html
将被送达。
这是我检查的内容以及我陷入困境的地方:
- DefaultServlet:看起来很理想,但是,我找不到任何方法让它在 WAR 之外提供文件服务。有没有办法让 DefaultServlet 在 WAR 之外提供静态内容,并使用相对于应用程序密码的路径?
- 配置 Jetty,如中所述https://www.eclipse.org/jetty/documentation/current/static-content-deployment.html https://www.eclipse.org/jetty/documentation/current/static-content-deployment.html;这似乎是理想的,但是,当复制进来时,似乎没有做任何事情(这是一个NOOP)。
- ResourceHandler:这是正确的方法吗?我不知道如何利用它来实现我的目标
ResourceHandler:这是正确的方法吗?我不知道如何利用它来实现我的目标
不要使用ResourceHandler
,其劣于DefaultServlet
.
配置 Jetty,如中所述https://www.eclipse.org/jetty/documentation/current/static-content-deployment.html https://www.eclipse.org/jetty/documentation/current/static-content-deployment.html;这似乎是理想的,但是,当复制进来时,似乎没有做任何事情(这是一个NOOP)。
仅当您不共享相同内容时这才有效contextPath
作为您部署的 Web 应用程序。
有没有办法让 DefaultServlet 在 WAR 之外提供静态内容,并使用相对于应用程序密码的路径?
是的,stackoverflow 上已经以几种不同的方式记录了这一点。
关键是,你会使用额外的DefaultServlet
条目,使用自己的“资源基础路径”定义(必须是完全限定的路径条目,没有相对路径),位于不同的url-patterns
.
See:
- 从嵌入式 Jetty 中的备用路径提供静态文件 https://stackoverflow.com/a/20223103/775715
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)