我有一个bean,我试图在Web应用程序启动时传递相对路径。它适用于绝对路径(在eclipse中运行tomcat),例如( C:/ dev / workspace / project / src / main / webapp / WEB-INF / resource / )
然而,当我尝试传递一个相对路径,例如 WEB-INF / my_resource / 时,它说无法找到位置 C:/ dev / eclipse / WEB-INF / my_resource / 可能是因为tomcat在eclipse中运行。我怎样才能使这个路径相对,以便无论webapp的位置如何,总是从运行它的webcontainer中获取它?
我已经阅读了使用servletconfig.getRelativePath(/)但不知道如何从我的bean中获取servlet配置,或者即使在Spring中这是正确的事情...请帮助
我的bean类和bean配置xml的源代码可以在下面找到
public class SuggestionIndexSearcher extends IndexSearcher {
private String indexSearcherType;
public SuggestionIndexSearcher(String type, String path){
super(path);
this.indexSearcherType = type;
}
...
}
bean在teh beans 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 :(得分:3)
如果您将bean更改为org.springframework.core.io.Resource
(javadoc)而不是String
,那么Spring会自动将您的路径强制转换为适当类型的Resource
。当在servlet容器内运行时,Spring通常会选择ServletContextResource
,其中路径相对于webapp根目录(因此WEB-INF/my_resource/
应该按预期工作)。
您的代码选择如何处理Resource
取决于您想要用它做什么,显然。
您的XML配置不需要更改,只需像以前一样继续传递路径字符串。请参阅the Spring manual for a wider description of resources。
答案 1 :(得分:0)
将参数类型从String更改为Resource - 然后spring将执行转换并为您提供可以处理的资源对象。您应该使用XMLWebApplicationContext(如果ContextLoaderListener或DispatcherServlet正在创建上下文,则它是默认值。)
请查看此page了解详情。