我正在尝试在jsp中显示动态数据。为此我使用jsp表达式在jsp中调用java方法。这个java方法花了很多时间,但它返回了一些值。(我不能减少方法执行时间。) 但我的jsp显示空白。 任何人都可以解释原因和解决方法。 这段代码不是我写的但是我需要找出根本原因。
我的jsp代码看起来像
display.jsp
..... hello......start...
<%= obj.getDynamicData() %>
.....completed .... end
答案 0 :(得分:2)
可能是因为您(ab)使用JSP来执行一些原始Java代码。当在发送JSP输出的过程中抛出异常时,JSP的残余将不再发送到浏览器。但是,网络服务器不能将响应更改为具有异常详细信息的错误页面,并且web浏览器最终将显示半页HTML输出,该输出通常显示为空白页。
任何未捕获的异常通常都会记录到服务器的日志文件中。您需要在服务器的日志中挖掘异常和堆栈跟踪,以便您可以解决问题的根本原因。例外包含有关问题原因的有价值信息。
半熟的HTML页面只是一个不完整的HTML页面,导致web浏览器无法理解如何正确显示它。在webbrowser中右键单击该页面,然后选择查看源。如有必要,请在w3 validator的帮助下验证是否符合预期。
此外,尝试使用Firefox和Chrome等不同(更好)的网络浏览器可能是值得的。众所周知,当MSIE6 / 7收到极大的HTML <table>
时,它会像这样窒息。它有一个糟糕的表渲染引擎。
为了避免这样的未来麻烦,我建议将所有Java代码移到Servlet类中,这样你就可以获得更友好(至少比挖掘服务器的日志文件更好)错误页面以防万一Java代码中的异常另请参阅How to avoid Java code in JSP?
答案 1 :(得分:1)
根据in BalusC's answer发表的评论:
当我评论对obj.getDynamicData()的调用时,jsp页面正确呈现。
两件事中的任何一件都可能发生:
obj.getDynamicData()
正在抛出未被捕获和处理的异常obj.getDynamicData()
需要很长时间才能执行正在触发此超时。您的代码或JSP中是否有任何类型的日志记录,告诉您在此方法完成处理后服务器端发生了什么?如果在浏览器停止等待请求/收到空白页后继续从处理JSP请求(和obj.getDynamicData()
)的线程中看到日志活动,那么强烈提示#2正在发生。
为了排除简单的事情,你确定服务器实际上是返回一个空的响应,而不是你的浏览器显示空白页面,因为服务器返回了半个HTML页面?请务必检查View Source
,使用Firebug之类的工具,和/或从命令行工具中执行与浏览器相同的HTTP请求,例如
curl或wget。