Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP:具有相对路径的FileReader引发FileNotFoundException_Java_Jsp_Servlets - Fatal编程技术网

Java JSP:具有相对路径的FileReader引发FileNotFoundException

Java JSP:具有相对路径的FileReader引发FileNotFoundException,java,jsp,servlets,Java,Jsp,Servlets,我有一些嵌入的Java代码,我试图在其中加载一个属性文件,该文件与JSP文件位于同一文件夹中: Properties titles = new Properties(); titles.load(new FileReader("titles.txt")); 上面的代码引发FileNotFoundException 在这种情况下,如何准确地引用“当前文件夹”?通过使用加载类的类加载器,您可以轻松地获取文件 getClass().getClassLoader().getResourceAsStre

我有一些嵌入的Java代码,我试图在其中加载一个属性文件,该文件与JSP文件位于同一文件夹中:

Properties titles = new Properties();
titles.load(new FileReader("titles.txt"));
上面的代码引发FileNotFoundException


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

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

getClass().getClassLoader().getResourceAsStream("titles.txt");
然而,我不知道它是否能与JSP一起工作

您也可以使用ServletContext.getResourceAsStream(“”),但是您必须给出完整的webcontent相对路径。

两件事:

  • JSP不应该包含java代码。使用mvc框架(SpringMVC、stripes等)作为控制器,并仅将JSP用作视图。这让生活变得容易多了
  • 您不应该通过web应用程序中的文件系统访问资源文件,请使用classloader access。问题是web应用程序可能会也可能不会在文件系统上解包,这取决于servlet容器
  • 我看到的主要问题是,您无法对路径是什么做出任何有效的假设,因为您不知道编译的JSP在哪里


    因此:创建一个控制器类,将属性文件放在同一文件夹中,并通过
    getClass().getClassLoader().getResourceAsStream(“titles.txt”)从控制器类加载它

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

    通过调用
    servletContext.getRealPath(“/relative/path/to/file.txt”)

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


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

    是的,我也在考虑这一点,可能是JSP被编译而资源找不到的问题。当然,你在第一点上完全正确!!!最后一个不是真的。它只接受webcontent相对路径。相关:FileReader需要绝对路径。不,没有。这里的问题是,执行JSP时的当前目录不是由JSP本身的任何属性决定的,因此相对于JSP定位文件是没有意义的。