Получить путь к каталогу из Spring bean? - PullRequest
4 голосов
/ 23 марта 2010

У меня есть то, что кажется простой проблемой. У меня есть веб-приложение Spring, развернутое в Tomcat. В классе обслуживания я хочу иметь возможность записать новый файл в каталог с именем graphs прямо под корнем моего приложения:

/
   /WEB-INF
   /graphs/
   /css/
   /javascript/

Мой класс обслуживания - это bean-компонент Spring, но у меня нет прямого доступа к ServletContext через механизм HttpServlet. Я также пытался реализовать ResourceLoaderAware, но все еще не могу понять, что мне нужно.

Как мне использовать Spring, чтобы получить указатель на каталог в моем приложении, чтобы я мог записать в него файл? Спасибо.

Ответы [ 2 ]

10 голосов
/ 20 апреля 2011

@ Все

Проблема с этими ответами в том, что они устарели, или информация о том, как делать что-то несколькими способами, в то время не была очевидной. Как и тот старый компьютер Atari, который вы, возможно, используете (усмехается), все могло измениться!

Вы можете просто @Autowired ServletContext в свой бин:

@Service
class public MyBean {
    @Autowired ServletContext servletContext=null;

    // Somewhere in the code
    ...
    String filePathToGraphsDir = servletContext.getRealPath("/graphs");

}
6 голосов
/ 23 марта 2010

Если ваш bean-компонент управляется весенним контекстом веб-приложения, вы можете реализовать ServletContextAware, и Spring добавит ServletContext в ваш bean-компонент. Затем вы можете запросить ServletContext реальный путь к файловой системе для данного ресурса, например

String filePathToGraphsDir = servletContext.getRealPath("/graphs");

Если ваш бин находится не в контексте веб-приложения, то он становится довольно уродливым, может что-то вроде:

ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
String pathToGraphsDir = requestAttributes.getRequest().getRealPath("/graphs");

Используется устаревший метод ServletRequest.getRealPath, но он все равно должен работать, хотя RequestContextHolder работает только в том случае, если выполняется потоком запроса.

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