JasperException的可能原因是什么?

时间:2010-04-30 02:26:09

标签: java jsp tomcat

我有一个JSP,它从会话对象中获取Arraylist并从中删除项目。当我导航到那个页面时,它看起来工作得很好而且无处不在,页面是空白的。我检查了Tomcat日志文件和catalina.out我收到了一个JasperException,它显示它在一行上有以下

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

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

我让Web应用程序在本地计算机和中间服务器上运行以进行开发,其中两者都没有遇到任何问题。为什么只有在这台服务器上它才能给我带来问题?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:0)

当JSP无法访问从外部获取的元素或项目时,也可能发生

jasperexception,此处可能无法访问agentItems。尝试提供完全限定的类名或以其他方式导入包。