2010-11-15 2 views
1

Я использую Spring MVC 3.0 и Tomcat.Доступ к файлам из корня веб-документа

У меня есть компонент, у которого есть свойство, значение которого должно быть путем, корневым из корня веб-документа. Например, я бы указал его значение в файле конфигурации Spring следующим образом.

<bean id="myBean" class="com.stackoverflow.Bean"> 
    <property name="path" value="/WEB-INF/foo.xml" /> 
</bean> 

Где я могу взять это значение, чтобы я мог прочитать файл? Spring/Spring MVC обеспечивает прозрачный способ доступа к ресурсам внутри корня документа?

ответ

4

Для того, чтобы получить реальный путь к ресурсу вам нужно будет иметь доступ к ServletContext

Одним из способов достижения этой цели будет сделать свой интерфейс com.stackoverflow.Bean implement ServletContextAware. После перезагрузки, сервер должен передать экземпляр ServletContext к этой фасоли (вы должны включить следующий код)

private ServletContext ctx; 
public void setServletContext(ServletContext servletContext) { 
    ctx = servletContext; 
} 

Наконец, используйте ctx.getRealPath(path), чтобы получить реальный путь к ресурсу.

-1

Предполагаю, что у вас есть веская причина НЕ помещать foo.xml в WEB-INF/classes. Это простой вопрос по загрузке ресурса из CLASSPATH для этого каталога.

Возможно, ресурс может быть использован с использованием обозначения «файл: WEB-INF/foo.xml».

+0

Вы видите, как все файлы конфигурации Spring, файлы Tache Apache и файлы конфигурации Struts находятся в/WEB-INF? Файл у меня похож. Я просто хочу быть последовательным. –

+0

«Глупая консистенция - это хобгоблин маленьких умов» - Ральф Уолдо Эмерсон. Заставьте его работать первым; затем беспокоиться о последовательности. – duffymo

+0

Он отлично работает в течение долгого времени, и я реорганизую его. Было бы забавно работать с файлами конфигурации, разбросанными по всему месту. Кому нужна конвенция, за которой следуют проекты Apache и Spring, когда у нас есть гений по имени duffymo ?. Ты такой же блестящий, как и ваш ответ. –

2

Если вы не возражаете против использования классов Spring непосредственно в вас POJO, вы можете ввести свойство path в качестве объекта Resource. Spring будет обрабатывать преобразование из java.lang.String в org.springframework.core.io.Resource для вас. Поэтому он должен работать с XML, который вы разместили в своем вопросе.

Дополнительную информацию о ресурсах можно получить на странице Spring Reference.

Смежные вопросы