在 Eclipse Luna 中,我在 Apache Tomcat 8.0 上有一个动态 Web 项目(具有默认build设置)。在项目中,我有一个 JSP loader.jsp
,它调用 Java 类 FileLoader
中的一个方法,返回一个 String
值作为位置一个非配置的 txt 文件(我们称之为 key.txt)。
我的问题是,当 FileLoader
尝试获取 key.txt
并返回其位置时,我获取的文件位置为空值。
这是我尝试过但失败了的想法:
在 FileLoader
构造函数中,我将 String "key.txt"
作为值传递给它,它有一个名为 get getKeyPath()
的方法返回文件路径。我在 getKeyPath()
中使用以下内容来获取文件路径:
String path = this.getClass().getClassLoader().getResource("key.txt").getFile();
路径变量返回给调用对象。以下是我在 loader.jsp
中调用 getKeyPath()
的方式:
String keyPath = new FileLoader("key.txt").getKeyPath();
我的问题是,当 getKeyPath()
尝试设置路径值时,FileLoader
中抛出了一个 NullPointerException
。我迷路了,因为无论我将物理“key.txt”放在我的项目目录中的什么位置,还是放在我的项目应该识别的文件路径中,都会发生这种情况。在我的项目中,我在以下路径中使用 key.txt 尝试了上述代码(假设我的项目在 Eclipse 中的根文件夹称为 PRO):
PRO/build/classes
PRO/build
PRO/WebContent/WEB-INF/lib
PRO/WebContent(where loader.jsp is located)
PRO/Java Resources/src (Tomcat Install)
Dir>/lib /bin
对于所有尝试,我都得到了相同的 NullPointerException
。在求助于 Tomcat 目录后,我意识到我需要帮助。
我还需要做些什么才能以我想要的方式加载“key.txt”吗?我这样做完全错了吗?如果这样可以更轻松地回答这个问题,我可以发布屏幕截图。
顺便说一句,由于应用程序要求,我希望 loader.jsp
不直接加载 key.txt。当然,如果我的尝试无法实现,我将不得不这样做。
请注意,我试图在 Eclipse 动态 Web 项目中执行此操作,因此没有像标准 Java 项目那样的“bin”文件夹。最后,我不想在 Eclipse 中进行任何构建配置更改,但如果必须的话,我当然会这样做。
最佳答案
将方法的初始化和调用分成两行。
问题不在于文件未加载,而是在调用 .getKeyPath();
时未完成对象初始化,而 NullPointer
的原因/p>
所以改成这样:
FileLoader FileLoader fileLoader = new FileLoader("key.txt");
String keyPath = fileLoader.getKeyPath();
关于java - Tomcat 8.0中运行的JSP如何加载非Config文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735972/