как внедрить ресурс webapp, используя относительный путь весной - PullRequest
1 голос
/ 07 декабря 2011

У меня есть бин, который я пытаюсь передать относительный путь при запуске веб-приложения.Он работает для абсолютного пути (запуск tomcat в затмении), например ( C: / dev / workspace / project / src / main / webapp / WEB-INF / resource / )

Однакокогда я пытаюсь передать ему относительный путь, такой как WEB-INF / my_resource / , он говорит, что не может найти местоположение C: / dev / eclipse / WEB-INF / my_resource / , вероятно, потому чтокот бежит в затмении.Как я могу сделать этот путь относительным, чтобы он всегда был выбран из любого веб-контейнера, на котором он работает, независимо от местоположения веб-приложения?

Я прочитал на месте, чтобы использовать servletconfig.getRelativePath (/), но низнаете, как получить конфигурацию сервлета из моего bean-компонента или даже если это правильно сделать в Spring ... Пожалуйста, помогите

Исходный код для моего класса bean-компонента и конфигурации bean-компонента xml можно найти ниже

public class SuggestionIndexSearcher extends IndexSearcher {

private String indexSearcherType;

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

Бин определяется в бобах 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>

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Если вы измените свой боб на org.springframework.core.io.Resource ( javadoc ) вместо String, тогда Spring автоматически приведет ваш путь в соответствующий тип Resource. При запуске внутри контейнера сервлета Spring обычно выбирает ServletContextResource, в котором путь становится относительно корня веб-приложения (поэтому WEB-INF/my_resource/ должен работать так, как вы ожидаете).

То, как ваш код выбирает обработку Resource, очевидно, зависит от того, что вы хотите с ним делать.

Никаких изменений не требуется в вашей конфигурации XML, просто продолжайте передавать строку пути, как и раньше. См. Руководство Spring для более полного описания ресурсов .

0 голосов
/ 08 декабря 2011

Измените тип аргумента с String на Resource - тогда Spring выполнит преобразование и предоставит вам ресурсный объект, который вы можете обработать.Вы должны использовать XMLWebApplicationContext (который используется по умолчанию, если контекст создается с помощью ContextLoaderListener или DispatcherServlet).

Посмотрите эту страницу для получения более подробной информации.

...