2011-03-28 71 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); 
} 

它爲我工作。

相關問題