JSP - 除錯



在本章中,我們將討論 JSP 的除錯。測試/除錯 JSP 和 servlet 總是很困難的。JSP 和 Servlet 往往涉及大量的客戶端/伺服器互動,這使得錯誤很可能發生,但難以重現。

以下是一些可能有助於您除錯的提示和建議。

使用 System.out.println()

System.out.println() 作為標記來測試某些程式碼是否正在執行非常容易使用。我們還可以打印出變數值。請考慮以下其他要點:

  • 由於 System 物件是核心 Java 物件的一部分,因此可以在任何地方使用它,而無需安裝任何額外的類。這包括Servlet、JSP、RMI、EJB、普通 Bean,以及獨立應用程式

  • 與在斷點處停止相比,寫入System.out 不會過多地干擾應用程式的正常執行流程,這使得在時間至關重要時它非常有價值。

以下是使用System.out.println() 的語法:

System.out.println("Debugging message");

以下示例顯示瞭如何使用System.out.print()

<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<html>
   <head><title>System.out.println</title></head>
   <body>
      <c:forEach var = "counter" begin = "1" end = "10" step = "1" >
      
         <c:out value = "${counter-5}"/></br>
         <% System.out.println( "counter = " + pageContext.findAttribute("counter") ); %>
      </c:forEach>
      
   </body>
</html>

訪問上面的 JSP,瀏覽器將顯示以下結果:

-4
-3
-2
-1
0
1
2
3
4
5

如果您使用的是 Tomcat,您還將在日誌目錄中的stdout.log末尾找到這些行。

counter = 1
counter = 2
counter = 3
counter = 4
counter = 5
counter = 6
counter = 7
counter = 8
counter = 9
counter = 10

這樣,您可以將變數和其他資訊引入系統日誌,這些資訊可以被分析以找出問題的根本原因或出於各種其他原因。

使用 JDB 日誌記錄器

J2SE 日誌記錄框架旨在為在 JVM 中執行的任何類提供日誌記錄服務。我們可以利用此框架來記錄任何資訊。

讓我們使用 JDK 日誌記錄器 API 重寫上面的示例:

<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@page import = "java.util.logging.Logger" %>

<html>
   <head><title>Logger.info</title></head>
   
   <body>
      <% Logger logger = Logger.getLogger(this.getClass().getName());%>

      <c:forEach var = "counter" begin = "1" end = "10" step = "1" >
      <c:set var = "myCount" value = "${counter-5}" />
      <c:out value = "${myCount}"/></br>
         <% String message = "counter = "
            + pageContext.findAttribute("counter") + "myCount = "
            + pageContext.findAttribute("myCount");
            logger.info( message );
         %>
      </c:forEach>
      
   </body>
</html>

以上程式碼將在瀏覽器和 stdout.log 中生成類似的結果,但您將在stdout.log中獲得其他資訊。我們將使用日誌記錄器的info方法,並且僅出於資訊目的記錄訊息。以下是 stdout.log 檔案的快照:

24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 1 myCount = -4
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 2 myCount = -3
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 3 myCount = -2
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 4 myCount = -1
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 5 myCount = 0
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 6 myCount = 1
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 7 myCount = 2
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 8 myCount = 3
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 9 myCount = 4
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 10 myCount = 5

可以透過使用便利函式severe()、warning()、info()、config()、fine()、finer()finest() 來發送不同級別的訊息。這裡 finest() 方法可以用來記錄最精細的資訊,而 severe() 方法可以用來記錄嚴重的資訊。

您可以使用Log4J 框架根據訊息的嚴重級別和重要性將訊息記錄到不同的檔案中。

除錯工具

NetBeans 是一個免費的開源 Java 整合開發環境,支援開發獨立的 Java 應用程式和 Web 應用程式,支援 JSP 和 servlet 規範,並且還包括一個 JSP 偵錯程式。

NetBeans 支援以下基本除錯功能:

  • 斷點
  • 單步執行程式碼
  • 觀察點

您可以參考NetBeans 文件以瞭解上述除錯功能。

使用 JDB 偵錯程式

您可以使用與除錯 applet 或應用程式相同的jdb命令來除錯 JSP 和 servlet。

要除錯 JSP 或 servlet,您可以除錯sun.servlet.http.HttpServer,然後觀察 HttpServer 如何響應我們從瀏覽器發出的 HTTP 請求來執行 JSP/servlet。這與除錯 applet 非常相似。區別在於,對於 applet,正在除錯的實際程式是sun.applet.AppletViewer

大多數偵錯程式透過自動知道如何除錯 applet 來隱藏此細節。在他們對 JSP 做同樣的事情之前,您必須透過考慮以下事項來幫助您的偵錯程式:

  • 設定偵錯程式的類路徑。這有助於您找到sun.servlet.http.Http-Server 和相關的類。

  • 設定偵錯程式的類路徑。這有助於您找到您的 JSP 和支援類,通常是ROOT\WEB-INF\classes

設定好正確的類路徑後,開始除錯sun.servlet.http.HttpServer。您可以在您感興趣的任何 JSP 中設定斷點,然後使用 Web 瀏覽器向 HttpServer 發出對給定 JSP 的請求(https://:8080/JSPToDebug)。這裡的執行在斷點處停止。

使用註釋

程式碼中的註釋可以以多種方式幫助除錯過程。註釋可以在除錯過程中以多種其他方式使用。

JSP 使用 Java 註釋,並且單行 (// ...)多行 (/* ... */) 註釋可用於暫時刪除 Java 程式碼的部分。如果錯誤消失了,仔細檢視您剛剛註釋掉的程式碼並找出問題所在。

客戶端和伺服器標頭

有時,當 JSP 的行為與預期不符時,檢視原始 HTTP 請求和響應很有用。如果您熟悉 HTTP 的結構,您可以閱讀請求和響應,並檢視這些標頭到底發生了什麼。

重要的除錯技巧

以下是有關 JSP 除錯的一些更多除錯技巧:

  • 要求瀏覽器顯示它正在顯示的頁面的原始內容。這可以幫助識別格式問題。通常在“檢視”選單下有一個選項。

  • 透過強制完全重新載入頁面來確保瀏覽器沒有快取先前請求的輸出。使用Netscape Navigator,使用Shift-Reload;使用Internet Explorer,使用Shift-Refresh

廣告

© . All rights reserved.