JSP调试
JSP和servlet始终是难以测试/调试的。 JSP和Servlet的往往涉及大量的客户端/服务器交互,使得错误的可能,但难以重现。
这里有一些提示,并且可以帮助您在调试时提供一些建议。
使用System.out.println():
System.out.println()是很容易作为一个标记,以测试是否正在执行或没有一定的一段代码使用。我们可以打印出变量的值也是如此。此外:
-
由于该系统的对象是核心Java对象的一部分,它可以在任何地方使用,而无需安装任何额外的类。这包括Servlets和JSP,RMI,EJB,普通bean类和类,及独立的应用程序。
-
相较于停在断点,写入到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>
现在,如果你将尝试访问上面的JSP,它会产生在浏览器下面的结果:
-4 -3 -2 -1 0 1 2 3 4 5
如果您使用的是Tomcat,还会发现这些行附加到的stdout.log在日志目录中的结尾。
counter=1 counter=2 counter=3 counter=4 counter=5 counter=6 counter=7 counter=8 counter=9 counter=10
这样,您就可以打印变量和其他信息到系统日志,可进行分析,以找出问题或其他各种原因的根本原因。
使用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。这里我们使用的是记录的信息的方法,因为我们正在记录的消息只是信息的目的。这里是stdout.log文件的快照:
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=1 myCount=-4 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=2 myCount=-3 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=3 myCount=-2 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=4 myCount=-1 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=5 myCount=0 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=6 myCount=1 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=7 myCount=2 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=8 myCount=3 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=9 myCount=4 24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService INFO: counter=10 myCount=5
消息可以在不同层次被发送使用方便函数 severe(), warning(), info(), config(), fine(), finer(), and finest(). 这里finest()方法可用于记录最好的信息和severe() 方法可用于记录严重信息。
可以使用Log4J的框架来记录基于其严重性级别和重要性在不同的文件中的消息。
调试工具:
NetBeans是一个支持独立的Java应用程序和支持JSP和Servlet规范的Web应用程序的开发,并包括一个JSP调试器,以及一个自由和开放源码的Java集成开发环境。
NetBeans的支持以下基本的调试功能:
-
断点
-
单步执行代码
-
观察点
您可以参考NteBeans文档来了解上面的调试功能。
使用JDB调试器:
可以用相同JDB调试JSP和servlet的命令,用于调试applet或应用程序。
要调试JSP或Servlet,可以调试sun.servlet.http.HttpServer,然后看着的HttpServer执行JSP/ servlet的响应HTTP请求。这非常类似于applet调试。所不同的解释内的applet,被调试的实际程序是sun.applet.AppletViewer。
大多数调试器通过自动知道如何调试applet隐藏这个细节。直到做同样的JSP之后,调试程序通过执行以下操作:
-
设置你的调试器的类路径中,以便它可以找到sun.servlet.http.Http-Server和相关的类。
-
设置调试器的类路径,这样它也可以找到JSP和支持类,通常在 ROOTWEB-INFclasses.
一旦您已设置正确的类路径,开始调试sun.servlet.http.HttpServer。可以在任何JSP中感兴趣的调试设置断点,然后使用Web浏览器发出请求到HttpServer为给定的JSP(http://localhost:8080/JSPToDebug)。您应该看到执行停在你的断点。
使用注释:
在你的代码中的注释可以帮助各种方式的调试过程。注释可以在大量的调试过程中的其他方式使用。
在JSP中使用Java注释和单行(//...)和多线(/*...*/)注释可以用来临时删除的Java代码部分。如果错误消失,仔细看看你刚刚注释的代码,并找出问题。
客户端和服务器连接头:
有时,当一个JSP并没有像预期的那样,是看原始的HTTP请求和响应是非常有用的。如果你熟悉HTTP的结构,可以读取请求和响应,看看那些头到底是怎么回事。
重要的调试提示:
下面是一些关于JSP调试调试更多的提示列表:
-
询问浏览器,以显示它正在显示页面的原始内容。这可以帮助识别格式化问题。它通常是在视图菜单下的选项。
-
确保浏览器不缓存前一个请求的输出通过强制页面重新加载。与Netscape Navigator,请按住Shift-Reload; 而Internet Explorer使用Shift-Refresh。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:JSP调试
本文地址:http://www.codeinn.net/jsp/956.html