JSP 调试

 

JSP 调试

要测试/调试一个JSP或servlet程序老是那么的难。JSP和Servlets程序趋向于牵涉到大量客户端/服务器之间的交互,这颇有可能会产生错误,而且很难重现出错的环境。html

接下来将会给出一些小技巧和小建议,来帮助您调试程序。java

使用System.out.println()

System.out.println()能够很方便地标记一段代码是否被执行。固然,咱们也能够打印出各类各样的值。此外:apache

  • 自从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
-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

使用这种方法能够将变量和其它的信息输出至系统日志中,用来分析并找出形成问题的深层次缘由。框架

使用JDB Logger

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使用手册。

使用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。
相关文章
相关标签/搜索