JSP:具有相对路径的FileReader抛出FileNotFoundException

时间:2010-06-24 09:26:52

标签: java jsp servlets

我有一些嵌入式Java代码,我正在尝试加载与JSP文件位于同一文件夹中的属性文件:

Properties titles = new Properties();
titles.load(new FileReader("titles.txt"));

上面的代码抛出FileNotFoundException。

在这种情况下,如何引用“当前文件夹”?

3 个答案:

答案 0 :(得分:4)

两件事:

  1. JSP不应包含java代码。使用mvc框架(spring mvc,stripe等)作为控制器,并仅使用JSP作为视图。这让生活变得更轻松
  2. 您不应该通过Web应用程序中的文件系统访问资源文件,请使用classloader访问as suggested by redlab。问题是Web应用程序可能会也可能不会在文件系统上解压缩,这取决于servlet容器
  3. 我看到的主要问题是你不能对路径做出任何有效的假设,因为你不知道编译的JSP在哪里

    所以:创建一个控制器类,将属性文件放在同一个文件夹中,然后通过getClass().getClassLoader().getResourceAsStream("titles.txt");

    从控制器类中加载它

答案 1 :(得分:3)

FileReader需要绝对路径,或者相对于运行java的位置。但对于Web应用程序,这通常是通过/etc/init.d/tomcat startup完成的,您不能依赖于当前目录。

您可以致电servletContext.getRealPath("/relative/path/to/file.txt")

获取申请的绝对路径

您可以通过调用request.getRequestURL()来获取网址的相对部分。

也就是说,你最好在servlet中使用这个代码,而不是JSP - JSP是一种视图技术,逻辑不应放在其中。

答案 2 :(得分:1)

通过使用加载类的类加载器,您可以轻松获取文件。

getClass().getClassLoader().getResourceAsStream("titles.txt");

但是我不知道它是否适用于JSP

您也可以使用ServletContext.getResourceAsStream(""),但是您必须提供完整 webcontent-relative路径。