- JSP 基礎教程
- JSP - 首頁
- JSP - 概述
- JSP - 環境設定
- JSP - 架構
- JSP - 生命週期
- JSP - 語法
- JSP - 指令
- JSP - 動作
- JSP - 隱式物件
- JSP - 客戶端請求
- JSP - 伺服器響應
- JSP - HTTP 狀態碼
- JSP - 表單處理
- JSP - 編寫過濾器
- JSP - Cookie 處理
- JSP - 會話跟蹤
- JSP - 檔案上傳
- JSP - 處理日期
- JSP - 頁面重定向
- JSP - 點選計數器
- JSP - 自動重新整理
- JSP - 傳送郵件
- 高階 JSP 教程
- JSP - 標準標籤庫
- JSP - 資料庫訪問
- JSP - XML 資料
- JSP - Java Bean
- JSP - 自定義標籤
- JSP - 表示式語言
- JSP - 異常處理
- JSP - 除錯
- JSP - 安全性
- JSP - 國際化
- JSP 有用資源
- JSP - 問題與解答
- JSP - 快速指南
- JSP - 有用資源
- JSP - 討論
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。