2016-04-16 11 views
1

Застрял со странной проблемой. Я добавляю ServletContext в свой класс (определенный как @Service), и он всегда возвращает null. Пробовал оба @Autowired и без него.Spring ServletContext возвращает null

Также я не получил никаких ошибок при запуске приложения. только нулевое значение, когда я называю 'servletContext.getRealPath ("/ WEB-INF /")'

Это класс, где я пытаюсь использовать:

@Service 
public class MyFactory implements ServletContextAware { 

    @Autowired 
    ServletContext servletContext; 

    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 

    private someMethod(){ 
     servletContext.getRealPath("/WEB-INF/"); //this return null 
    } 

} 

PS servletContext сама по себе null, а не метод .getRealPath("/WEB-INF/")

+0

Вы, конечно, даете Spring создать экземпляр класса для вас, не называя 'new MyFactory()' самостоятельно, не так ли? И 'someMethod()' вызывается * после того, как * autowiring завершает тоже, правильно? – Andreas

+0

да, обе правый. – user1935987

ответ

1

Описание проблемы является непонятным. Вы говорите, что добавили ServletContext и это возвращает null (@Autowired или нет), что делает его похожим на значение servletContext, если ваша формулировка и пример кода в противном случае указывают, что getRealPath() возвращает null.

Если servletContext имеет значение null, то servletContext.getRealPath() вызовет NullPointerException.

Если servletContext не равно нулю, то servletContext.getRealPath() удастся, но может возвращение нуль.

Цитирование Javadoc из getRealPath():

Этот метод возвращает null, если контейнер сервлета не может перевести данный виртуальный путь к реального пути.

Так что, если /WEB-INF/ находится в .war файл, который не был распакован, нет никакого реального пути, и getRealPath() возвратит нуль.

+1

Извините, вы правы, описание проблемы недостаточно ясное. servletContext - null. – user1935987

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