以下內容引用自http://wiki.jikexueyuan.com/project/jsp/debugging.html:
一、使用System.out.println()
System.out.println()在測試中作為一個標記很容易使用,不管某段代碼是否被執行。也可以輸出變量值。另外:
-
由於System對象是Java對象核心的一部分,它可以在任何地方被使用而不需要安裝額外的類。這包括Servlets,JSP,RMI,EJB's,ordinary Beans和classes,和獨立的應用程序。
- 與停在斷點相比較,寫到System.out中並沒有對應用程序正常的執行流產生過多的干擾,當時間至關重要時,這使得它非常有價值。
下面是使用System.out.println()的語法:
System.out.println("Debugging message");
下面是使用System.out.println()的一個簡單的例子:
<%@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,它將會在瀏覽器上產生以下的結果:

如果使用的是Tomcat,還將發現這些行會被附加到日志目錄里stdout.log文件的末尾。

這樣可以把變量和其他信息打印到系統日志中,可以分析找到問題的根本原因或者其他各種原因。
二、使用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文件的一個快照:

可以通過使用方便的函數發送各種級別的消息,如severe(),warning(),info(),config(),fine(),finer()和finest()。這里,finest()方法可以用於記錄最好的信息,severe()方法可以用於記錄嚴峻的消息。
可以使用Log4J Framework在不同的文件中根據消息的嚴重水平和重要性來記錄他們。
三、調試工具
Eclipse是一個免費和開源的Java集成開發環境,支持獨立的Java應用程序和Web應用程序的開發,支持JSP和Servlet規范,也包括一個JSP調試器。
Eclipse支持以下基本的調試功能:
-
斷點
-
單步調試
- 監視點
可以參考Eclipse文檔來了解上面的調試功能。
四、使用JDB調試器
可以使用用來調試小程序和應用程序相同的jdb命令來調試JSP和Servlets 。
為了調試JSP和Servlets,可以調試sun.servlet.http.HttpServer,然后在來自瀏覽器的HTTP請求的響應里查看HttpServer正在執行的JSP/Servlets。這和如何調試小程序非常相似。不同不處是,在小程序里,真正的程序是在sun.applet.AppletViewer里調試的。
大多數調試器通過自動得知如何調試小程序來隱藏這些細節。直到它們對JSP做着同樣的操作,必須幫助調試器執行以下操作:
-
設置調試器的類路徑,以便於找到sun.servlet.Http-Server和與其相關的類。
- 設置調試器的類路徑,以便於找到JSP和支持的類,典型的是ROOT\WEB-INF\classes。
一旦已經正確的設置了類路徑,開始調試sun.servlet.http.HttpServer。對於一個給定的JSP,可以感興趣的任何地方設置斷點,然后通過一個Web瀏覽器來發送一個請求到HttpServer (http://localhost:8080/JSPToDebug)。會看到執行設置的斷點處停止。
詳細參考:http://www.jianshu.com/p/c11ad97d5bec
五、使用注釋
代碼中的注釋可以用不同的方法幫助調試過程。注釋可以用於調試過程的很多其他方面。
JSP使用Java命令和單線(//...)和多線(/*...(/)命令,可以暫時刪除Java代碼的一部分。如果錯誤消失,仔細看看代碼注釋並找出問題所在。
六、客戶端和服務器端頭文件
有時,當一個JSP表現的不像預期的那樣,查看一下原始的HTTP請求和響應是非常有用的。如果熟悉HTTP的結構,可以讀取請求和響應,看看那些頭文件中到底是社么信息。
七、重要的調試技巧
這里是一些關於JSP調試的調試技巧:
-
向瀏覽器查看它顯示的頁面的原始內容。這可以幫助識別格式問題。它通常是視圖菜單下的一個選項。
- 確保瀏覽器不會通過強迫一個完全加載的頁面來緩存先前的請求的輸出。在 Internet Explorer,使用Shift-Refresh。(Ctrl+F5)
測試工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test23
