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

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

  使用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" %>

  

  

  

  

  

  <% System.out.println( "counter= " +

  pageContext.findAttribute("counter") ); %>

  

  

  

  现在,如果运行上面的例子的话,它将会产生如下的结果:

  -4

  -3

  -2

  -1

  0

  1

  2

  3

  4

  5

  如果使用的是Tomcat服务器,您就能够在logs目录下的stdout.log文件中发现多出了如下内容:

  counter=1

  counter=2

  counter=3

  counter=4

  counter=5

  counter=6

  counter=7

  counter=8

  counter=9

  counter=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" %>

  

  

  

  <% Logger logger=Logger.getLogger(this.getClass().getName());%>

  

  

  

  <% String message = "counter="

  + pageContext.findAttribute("counter")

  + " myCount="

  + pageContext.findAttribute("myCount");

  logger.info( message );

  %>

  

  

  

  它的运行结果与先前的类似,但是,它可以获得额外的信息输出至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。(编辑:雷林鹏 来源:网络)

JSP 调试的更多相关文章

  1. JSP-Runoob:JSP 调试

    ylbtech-JSP-Runoob:JSP 调试 1.返回顶部 1. JSP 调试 要测试/调试一个JSP或servlet程序总是那么的难.JSP和Servlets程序趋向于牵涉到大量客户端/服务器 ...

  2. JSP调试技巧

    我先谈谈: 我的经验就是多装几个服务器,这个查不出错误,用另一个,这个方法很好用. ---------------------------------------------------------- ...

  3. jsp调试小技巧

    console.log($("#toolbar")); 打印对象可知道这个对象的参数信息

  4. JSP的调试

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/debugging.html: 一.使用System.out.println() System.out.p ...

  5. JSP高级功能-java之JSP学习第三天(非原创)

    文章大纲 一.JSP 标准标签库(JSTL)二.JSP 连接数据库三.JSP XML 数据处理四.JSP JavaBean五.JSP 自定义标签六.JSP 表达式语言七.JSP 异常处理八.JSP 调 ...

  6. MyEclipse使用前优化与配置

    全局优化 1 设置默认编码方式 首选项>  General > Workspace >  GBK改成UTF-8 2 设置默认文件默认打开方式 首选项>  General > ...

  7. MyEclipse 优化

    1.取消自动validation 有一堆,什么xml.jsp.jsf.js等等, 我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下! 取消方法: windows-->perfer ...

  8. MyEclipse 常用设置

    1.指定本机java环境 Windows-->preferences-->java-->Insetallel JREs 右侧 单击ADD-->standard VM--> ...

  9. 高版本myeclipse破解以及优化

    1.破解图 破解myeclipse但是在默认安装目录没有发现common文件夹,该怎么办? 打开myeclipse:  Myclipse-->Installation Summary...,   ...

随机推荐

  1. linux内核源代码、配置与编译

    内核源代码下载:www.kernel.org Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性. linux内核代码最好不要在windows ...

  2. PAT 1099 Build A Binary Search Tree[BST性质]

    1099 Build A Binary Search Tree(30 分) A Binary Search Tree (BST) is recursively defined as a binary ...

  3. Java中树的存储结构实现

    一.树 树与线性表.栈.队列等线性结构不同,树是一种非线性结构. 一棵树只有一个根节点,如果一棵树有了多个根节点,那它已经不再是一棵树了,而是多棵树的集合,也被称为森林. 二.树的父节点表示法 树中除 ...

  4. matplotlib对LaTeX数学公式的支持

    Matlplotlib对LaTeX有一定的支持,如果记得使用raw字符串语法会很自然: xlabel(r"x2y4x2y4") 在matplotlib里面,可以使用LaTex的命令 ...

  5. boost circular buffer环形缓冲类

    Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据. 它是一个与STL兼容的容器,类似于 std::list或std::de ...

  6. 09 grep、正则表达式和sed

    作业一:整理正则表达式博客 ^ 行首$ 行尾. 除了换行符以外的任意单个字符* 前导字符的零个或多个.* 所有字符[] 字符组内的任一字符[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)^ ...

  7. java 定时器实现

    java工程中,不免遇到需要定时处理任务的需求,有如下两种方法: 1.使用java.util.TimerTask 2.使用Quartz 一.java.util.TimerTask Timer time ...

  8. HDU 1950 Bridging signals(LIS)

    最长上升子序列(LIS)的典型变形,O(n^2)的动归会超时.LIS问题可以优化为nlogn的算法. 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元 ...

  9. 企业规范化管理系统iClap前生后世全解析

    iClap是一个产品管理系统,专注于为移动互联网企业提供企业规范化解决方案,改变传统的产品管理模式,实现产品管理场景化.APP.甚至原型图.效果图都可以直接进行批注和任务的协作,实时将你要修改的内容或 ...

  10. Codeforces Round #408 (Div. 2) D - Police Stations

    地址:http://codeforces.com/contest/796/problem/D 题目: D. Police Stations time limit per test 2 seconds ...