2010-10-06 97 views
0

我試圖在jsp中顯示動態數據。爲此,我使用jsp表達式在jsp中調用java方法。這個java方法花了很多時間,但它返回了一些值(我不能減少方法執行時間)。 但是我的jsp顯示空白。 任何人都可以解釋是什麼原因以及如何解決。 此代碼不是由我寫的但我需要找出根本原因。無法顯示jsp

我的JSP代碼看起來像

display.jsp 

     ..... hello......start... 

     <%= obj.getDynamicData() %>  

     .....completed .... end  
+0

+1 BalusC的評論在這裏。 – 2010-10-06 04:36:39

回答

2

因爲你(AB)使用JSP來執行一些原始的Java代碼,這是可能的。當發送JSP輸出的中途拋出異常時,JSP的剩餘部分不會再發送到瀏覽器。但是,網絡服務器無法將響應更改爲具有異常細節的錯誤頁面,並且網頁瀏覽器最終將以通常顯示爲空白頁的半烘焙HTML輸出結束。

任何未捕獲的異常通常會記錄到服務器的日誌文件中。您需要在服務器的日誌中查找異常和堆棧跟蹤,以便您可以修復問題的根本原因。例外包含有關問題原因的有價值的信息。

一個半烘焙的HTML頁面只是一個不完整的HTML頁面,導致瀏覽器無法理解如何正確顯示它。右鍵單擊瀏覽器中的頁面並選擇查看源文件。如果需要,在w3 validator的幫助下驗證它是否如預期的那樣。此外,可能值得在Firefox和Chrome等不同的(更好的)網頁瀏覽器中進行嘗試。當它已經收到極大的HTML <table>時,MSIE6/7即被稱爲窒息。它有一個糟糕的表格渲染引擎。


爲了救自己從這樣的後患,我建議移出所有的Java代碼到Servlet類,這樣就可以得到一個更友好(至少,這比在服務器的日誌文件挖掘更好)錯誤頁面,以防Java代碼中出現異常。另請參見How to avoid Java code in JSP?

+0

Java方法不會拋出任何異常。我能夠獲得方法返回值。但我不是在jsp中呈現 – Satya 2010-10-06 04:38:17

+0

症狀不然。你有沒有檢查服務器日誌?你在瀏覽器中檢查了檢索到的HTML輸出嗎?請注意,異常不一定在標準日誌文件中。檢查錯誤日誌文件。確切的文件名/位置取決於所使用的servletcontainer。 – BalusC 2010-10-06 04:39:26

+0

@Satya,如果你打印返回值的頁面沒有渲染,你怎麼知道你可以得到返回值? – 2010-10-06 04:45:22

1

基礎上提出in BalusC's answer的評論:

當我評論調用obj.getDynamicData(),jsp頁面呈現正常。

無論是兩件事情可能會發生:

  1. obj.getDynamicData()拋出未捕獲和處理異常
  2. 你的servlet容器/服務器可帶有某種「請求超時的配置「如果處理請求需要超過一定的時間,則關閉HTTP連接,並且obj.getDynamicData()需要很長時間才能執行,以便觸發此超時。

在代碼或JSP中是否有任何類型的日誌記錄,告訴您在此方法完成處理後服務器端會發生什麼情況?如果在瀏覽器停止等待請求/收到空白頁之後繼續從處理JSP請求的線程(和obj.getDynamicData())中看到日誌活動,那麼#2發生的強烈提示是。

爲了排除簡單的事情,你確定服務器實際上是返回一個空的響應,而不是你的瀏覽器顯示空白頁面,因爲服務器返回了一半的HTML頁面?請務必檢查View Source,使用類似Firebug的工具,和/或通過命令行工具(如 curlwget)在瀏覽器中執行相同的HTTP請求。