要測試/調試一個JSP或servlet程序老是那麼的難。JSP和Servlets程序趨向於牽涉到大量客戶端/服務器之間的交互,這頗有可能會產生錯誤,而且很難重現出錯的環境。html
接下來將會給出一些小技巧和小建議,來幫助您調試程序。java
System.out.println()能夠很方便地標記一段代碼是否被執行。固然,咱們也能夠打印出各類各樣的值。此外:apache
接下來給出了使用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>
如今,若是運行上面的例子的話,它將會產生以下的結果:網絡
-4 -3 -2 -1 0 1 2 3 4 5
若是使用的是Tomcat服務器,您就可以在logs目錄下的stdout.log文件中發現多出了以下內容:app
counter=1 counter=2 counter=3 counter=4 counter=5 counter=6 counter=7 counter=8 counter=9 counter=10
使用這種方法能夠將變量和其它的信息輸出至系統日誌中,用來分析並找出形成問題的深層次緣由。框架
J2SE日誌框架可爲任何運行在JVM中的類提供日誌記錄服務。所以咱們能夠利用這個框架來記錄任何信息。jsp
讓咱們來重寫以上代碼,使用JDK中的 logger 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文件中。在這咱們使用了logger中的info方法。下面咱們給出stdout.log文件中的一個快照:
24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=1 myCount=-4 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=2 myCount=-3 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=3 myCount=-2 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=4 myCount=-1 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=5 myCount=0 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=6 myCount=1 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=7 myCount=2 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=8 myCount=3 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=9 myCount=4 24-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=10 myCount=5
消息可使用各類優先級發送,經過使用sever(),warning(),info(),config(),fine(),finer(),finest()方法。finest()方法用來記錄最好的信息,而sever()方法用來記錄最嚴重的信息。
使用Log4J 框架來將消息記錄在不一樣的文件中,這些消息基於嚴重程度和重要性來進行分類。
NetBeans是樹形結構,是開源的Java綜合開發環境,支持開發獨立的Java應用程序和網絡應用程序,同時也支持JSP調試。
NetBeans支持以下幾個基本的調試功能:
詳細的信息能夠查看NetBeans使用手冊。
能夠在JSP和servlets中使用jdb命令來進行調試,就像調試普通的應用程序同樣。
一般,咱們直接調試sun.servlet.http.HttpServer 對象來查看HttpServer在響應HTTP請求時執行JSP/Servlets的狀況。這與調試applets很是類似。不一樣之處在於,applets程序實際調試的是sun.applet.AppletViewer。
大部分調試器在調試applets時都可以自動忽略掉一些細節,由於它知道如何調試applets。若是想要將調試對象轉移到JSP身上,就須要作好如下兩點:
設置好classpath後,開始調試sun.servlet.http.Http-Server 。您能夠在JSP文件的任意地方設置斷點,只要你喜歡,而後使用瀏覽器發送一個請求給服務器就應該能夠看見程序停在了斷點處。
程序中的註釋在不少方面都對程序的調試起到必定的幫助做用。註釋能夠用在調試程序的不少方面中。
JSP使用Java註釋。若是一個BUG消失了,就請仔細查看您剛註釋過的代碼,一般都能找出緣由。
有時候,當JSP沒有按照預約的方式運行時,查看未加工的HTTP請求和響應也是頗有用的。若是對HTTP的結構很熟悉的話,您能夠直接觀察request和response而後看看這些頭模塊到底怎麼了。
這裏咱們再透露兩個調試JSP的小技巧: