【问题标题】:A simple file reading issue using JSP tags使用 JSP 标签的简单文件读取问题
【发布时间】:2011-06-08 13:49:27
【问题描述】:

我在 Java 中创建了一个 JSP Tag Handler 类,并在 .tld 文件中的 XML 中定义了它。 在我的 .jsp 文件中,我声明了标签并定义了它的属性——其中之一是要读取的文件的路径。

当将虚拟路径传递给 ServletContext 的 getRealPath 方法时,它会返回这个奇怪的、不存在的文件路径。当我试图直接将真实文件路径直接传递给标签时,它给了我一些奇怪的“拒绝访问”消息。

让我更困惑的是,我设法完成了同样的事情没有标签,但让 HttpServlet 自己处理所有工作。 HttpServlet执行这个任务没有问题,但是jsp标签类不行,不知道为什么。

在 IO 任务和编写自定义 java 标签方面有任何经验的人可以帮我解决这个问题吗?

更新:

这是我网站的文件目录的样子(其中“..”表示该目录中还有其他未显示的文件和文件夹)。另请注意,使用“”会导致该论坛上的文本消失,因此我无法使用它们为目录指定通用标签,但所有大写字母实际上并不是目录:

ROOT/Accounts/..(位置 登录.jsp)

ROOT/data/..(位置 要读取的数据文件)

ROOT/..(其他 文件夹)

由于该项目在 Eclipse 中被命名为“Epsilon”,因此这些目录中任一目录的生成 URL 为:

http://localhost:8080/Epsilon/Accounts/..

http://localhost:8080/Epsilon/data/..

http://localhost:8080/Epsilon/..

在jsp文件中,我定义如下:

<tags:HeaderContent path="/data/header.markup" id="topMenu"></tags:HeaderContent>

*注意属性“path”,因为它真的很重要!

在 Java 类中,在 doStartTag() 方法中,我有以下内容:

        ServletContext context = pageContext.getServletContext();
        JspWriter out = pageContext.getOut();
        String realPath = context.getRealPath(context.getContextPath()
                + path);
        out.println(getHeaderContent(realPath).toString());

context.getContextPath()path 变量最终都是

“/Epsilon/data/header.markup”。

我将这两个连接的字符串作为参数传递给 ServletContext 对象的 getRealPath 方法。 realPath 字符串的结果如下:

“Z:\Dropbox\workspaces\Sites.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\Epsilon\Epsilon\data\header.markup”

我真的不知道为什么它返回了元数据文件夹,但这不是文件实际所在的位置。而且,正如我之前提到的,HttpServlet 没有遇到同样的问题,但 JSP 标记的类却遇到了。

【问题讨论】:

  • 写成标签处理程序或servlet应该没有任何区别,最后一切都是java代码......发布代码
  • 您的评论没有达到您的预期,我们看不到您所说的文件目录。最好的选择是使用更多信息编辑您的问题。

标签: java jsp jsp-tags


【解决方案1】:

您不应在getRealPath() 调用中包含上下文路径。上下文路径仅在 URL 中表示,而不在本地磁盘文件系统中表示。 getRealPath() 需要一个相对于网络内容根目录的相对本地磁盘文件系统路径。

context.getRealPath(path);

至于为什么它位于 Eclipse 的元数据文件夹中,那只是因为您从 Eclipse 内部部署和运行了它。这不应该有害,这正是getRealPath() 应该注意的。

【讨论】:

  • 谢谢。我自己已经弄清楚了,但这正是我一开始遇到问题的原因。我使用上下文路径的全部理由是,因为我的 JSP 文件位于我网站的子目录中。最初我尝试在文件路径之前放置“../”以表明它位于另一个目录中。当这导致错误时,我认为添加上下文路径会有所帮助,但这仍然会导致错误。事实证明,我什至不需要担心这一点——我可以像从根目录一样编写文件路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2012-10-14
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多