【问题标题】:Spring MVC - Access static resources from outside the application contextSpring MVC - 从应用程序上下文之外访问静态资源
【发布时间】:2014-10-31 15:34:59
【问题描述】:

我有一个 Web 应用程序,其中每个 JSP 都应该链接到一个帮助 pdf 文件。这些文件位于 Web 容器/应用程序上下文之外,但位于同一服务器内。

我正在尝试使用 spring mvc 资源标签访问它们,但我仍然无法访问 pdf 文件。

感谢任何帮助。

这里是配置 在 Windows 环境中,文件位于 C:\workspace\shared\data\help[所有pdf都在这里]

我创建了一个 jvm 参数来访问文件 -

JVM 参数

-Dhelp.dir=/workspace/shared/data/help

spring mvc 资源标签 -

<mvc:resources  mapping="/help/*" location="file:/#{systemProperties.help.dir}/"/>

我在尝试访问 pdf 文件时遇到 404 错误

Glassfish / JDK 1.6

当我点击链接时,生成的 URL 是 -

http://localhost:8080/workspace/shared/data/help/abc.pdf

我的实际 Web 应用程序上下文是这样的 -

http://localhost:8080/MyApp

【问题讨论】:

  • 您应该显示您在浏览器中输入的确切 URL,以及与请求对应的日志。
  • 如果你输入:http://localhost:8080/MyApp/help/abc.pdf 会发生什么?
  • 我收到 404 错误,但日志中没有任何内容
  • 您应该为日志设置调试级别,并说明请求的日志是什么。

标签: java spring spring-mvc glassfish


【解决方案1】:

您只需要使用 SpEL 语法进行小修复,

<mvc:resources  mapping="/help/*" location="file:#{systemProperties['help.dir']}"/>

对于 JVM 参数:

-Dhelp.dir=/workspace/shared/data/help/

带有前导和尾随斜杠以使其全部正常工作

见:http://wordgraphs.com/post/1751/Serving-a-resource-from-outside-the-context-root-in-Spring-MVCSpring Expression Language (SpEL)

【讨论】:

  • 我已经看过这个链接了。在 windows 下,添加 c:\ 是有意义的,但在 unix 或 linux 中如何。
  • 如果这是一个 linux 服务器呢?
  • @JAGAMOT 答案已编辑,file:/absolute/path/to/the/resource/folder/ 应该适用于 linux 和 windows,而且我刚刚发现您使用了错误的 SpEL 语法和 JVM 参数中的额外前导斜杠。
  • 就像我在之前的帖子中提到的那样,即使在我进行了上述调整之后,我看到链接呈现为 -localhost:8080/workspace/shared/data/help/abc.pdf - 当我点击时,我得到一个 404。
  • @JAGAMOT 根据你的例子它被映射到http://localhost:8080/MyApp/help/abc.pdf,你使用的是位置路径而不是 url 映射模式,你确定你使用的是绝对路径作为文件位置,这意味着位置应该是/home/dir/to/resouces/folder/
猜你喜欢
  • 2019-04-30
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多