1

我有一個bean,它試圖在web應用程序啓動時傳遞相對路徑。它適用於絕對路徑(在eclipse中運行tomcat),例如(C:/ dev/workspace/project/src/main/webapp/WEB-INF/resource/如何在spring中使用相對路徑注入webapp資源

但是,當我嘗試通過它相對路徑如WEB-INF/my_resource/它說找不到位置C:/ dev/eclipse/WEB-INF/my_resource/可能是因爲tomcat在eclipse中運行。我怎樣才能使這個路徑相對的,以便無論webapp的位置如何,它都會從任何webcontainer的運行中獲取?

香港專業教育學院讀的地方,使用servletconfig.getRelativePath(/),但也不知道如何從我的豆或者即使這是在春季做正確的事情中得到servlet配置...請幫助

我bean類和bean配置XML源代碼可以在下面

public class SuggestionIndexSearcher extends IndexSearcher { 

private String indexSearcherType; 

public SuggestionIndexSearcher(String type, String path){ 
    super(path); 
    this.indexSearcherType = type; 
} 
... 
} 

的bean是在德豆XML定義中找到...

<bean id="KMSearcherBean" class="com.hp.it.km.search.web.suggestion.SuggestionIndexSearcher"> 
     <constructor-arg index="0" value="KMSearcher" /> 
     <constructor-arg index="1" value="WEB-INF/resource/keyword" /> 
</bean> 
+0

什麼是'IndexSearcher',它對'path'做了什麼?看來問題在於如何處理該字符串。 – skaffman

+0

感謝您的回覆。也許我不清楚......這可能是任何階級,它是無關緊要的。我的問題不是進入課程後發生的事情,也不是課程擴展或者對字符串做什麼。我問的是在調用super()之前可以添加什麼代碼來將path =「/ WEB-INF/my_resource /」轉換爲path = 「/ WEB-INF/my_resource/where =是tomcat或weblogic中的web應用程序的文件系統位置,或者web應用程序可能運行的任何應用程序服務器,即我需要找出是什麼? –

+0

通過簡單地將字符串更改爲資源。乾杯Skaffman –

回答

3

如果你改變你的bean採取org.springframework.core.io.Resourcejavadoc),而不是String,那麼Spring將自動地迫使你的路徑到適當類型的Resource。在servlet容器中運行時,Spring通常會選擇ServletContextResource,其中路徑相對於webapp根目錄(所以WEB-INF/my_resource/應該按照您的預期工作)。

顯然,您的代碼如何選擇處理Resource取決於您想要處理的內容。

在你的XML配置中不需要改變,只需像以前一樣傳遞路徑字符串即可。見the Spring manual for a wider description of resources

+1

工作完美,沒想到會那麼簡單,我來到這個春天的東西。乾杯skaffman –

0

變化從String到Resource的參數類型 - 然後spring將執行轉換併爲您提供可以處理的資源對象。您應該使用XMLWebApplicationContext(如果ContextLoaderListener或DispatcherServlet正在創建上下文,則這是默認值)。

查看此page瞭解更多詳情。

+0

乾杯爲我工作 –