【问题标题】:What are the possible causes of JasperExceptionJasperException 的可能原因有哪些
【发布时间】:2010-04-30 02:26:08
【问题描述】:

我有一个 JSP,它从会话对象中获取 Arraylist 并从中删除项目。它似乎工作正常,然后当我导航到该页面时,页面是空白的。我检查了 Tomcat 日志文件,在 catalina.out 中我收到了一个 JasperException 它显示它与以下内容一致

for(int i; i < agentItems.size(); i++)

agentItems 是我正在使用的ArrayList 的名称。我一直在调试它,似乎无法弄清楚问题可能是什么。我读过JasperException 有时会作为JSP 的NullPointerException 抛出。这是真的还是我完全忽略了这个问题?

我的 Web 应用程序在本地机器和中间服务器上运行,它们都没有遇到任何问题。为什么只能在这台服务器上给我带来问题?

【问题讨论】:

    标签: java jsp tomcat


    【解决方案1】:

    这可以是一切。您需要进一步查看堆栈跟踪,查看caused byroot cause 部分以及随后的跟踪。它可能是由很多事情引起的。 JSP 基本上被编译成一个大的try 块,任何捕获的Throwable 都将被包装到一个servletcontainer 特定的异常中,例如Tomcat 和克隆中的JasperException。归结为:

    try {
        // All translated JSP code comes here. Max 64K.
    } catch (Throwable t) {
        throw new JasperException(t);
    }
    

    检查堆栈跟踪第一行中的.java 文件名,在servlet 容器的work 目录中找到它,然后在编辑器中打开文件。看到了吗?

    也就是说,使用 scriptlets 是一个bad practice。使用 Servlet 控制/预处理/后处理请求,使用 Javabeans 表示数据模型,使用 JSP 中的 Taglibs 控制页面流和输出,使用 JSP 中的表达式语言(EL)访问后端数据。在您的特定情况下,您可以使用 JSTL 的 c:forEach 标记遍历数组或 List

    <c:forEach items="${agents}" var="agent">
        <p>Agent: ${agent.name}
    </c:forEach>
    

    【讨论】:

      【解决方案2】:

      jasperexception 也可能发生在 JSP 无法访问它从外部获取的元素或项目时,而这里它可能无法访问 agentItems。尝试提供完全限定的类名或以其他方式导入包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 2018-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-23
        相关资源
        最近更新 更多