JSP 調(diào)試

jsp 調(diào)試

要測試/調(diào)試一個(gè)jsp或servlet程序總是那么的難。jsp和servlets程序趨向于牽涉到大量客戶端/服務(wù)器之間的交互,這很有可能會(huì)產(chǎn)生錯(cuò)誤,并且很難重現(xiàn)出錯(cuò)的環(huán)境。

接下來將會(huì)給出一些小技巧和小建議,來幫助您調(diào)試程序。

使用system.out.println()

system.out.println()可以很方便地標(biāo)記一段代碼是否被執(zhí)行。當(dāng)然,我們也可以打印出各種各樣的值。此外:

  • 自從system對象成為java核心對象后,它便可以使用在任何地方而不用引入額外的類。使用范圍包括servlets,jsp,rmi,ejb's,beans,類和獨(dú)立應(yīng)用。
  • 與在斷點(diǎn)處停止運(yùn)行相比,用system.out進(jìn)行輸出不會(huì)對應(yīng)用程序的運(yùn)行流程造成重大的影響,這個(gè)特點(diǎn)在定時(shí)機(jī)制非常重要的應(yīng)用程序中就顯得非常有用了。

接下來給出了使用system.out.println()的語法:

system.out.println("debugging message");

這是一個(gè)使用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>

現(xiàn)在,如果運(yùn)行上面的例子的話,它將會(huì)產(chǎn)生如下的結(jié)果:

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

如果使用的是tomcat服務(wù)器,您就能夠在logs目錄下的stdout.log文件中發(fā)現(xiàn)多出了如下內(nèi)容:

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

使用這種方法可以將變量和其它的信息輸出至系統(tǒng)日志中,用來分析并找出造成問題的深層次原因。

使用jdb logger

j2se日志框架可為任何運(yùn)行在jvm中的類提供日志記錄服務(wù)。因此我們可以利用這個(gè)框架來記錄任何信息。

讓我們來重寫以上代碼,使用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>

它的運(yùn)行結(jié)果與先前的類似,但是,它可以獲得額外的信息輸出至stdout.log文件中。在這我們使用了logger中的info方法。下面我們給出stdout.log文件中的一個(gè)快照:

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

消息可以使用各種優(yōu)先級(jí)發(fā)送,通過使用sever(),warning(),info(),config(),fine(),finer(),finest()方法。finest()方法用來記錄最好的信息,而sever()方法用來記錄最嚴(yán)重的信息。

使用log4j 框架來將消息記錄在不同的文件中,這些消息基于嚴(yán)重程度和重要性來進(jìn)行分類。

調(diào)試工具

netbeans是樹形結(jié)構(gòu),是開源的java綜合開發(fā)環(huán)境,支持開發(fā)獨(dú)立的java應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,同時(shí)也支持jsp調(diào)試。

netbeans支持如下幾個(gè)基本的調(diào)試功能:

  • 斷點(diǎn)
  • 單步跟蹤
  • 觀察點(diǎn)

詳細(xì)的信息可以查看netbeans使用手冊。

使用jdb debugger

可以在jsp和servlets中使用jdb命令來進(jìn)行調(diào)試,就像調(diào)試普通的應(yīng)用程序一樣。

通常,我們直接調(diào)試sun.servlet.http.httpserver 對象來查看httpserver在響應(yīng)http請求時(shí)執(zhí)行jsp/servlets的情況。這與調(diào)試applets非常相似。不同之處在于,applets程序?qū)嶋H調(diào)試的是sun.applet.appletviewer。

大部分調(diào)試器在調(diào)試applets時(shí)都能夠自動(dòng)忽略掉一些細(xì)節(jié),因?yàn)樗廊绾握{(diào)試applets。如果想要將調(diào)試對象轉(zhuǎn)移到j(luò)sp身上,就需要做好以下兩點(diǎn):

  • 設(shè)置調(diào)試器的classpath,讓它能夠找到sun.servlet.http.http-server  和相關(guān)的類。
  • 設(shè)置調(diào)試器的classpath,讓它能夠找到您的jsp文件和相關(guān)的類。

設(shè)置好classpath后,開始調(diào)試sun.servlet.http.http-server 。您可以在jsp文件的任意地方設(shè)置斷點(diǎn),只要你喜歡,然后使用瀏覽器發(fā)送一個(gè)請求給服務(wù)器就應(yīng)該可以看見程序停在了斷點(diǎn)處。

使用注釋

程序中的注釋在很多方面都對程序的調(diào)試起到一定的幫助作用。注釋可以用在調(diào)試程序的很多方面中。

jsp使用java注釋。如果一個(gè)bug消失了,就請仔細(xì)查看您剛注釋過的代碼,通常都能找出原因。

客戶端和服務(wù)器的頭模塊

有時(shí)候,當(dāng)jsp沒有按照預(yù)定的方式運(yùn)行時(shí),查看未加工的http請求和響應(yīng)也是很有用的。如果對http的結(jié)構(gòu)很熟悉的話,您可以直接觀察request和response然后看看這些頭模塊到底怎么了。

重要調(diào)試技巧

這里我們再透露兩個(gè)調(diào)試jsp的小技巧:

  • 使用瀏覽器顯示原始的頁面內(nèi)容,用來區(qū)分是否是格式問題。這個(gè)選項(xiàng)通常在view菜單下。
  • 確保瀏覽器在強(qiáng)制重新載入頁面時(shí)沒有捕獲先前的request輸出。若使用的是netscape navigator瀏覽器,則用shift-reload;若使用的是ie瀏覽器,則用shift-refresh。
相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频