接下来将会给出一些小技巧和小建议,来帮助您调试程序。
利用System.out.println()
System.out.println()可以很方便地标记一段代码是否被实行。当然,我们也可以打印出各种各样的值。此外:
自从System工具成为Java核心工具后,它便可以利用在任何地方而不用引入额外的类。利用范围包括Servlets,JSP,RMI,EJB's,Beans,类和独立运用。
与在断点处停滞运行比较,用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>
现在,如果运行上面的例子的话,它将会产生如下的结果:
-4-3-2-1012345
如果利用的是Tomcat做事器,您就能够在logs目录下的stdout.log文件中创造多出了如下内容:
counter=1counter=2counter=3counter=4counter=5counter=6counter=7counter=8counter=9counter=10
利用这种方法可以将变量和其它的信息输出至系统日志中,用来剖析并找出造成问题的深层次缘故原由。
利用JDB Logger
J2SE日志框架可为任何运行在JVM中的类供应日志记录做事。因此我们可以利用这个框架来记录任何信息。
让我们来重写以上代码,利用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=-424-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=2 myCount=-324-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=3 myCount=-224-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=4 myCount=-124-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=5 myCount=024-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=6 myCount=124-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=7 myCount=224-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=8 myCount=324-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter=9 myCount=424-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利用手册。
利用JDB Debugger
可以在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 和干系的类。
设置调试器的classpath,让它能够找到您的JSP文件和干系的类。
设置好classpath后,开始调试sun.servlet.http.Http-Server 。您可以在JSP文件的任意地方设置断点,只要你喜好,然后利用浏览器发送一个要求给做事器就该当可以瞥见程序停在了断点处。
利用注释
程序中的注释在很多方面都对程序的调试起到一定的帮助浸染。注释可以用在调试程序的很多方面中。
JSP利用Java注释。如果一个BUG消逝了,就请仔细查看您刚注释过的代码,常日都能找出缘故原由。
客户端和做事器的头模块
有时候,当JSP没有按照预定的办法运行时,查看未加工的HTTP要乞降相应也是很有用的。如果对HTTP的构造很熟习的话,您可以直接不雅观察request和response然后看看这些头模块到底怎么了。
主要调试技巧
这里我们再透露两个调试JSP的小技巧:
利用浏览器显示原始的页面内容,用来区分是否是格式问题。这个选项常日在View菜单下。
确保浏览器在逼迫重新载入页面时没有捕获先前的request输出。若利用的是Netscape Navigator浏览器,则用Shift-Reload;若利用的是IE浏览器,则用Shift-Refresh。
如您还有不明白的可以不才面与我留言或是与我磋商QQ群308855039,我们一起飞!