在 Web 应用程序 (Tomcat7) 中从 jar 文件中公开资源

Posted

技术标签:

【中文标题】在 Web 应用程序 (Tomcat7) 中从 jar 文件中公开资源【英文标题】:Exposing resources from jar files in web applications (Tomcat7) 【发布时间】:2011-06-11 14:28:49 【问题描述】:

前段时间,我阅读了一篇文章 Servlet API 3.0 中的预期内容。我记得我读到您可以将一些 .jsp 文件保存在 /WEB-INF/lib/somelib.jar/META-INF/web/.jsp 中,这些资源将暴露给上下文根Web 应用程序。

我刚刚安装了 Tomcat7 来试一试,但我没有找到可以将一些网络资源放入 jar 文件中的文档。

servlet api 3.0 中是否存在此功能? tomcat 7.0 中是否存在此功能? 还有其他方法可以在 /lib/*.jar 文件中包含 jsp 文件吗?

【问题讨论】:

【参考方案1】:

servlet 3.0 中有一个功能允许您将资源(图像、jsp 等)打包到 JAR 文件中。您所做的是在您的 jar 文件中创建 META-INF/resources 并在其中转储您想要的任何内容,包括用于构建资源的目录。发生的情况是 META-INF/resources 将映射到您的 Web 应用程序的 docroot

当您的应用与 JAR 文件之间存在资源冲突时,您的应用资源将被退回。见this

Tomcat 7 支持 Servlet 3,所以它应该支持这个特性

【讨论】:

谢谢。我用 Tomcat 7.0.6 对此进行了测试,它可以工作。重要的是,这只适用于 WEB-INF/lib 中的 jar,而不适用于 WEB-INF/classes 是的,仅适用于 lib 中的 JAR 文件。这实际上是为了支持框架可以为自己的资源提供服务 我正在使用 spring-js-resources.jar 文件,所有文件都位于 META-INF/web-resources 下,而不是 META-INF/resources,我也开始嵌入 tomcat 7使用maven插件,它不起作用。有什么解决办法吗? @Alexandr 我认为您不能将资源重新映射到网络资源 @ChukLee,我发现有可能static.springsource.org/spring/docs/3.0.x/reference/…,但由于某种原因,它在我的情况下不起作用。不明白为什么:(

以上是关于在 Web 应用程序 (Tomcat7) 中从 jar 文件中公开资源的主要内容,如果未能解决你的问题,请参考以下文章

tomcat7部署多个web应用不同编码,端口

如何在 NOT UIViewController 中从 Web 服务加载数据?

在 C# Web 应用程序中从网络共享访问文件

如何在 Web 浏览器中从 Silverlight 应用程序捕获图像

在 Chrome 或 Firefox 中从已关闭的 Web 应用程序发送桌面通知?

在 Python 3 中从 Web 下载文件