如下内容引用自http://wiki.jikexueyuan.com/project/jsp/debugging.html:html
1、使用System.out.println()java
System.out.println()在测试中做为一个标记很容易使用,无论某段代码是否被执行。也能够输出变量值。另外:git
因为System对象是Java对象核心的一部分,它能够在任何地方被使用而不须要安装额外的类。这包括Servlets,JSP,RMI,EJB's,ordinary Beans和classes,和独立的应用程序。github
下面是使用System.out.println()的语法:小程序
System.out.println("Debugging message");
下面是使用System.out.println()的一个简单的例子:浏览器
<%@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,它将会在浏览器上产生如下的结果:缓存
若是使用的是Tomcat,还将发现这些行会被附加到日志目录里stdout.log文件的末尾。服务器
这样能够把变量和其余信息打印到系统日志中,能够分析找到问题的根本缘由或者其余各类缘由。app
2、使用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文件中有附加信息。在这里,使用记录器的info方法,由于只是为了信息的目的在记录消息。这是stdout.log文件的一个快照:
能够经过使用方便的函数发送各类级别的消息,如severe(),warning(),info(),config(),fine(),finer()和finest()。这里,finest()方法能够用于记录最好的信息,severe()方法能够用于记录严峻的消息。
可使用Log4J Framework在不一样的文件中根据消息的严重水平和重要性来记录他们。
3、调试工具
Eclipse是一个免费和开源的Java集成开发环境,支持独立的Java应用程序和Web应用程序的开发,支持JSP和Servlet规范,也包括一个JSP调试器。
Eclipse支持如下基本的调试功能:
断点
单步调试
能够参考Eclipse文档来了解上面的调试功能。
4、使用JDB调试器
可使用用来调试小程序和应用程序相同的jdb命令来调试JSP和Servlets 。
为了调试JSP和Servlets,能够调试sun.servlet.http.HttpServer,而后在来自浏览器的HTTP请求的响应里查看HttpServer正在执行的JSP/Servlets。这和如何调试小程序很是类似。不一样不处是,在小程序里,真正的程序是在sun.applet.AppletViewer里调试的。
大多数调试器经过自动得知如何调试小程序来隐藏这些细节。直到它们对JSP作着一样的操做,必须帮助调试器执行如下操做:
设置调试器的类路径,以便于找到sun.servlet.Http-Server和与其相关的类。
一旦已经正确的设置了类路径,开始调试sun.servlet.http.HttpServer。对于一个给定的JSP,能够感兴趣的任何地方设置断点,而后经过一个Web浏览器来发送一个请求到HttpServer (http://localhost:8080/JSPToDebug
)。会看到执行设置的断点处中止。
详细参考:http://www.jianshu.com/p/c11ad97d5bec
5、使用注释
代码中的注释能够用不一样的方法帮助调试过程。注释能够用于调试过程的不少其余方面。
JSP使用Java命令和单线(//...)和多线(/*...(/)命令,能够暂时删除Java代码的一部分。若是错误消失,仔细看看代码注释并找出问题所在。
6、客户端和服务器端头文件
有时,当一个JSP表现的不像预期的那样,查看一下原始的HTTP请求和响应是很是有用的。若是熟悉HTTP的结构,能够读取请求和响应,看看那些头文件中究竟是社么信息。
7、重要的调试技巧
这里是一些关于JSP调试的调试技巧:
向浏览器查看它显示的页面的原始内容。这能够帮助识别格式问题。它一般是视图菜单下的一个选项。
测试工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test23