【问题标题】:Cannot read file data from jsp file on remote server无法从远程服务器上的 jsp 文件中读取文件数据
【发布时间】:2016-10-19 19:13:12
【问题描述】:

我的动态网络项目具有以下结构。

WebContent/WEB-INF/jsps/index.jsp。我正在尝试从我的 jsp 文件中访问 file.txt 并显示该文件中的内容。 file.txt 位于 WebContent/resources 文件夹中。

我正在使用,

String jspPath = session.getServletContext().getRealPath("/resources"); jspPath = jspPath.replace("\\", "/"); String fileName = "/file.txt"; String txtFilePath = jspPath + fileName;

打开文件后,代码显示内容。

它在本地主机上工作,但是当我在线上传它时,它没有在 jsp 页面上显示文本文件中的内容。

我不明白为什么它不起作用,我认为文件路径可能是一个问题,因为它抛出了 FileNotFoundException 但我通过进行一些更改来修复它。现在它不显示内容。有人可以帮忙吗?我正在为 .war 文件使用 openshift 部署平台。

【问题讨论】:

  • 使用文件路径读取部署在服务器中的文件不是一个好主意。不同的机器使用不同的文件系统,一些应用服务器压缩部署的内容。为什么不使用更好的 getClass().getResource("/resources/file.txt") ?
  • 我已经尝试过了,但它给出了这个错误:org.apache.jasper.JasperException: Unable to compile class for JSP。
  • 您的代码似乎错误或您忘记了某些导入。如果您将文件作为流读取,请检查您是否包含 无论如何,您确定要将这个逻辑放入 jsp 中吗?用jsp写java代码已经过时了,有很简单的办法。

标签: java jsp openshift


【解决方案1】:

实际上,您上面的 JSP 页面将永远不会被执行,因为它位于最终用户无法访问的 WEB-INF 文件夹中,因此请确保将您的 JSP 放在 WEB-INF 之外。
为了读取文件,您可以以更简单的方式加载和打印文件:

<%@page import="java.io.*"%>
<% 
InputStream in=config.getServletContext().getResourceAsStream("/resources/hello.txt");
int ch;
while((ch=in.read())!=-1){
    out.print((char)ch);
}
in.close();
%>

由于上述调用getRealPath 的方法不适用于使用JBoss 等虚拟文件系统的应用程序服务器。

注意:为了获得更好的性能,您可以使用其他读取文件的方法来包含(例如缓冲和缓存),但这超出了本问题的范围。

【讨论】:

  • 我正在使用 spring 并使用控制器和视图解析器显示 jsp 页面。所有的 jsp 文件都在 WEB-INF/jsps 文件夹中,它们在我的机器上运行良好。此外,所有其他 jsp 文件在 openshift 服务器上都可以正常工作,但是打开文本文件的一个 jsp 文件没有从文本文件中读取内容并显示它。正在显示该 jsp 页面的所有静态内容,但未显示来自文本文件的数据。
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 2023-03-05
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多