JSP XML语法错误:替换&lt; %%&gt;时出现JasperException使用<jsp:scriptlet> </jsp:scriptlet>

时间:2013-08-22 04:36:08

标签: java jsp tomcat servlets

jsp文件中的以下代码使用Apache Tomcat显示一个没有问题的网页:

<!DOCTYPE HTML>
<%@page import='java.util.*' %>
<%@page contentType='text/html' pageEncoding='UTF-8' %>
<html>
    <body>
        <%
            ArrayList<String> stringList = new ArrayList<String>();
            stringList.add("string A");
            stringList.add("string B");
            for (int i = 0; i < stringList.size(); i++){
            out.println("<p>"+stringList.get(i)+"</p>");
            }
        %>
    </body>
</html>

但是这个使用XML语法的代码会抛出JasperException,即使它与上面的相同,只是用JSP XML标记替换JSP标记:

<!DOCTYPE HTML>
<jsp:directive.page import='java.util.*' />
<jsp:directive.page contentType='text/html' pageEncoding='UTF-8' />
<html>
    <body>
        <jsp:scriptlet>
            ArrayList<String> stringList = new ArrayList<String>();
            stringList.add("string A");
            stringList.add("string B");
            for (int i = 0; i < stringList.size(); i++){
                out.println("<p>"+stringList.get(i)+"</p>");
            }
        </jsp:scriptlet>
    </body>
</html>

这引发了这个错误:

Aug 22, 2013 2:27:42 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception [/cftp2Error.jsp (line: 6, column: 17) Unterminated &lt;jsp:scriptlet&gt; tag] with root cause
org.apache.jasper.JasperException: /cftp2Error.jsp (line: 6, column: 17) Unterminated &lt;jsp:scriptlet&gt; tag
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:408)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:133)
...

有谁能告诉我我的XML JSP代码出错了吗?我正在使用Tomcat 7.0.34运行JDK1.7。 谢谢, 基思

3 个答案:

答案 0 :(得分:1)

您需要将文件内容括在<jsp:root></jsp:root>中,并且还要转义&lt;和&gt;字符,如:

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

             

        ArrayList&lt;String&gt; stringList = new ArrayList&lt;String&gt;();
        stringList.add("string A");
        stringList.add("string B");
        for (int i = 0; i &lt; stringList.size(); i++){
            out.println("<p>"+stringList.get(i)+"</p>");
        }

    </jsp:scriptlet>
</body>

答案 1 :(得分:0)

试试这段代码。 (注意:并使用迭代器迭代一个arraylist。)

<!DOCTYPE HTML>
<jsp:directive.page import='java.util.*' />
<jsp:directive.page contentType='text/html' pageEncoding='UTF-8' />
<html>
    <body>
        <jsp:declaration>
            ArrayList<String> stringList = new ArrayList<String>();
            stringList.add("string A");
            stringList.add("string B");
            for (int i = 0; i < stringList.size(); i++){
                out.println("<p>"+stringList.get(i)+"</p>");
            }
        </jsp:declaration>
    </body>
</html>

答案 2 :(得分:0)

事实证明,不应将用于JSP XML语法的标记用于手动编码(与&lt; %%&gt;标记不同,正如我在此页面上发现的那样: http://www.coderanch.com/t/475967/JSP/java/Strange-JSP-error-Invalid-Standard

让代码正常工作需要花费大量精力将所有实体字符(&lt;,&gt;,&amp;等)转换为其转义版本,并且需要大量额外的XML标记才能使其接受jsp XML标记。 干杯, 基思