JSP 调试
要测试/调试一个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 调试的更多相关文章
- JSP-Runoob:JSP 调试
ylbtech-JSP-Runoob:JSP 调试 1.返回顶部 1. JSP 调试 要测试/调试一个JSP或servlet程序总是那么的难.JSP和Servlets程序趋向于牵涉到大量客户端/服务器 ...
- JSP调试技巧
我先谈谈: 我的经验就是多装几个服务器,这个查不出错误,用另一个,这个方法很好用. ---------------------------------------------------------- ...
- jsp调试小技巧
console.log($("#toolbar")); 打印对象可知道这个对象的参数信息
- JSP的调试
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/debugging.html: 一.使用System.out.println() System.out.p ...
- JSP高级功能-java之JSP学习第三天(非原创)
文章大纲 一.JSP 标准标签库(JSTL)二.JSP 连接数据库三.JSP XML 数据处理四.JSP JavaBean五.JSP 自定义标签六.JSP 表达式语言七.JSP 异常处理八.JSP 调 ...
- MyEclipse使用前优化与配置
全局优化 1 设置默认编码方式 首选项> General > Workspace > GBK改成UTF-8 2 设置默认文件默认打开方式 首选项> General > ...
- MyEclipse 优化
1.取消自动validation 有一堆,什么xml.jsp.jsf.js等等, 我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下! 取消方法: windows-->perfer ...
- MyEclipse 常用设置
1.指定本机java环境 Windows-->preferences-->java-->Insetallel JREs 右侧 单击ADD-->standard VM--> ...
- 高版本myeclipse破解以及优化
1.破解图 破解myeclipse但是在默认安装目录没有发现common文件夹,该怎么办? 打开myeclipse: Myclipse-->Installation Summary..., ...
随机推荐
- 编写Avocado测试
编写Avocado测试 现在我们开始使用python编写Avocado测试,测试继承于avocado.Test. 基本例子 创建一个时间测试,sleeptest,测试非常简单,只是sleep一会: i ...
- LVS-DR 配置测试
LVS Lvs体系结构 Lvs工作模式(3种) NAT-网络地址转换模式 当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口 ...
- 创建Java不可变型的枚举类型Gender
创建Java不可变型的枚举类型,其实例如下: // 创建不可变型的枚举类 enum Gender { // 此处的枚举值必须调用对应的构造器来创建 MALE("男"), FEMAL ...
- Python(面向对象5——高级)
面向对象进阶 一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Fo ...
- 来自IOS开发工程师的零基础自学HTML5经验分享
移动互联网的火爆,而Html具有跨平台.开发快的优势,越来越受到开发者的青睐.感谢IOS开发工程师“小木___Boy”’带来的HTML5学习经验分享. 一.学习途径 1.很多视频网站 比如慕课.和极客 ...
- 如何下载java的jdk
1.https://www.oracle.com/index.html 2.https://www.oracle.com/downloads/index.html 3.https://www.orac ...
- 两个java小练习
网上看到的一个小练习,自己写了一个,但是时间限制并不符合,并且貌似还有些小问题,暂时放在这儿,代码格式什么的也不太规范. 1.班级排名时间限制: 1000ms 内存限制: 65536kB 描述 信息科 ...
- linux上mysql访问:Access denied for user 'agtipay'@'iZm5ebiyb4f90ga9xiycgsZ' (using password: YES)
公司的聚合支付测试环境出了一个问题(agtipay用户访问数据的时候出现如题错误),快搞死我两天时间(原谅技术不才),如题.首先明确一下问题: 1.访问拒绝,说明数据库连接这里有问题,数据库连接访问拒 ...
- Elasticsearch、MongoDB、Hadoop适用场景
如果你仅仅想要通过关键字和简单的分析,那么Elasticsearch可以完成任务: 如果你需要查询文档,并且包含更加复杂的分析过程,那么MongoDB相当适合: 如果你有一个海量的数据,需要大量不同的 ...
- 一键安装lnmp-nginx(3)
nginx(){cd $pathtar zxvf pcre-8.20.tar.gz cd pcre-8.20./configure --prefix=/usr/local/pcremakemake i ...