【问题标题】:how to inject webapp resource using relative path in spring如何在spring中使用相对路径注入webapp资源
【发布时间】:2012-01-15 05:33:32
【问题描述】:

我有一个 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 中运行。我怎样才能使这条路径相对,以便无论 web 应用程序的位置如何,它总是可以从运行它的任何 web 容器中获取?

我已经阅读到位以使用 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>

【问题讨论】:

  • 什么是IndexSearcher,它与path 有什么关系?似乎问题在于如何处理该字符串。
  • 感谢您的回复。也许我不清楚......这可能是任何课程,它无关紧要。我的问题不是它进入类后发生了什么,也不是类扩展或对字符串做什么。我要问的是,在调用 super() 之前,我可以添加什么代码来将 path="/WEB-INF/my_resource/" 转换为 path="/WEB-INF/my_resource/ where =是tomcat或weblogic中webapp的文件系统位置,或者webapp可能在其中运行的任何应用服务器。即我需要找出是什么?
  • 通过简单地将字符串更改为资源来修复。欢呼斯卡夫曼

标签: spring web-applications spring-mvc dependency-injection relative-path


【解决方案1】:

如果您将 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

【讨论】:

  • 完美运行。没想到会这么容易。我来看看这个春天的东西。干杯skaffman
【解决方案2】:

将参数类型从 String 更改为 Resource - 然后 spring 将进行转换并为您提供可以处理的资源对象。您应该使用 XMLWebApplicationContext(如果上下文是由 ContextLoaderListener 或 DispatcherServlet 创建的,则这是默认设置)。

查看page 了解更多详情。

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多