Доступ к файлам из корня веб-документа - PullRequest
1 голос
/ 16 ноября 2010

Я использую Spring MVC 3.0 и Tomcat.

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

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

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

Ответы [ 3 ]

5 голосов
/ 16 ноября 2010

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

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

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

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

2 голосов
/ 16 ноября 2010

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

package com.stackoverflow;

import org.springframework.core.io.Resource;

public class Bean {

    private Resource resource;

    public void setPath(final Resource resource) {
        this.resource = resource;
    }

    public void doSomething() {
         // Use resource.getFile() to get java.io.File
         // or resource.getInputStream() to get java.io.InputStream
    }
}

См. Spring Reference для получения дополнительной информации о ресурсах.

0 голосов
/ 16 ноября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...