Я ищу что-то вроде request.getServletContext().getRealPath()
для использования внутри настраиваемого класса (перехватчик в Hibernate, который не имеет доступа к объекту request
).
File file = new File("/photo/test.txt");
file.delete();
... выше код не будет работать, потому что путь к file
- это /lib
каталог Tomcat.
Но мне нужно начать отсчет с проекта, а не с Tomcat.
Есть идеи?
ИМХО - самый простой способ для вас - получить корень вашего приложения в ServletContextListener
объявленный в web.xml или через аннотацию WebListener
и сохранить его в статической переменной.
public class RootPathHolder implements ServletContextListener {
static String rootPath;
public void contextInitialized(ServletContextEvent sce) {
RootServletListener.rootPath = sce.getServletContext().getRealPath("/");
}
public void contextDestroyed(ServletContextEvent sce) {
}
public static String getRootPath() {
return rootPath;
}
}
Таким образом, у вас будет доступ к корневому пути вашего приложения из любого места как RootPathHolder.getRootPath()
и в вашем перехватчике вам нужно будет только выполнить конкатенацию пути:
Path realPath = Paths.get(RootPathHolder.getRootPath(), "photo/test.txt");
getRealPath вернет путь от корня и дальше.
Вместо этого вы должны использовать контекстный путь.
Взгляните на эту тему
попробуй использовать
request.getServletContext().getContextPath();
/photos
будут из корня файловой системы, что вы подразумеваете под счетом из проекта