我有一个JSP,它从会话对象中获取Arraylist
并从中删除项目。当我导航到那个页面时,它看起来工作得很好而且无处不在,页面是空白的。我检查了Tomcat日志文件和catalina.out我收到了一个JasperException
,它显示它在一行上有以下
for(int i; i < agentItems.size(); i++)
agentItems
是我正在使用的ArrayList
的名称。我一直在调试它,似乎无法弄清楚问题可能是什么。我已经读过JasperException
作为JSP的NullPointerException
被抛出。这是真的还是我完全忽略了这个问题?
我让Web应用程序在本地计算机和中间服务器上运行以进行开发,其中两者都没有遇到任何问题。为什么只有在这台服务器上它才能给我带来问题?
答案 0 :(得分:3)
那可以是一切。您需要在堆栈跟踪中进一步查看,查看caused by
或root 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)
jasperexception
,此处可能无法访问agentItems
。尝试提供完全限定的类名或以其他方式导入包。