【问题标题】:Java (JSP) relative path to the project项目的 Java (JSP) 相对路径
【发布时间】:2014-08-24 22:23:15
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

  • /photos 将来自文件系统的根目录,您的意思是从项目中计数
  • 我的意思是使路径相对于我的站点的根目录,在这种情况下是 jsp 项目
  • @alfasin,好像没有。我的 webapp 没有部署在 tomcat 实例中,这可能是原因吗?
  • 在寻求帮助时提供问题中的所有相关信息会很好!我想您仅因为对答案的评论而无法访问请求。因为在 Spring 中,拦截器确实可以访问请求和响应......你至少可以确认(或拒绝?),如果可能的话,用它更新你的问题。因为当然还有其他解决方案,具体取决于您的需求。

标签: java hibernate jsp tomcat path


【解决方案1】:

恕我直言,最简单的方法是在 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");

【讨论】:

  • 正是这个。谢谢!
【解决方案2】:

getRealPath 将返回从根及以后的路径。

您应该改用上下文路径。

看看this thread

尝试使用

request.getServletContext().getContextPath();

【讨论】:

  • 请编辑您的问题,以便在您的回答中提供其他 Q/A 的有用部分(这不是本网站的主题)。此处不接受仅链接的答案。
  • 它们实际上与同一个问题有关。是否有任何特定方法可以将堆栈线程链接到答案?我正在编辑它。
  • 伙计们,我告诉过你我正在寻找像你提到的那样在类 aka 拦截器中使用的东西。由于多种原因,我无法将请求参数传递给它,所以我想知道是否有其他解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2020-10-15
相关资源
最近更新 更多