2011-03-28 87 views
23

,我需要为位于应用程序上下文目录之外的静态内容(图像)提供服务。整个应用程序体系结构要求我使用Tomcat来执行此操作。我想我可以从Spring的<mvc:resources>中受益,以配置应用程序URL和目录内容之间的映射。但是,AFAIK的mapping属性只处理上下文相关或类路径映射。因此,我想使用:Spring:在Web应用程序的上下文根外部提供静态资源

<mvc:resources location="/images/**" mapping="/absolute/path/to/image/dir"/> 

不起作用。因为我宁愿避免编写一个简单的文件传输servlet,如果有人能够给我一些关于现有基于Spring的解决方案/解决方法的指针,我会很高兴。

非常感谢。

荷马

回答

33

<mvc:resources>可以从外部服务资源,你需要使用通常的Spring resource path syntax

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/> 
+1

然后我一定误解了一些东西。事实上,我尝试使用'file:'前缀。而且,当向一个静态资源追踪请求时,我在日志中注意到Spring预先加了一个斜杠,导致了以下映射:'/ file:/ absolute/path/to/image/dir'。不用说,这试图映射到上下文根中的某些东西,而这根本不存在。恐怕我不能利用你的建议。 – Homer 2011-03-28 09:14:52

+0

@Homer:您将'mapping'与'location'混淆,请参阅更新。 – axtavt 2011-03-28 09:26:33

+3

嗯。应该在发布之前重新阅读示例:(。我将'mapping'和'location'属性混淆了。对我感到羞耻。感谢您的回复axtavt。它指出我错在哪里,并且让我修复了我的问题错误。事情现在按预期工作。 – Homer 2011-03-28 09:33:29

2

还有一个更简单的校正

的代码应该是

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/>

您是否注意到其中的差异? 你需要在绝对路径的末尾加上'/'。

,或者您可以使用Java配置

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    String rootPath = System.getProperty("user.home"); 
    String imagePath = "file:"+rootPath + File.separator + "tmpFiles/"; 
    System.out.println(imagePath); 
    registry.addResourceHandler("/resources/**").addResourceLocations("resources/"); 
    registry.addResourceHandler("/tmpFiles/**").addResourceLocations(imagePath); 
} 

它为我工作。

相关问题