如下內容引用自http://wiki.jikexueyuan.com/project/jsp/debugging.html:html
1、使用System.out.println()java
System.out.println()在測試中做爲一個標記很容易使用,無論某段代碼是否被執行。也能夠輸出變量值。另外:git
因爲System對象是Java對象核心的一部分,它能夠在任何地方被使用而不須要安裝額外的類。這包括Servlets,JSP,RMI,EJB's,ordinary Beans和classes,和獨立的應用程序。github
下面是使用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文件的末尾。服務器
這樣能夠把變量和其餘信息打印到系統日誌中,能夠分析找到問題的根本緣由或者其餘各類緣由。app
2、使用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在不一樣的文件中根據消息的嚴重水平和重要性來記錄他們。
3、調試工具
Eclipse是一個免費和開源的Java集成開發環境,支持獨立的Java應用程序和Web應用程序的開發,支持JSP和Servlet規範,也包括一個JSP調試器。
Eclipse支持如下基本的調試功能:
斷點
單步調試
能夠參考Eclipse文檔來了解上面的調試功能。
4、使用JDB調試器
可使用用來調試小程序和應用程序相同的jdb命令來調試JSP和Servlets 。
爲了調試JSP和Servlets,能夠調試sun.servlet.http.HttpServer,而後在來自瀏覽器的HTTP請求的響應裏查看HttpServer正在執行的JSP/Servlets。這和如何調試小程序很是類似。不一樣不處是,在小程序裏,真正的程序是在sun.applet.AppletViewer裏調試的。
大多數調試器經過自動得知如何調試小程序來隱藏這些細節。直到它們對JSP作着一樣的操做,必須幫助調試器執行如下操做:
設置調試器的類路徑,以便於找到sun.servlet.Http-Server和與其相關的類。
一旦已經正確的設置了類路徑,開始調試sun.servlet.http.HttpServer。對於一個給定的JSP,能夠感興趣的任何地方設置斷點,而後經過一個Web瀏覽器來發送一個請求到HttpServer (http://localhost:8080/JSPToDebug
)。會看到執行設置的斷點處中止。
詳細參考:http://www.jianshu.com/p/c11ad97d5bec
5、使用註釋
代碼中的註釋能夠用不一樣的方法幫助調試過程。註釋能夠用於調試過程的不少其餘方面。
JSP使用Java命令和單線(//...)和多線(/*...(/)命令,能夠暫時刪除Java代碼的一部分。若是錯誤消失,仔細看看代碼註釋並找出問題所在。
6、客戶端和服務器端頭文件
有時,當一個JSP表現的不像預期的那樣,查看一下原始的HTTP請求和響應是很是有用的。若是熟悉HTTP的結構,能夠讀取請求和響應,看看那些頭文件中究竟是社麼信息。
7、重要的調試技巧
這裏是一些關於JSP調試的調試技巧:
向瀏覽器查看它顯示的頁面的原始內容。這能夠幫助識別格式問題。它一般是視圖菜單下的一個選項。
測試工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test23