【问题标题】:JSP exception, "quote symbol expected"JSP 异常,“需要引号”
【发布时间】:2011-12-22 19:46:06
【问题描述】:
<%@ page import="java.util.*" %>
<html>
<body>
<h1 align="center">blablalblalblab</h1>
<p>
<%
List styles = (List)request.getAttribute("styles");
Iterator it = styles.iterator();
while(it.hasNext()) {
    out.print("<br>try: " + it.next());
}
%>
</p>
</body>
</html>

在执行我的 servlet 请求后出现错误

org.apache.jasper.JasperException: /result.jsp (line: 1, column: 18) 需要引用符号 org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)

找不到任何不在正确位置的引号。

【问题讨论】:

  • 我认为您实际上并没有运行问题中的代码。
  • @axtavt 为我提供了正确的答案!使用直引号而不是弯引号。

标签: java html jsp tomcat servlets


【解决方案1】:

确保所有引号都是直引号,而不是弯引号。

【讨论】:

  • 可能与此有关。第一个引号似乎在第 17 列,但该文件可能有一个奇怪的编码或其他东西。查看文件的十六进制转储会很有趣。
  • 这对我来说是正确的答案!我只是在做一个教程,而在知识如此之少的情况下,其他答案毫无意义。这对我有用。
【解决方案2】:

请不要在 JSP 中使用 Java。这就是标准标签库的用途。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<body>
<h1 align="center">blablalblalblab</h1>
<p>
  <c:forEach items="${styles}" var="style">
    <br>try: ${style}
  </c:forEach>
</p>
</body>
</html>

更详细:

  1. 在 JSP 中嵌入 Java 代码会使页面难以阅读(JSP 是一种面向标记的语言)、难以维护和调试。
  2. 标准标签库已经过调试,有丰富的文档和示例,并且可能已经做你想做的事了。
  3. 如果您确实有一些需要在 Java 中执行的逻辑并且不存在预先存在的标签,您可以 a) 将逻辑放在 bean 中并通过 JSTL 调用它,或者 b) 使用标签文件编写您自己的标签。

为什么Java 代码在bean 或标记库中比在JSP 中更好?

  1. 测试是一个很大的因素:可以测试bean和标签库 轻松地在运行的 servlet 环境之外。
  2. 标签库可重复使用,并且比 JSP 所包含的更加简洁。

【讨论】:

  • 尝试回答问题而不是威胁 OP。
  • 有时对问题的回答并非直接回应。使用 JSTL 方法迭代 JSP 中的列表,他将获得更大的成功。
  • @bmargulies 我不了解你,但如果我做的事情多年来一直被认为是不好的做法,我宁愿知道它,即使它不是答案我的直接问题。有时我不知道该问什么,或者是否有更好、更规范的方法。
  • 修改:很高兴both 回答事实问题并提供替代方案。
  • 然而我不能更同意 bmargulies。总是回答这个问题,它有多糟糕。例如,看看我的答案,我经常在不相关的注释上提到发布代码中的不良做法以及其他气味和漏洞。如果您无法回答问题,请发表评论。
【解决方案3】:

我猜你已经从某个地方复制粘贴了它,确保双引号是正确的。当我从 PDF 复制它时,我遇到了同样的问题,一旦我更正了我的双引号,它就得到了解决。

【讨论】:

    【解决方案4】:

    您的 JSP 在 Tomcat 6 上运行良好。因此,可能是某些与包含相关的问题,或者某些以前编译的类没有重新编译。

    尝试清理您的 Tomcat 工作目录,然后重试。

    【讨论】:

      【解决方案5】:

      如果你从某个地方复制了它,请检查“。因为”,我有同样的错误。

      false 两边的双引号是错误的。把它改成 " 就可以了。

      【讨论】:

        【解决方案6】:

        虽然我同意 Scott A 的告诫,即使用 JSTL 而不是将 Java 直接放入 JSP 中,但这个问题值得进一步探讨。我自己也是第一次遇到这个问题,不得不挖掘一下来回答它。

        从技术上讲,错误意味着它所说的。你在某处遗漏了一些引号。最简单的就是你的 h1 标签,如果它是这样的:


        而不是你所拥有的。

        显然,您粘贴的 sn-p 代码中没有任何内容缺少引号,因此我将探讨几件事。

        首先,您的 it.next() 的输出是什么样的?由于您正在拉入一个名为样式的列表,我想知道其中是否有什么东西让 jasper 认为这是一个样式标签,而不是您尝试呈现的文本。

        其次,我会探索 Pradeep 的答案,看看是否有一些微妙的粘贴问题在您将其粘贴到 stackoverflow 时得到了解决。具体来说,我会寻找“智能引号” IE 许多文本编辑器(包括 Outlook 和大多数办公室)喜欢在引用文本的正面和背面使用不同的引号。 浏览器

        '这是引用的文字'
        变成
        `这是引用的文字'

        这可能很难注意到。

        【讨论】:

          猜你喜欢
          • 2015-04-02
          • 2017-04-03
          • 1970-01-01
          • 2018-07-24
          • 1970-01-01
          • 1970-01-01
          • 2014-01-15
          • 2015-08-31
          • 1970-01-01
          相关资源
          最近更新 更多