Java (JSP) 项目的相对路径

标签 java hibernate jsp tomcat path

我正在寻找类似 request.getServletContext().getRealPath() 的东西在自定义类中使用(Hibernate 中的拦截器,它无法访问 request 对象)。

File file = new File("/photo/test.txt");
file.delete();

...上面的代码会失败,因为file的路径现在是Tomcat的/lib目录。

但我需要从项目开始计数,而不是 Tomcat。

有什么想法吗?

最佳答案

恕我直言,对您来说最简单的方法是在 web.xml 中声明的 ServletContextListener 中或通过 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");

关于Java (JSP) 项目的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559723/

相关文章:

java - 将下拉列表和文本框中的值传递给 JSP 中的 JavaScript

java - 为什么java方法不支持多个返回值?

java - 嵌入式 Tomcat 8 - 错误 {org.apache.catalina.core.ContainerBase} - 子容器在启动期间失败

java - 修改本地 vars 会在 vars 之外发生变化吗?

hibernate - 使用 Maven 从现有数据库生成 JPA2 实体

java - spring-data postgres 事务隔离问题

java - 如何获取之前返回对象给Servlet的请求表单?

java - 停止无限循环 Runnable 从 ThreadPool 运行

java - 模糊 'StringIndexOutOfBoundsException"

mysql - Unicode 在 Java EE 6 Openshift MySQL 中显示不正确