JSP的调试
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/debugging.html:
一、使用System.out.println()
System.out.println()在测试中作为一个标记很容易使用,不管某段代码是否被执行。也可以输出变量值。另外:
由于System对象是Java对象核心的一部分,它可以在任何地方被使用而不需要安装额外的类。这包括Servlets,JSP,RMI,EJB's,ordinary Beans和classes,和独立的应用程序。
- 与停在断点相比较,写到System.out中并没有对应用程序正常的执行流产生过多的干扰,当时间至关重要时,这使得它非常有价值。
下面是使用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文件的末尾。
这样可以把变量和其他信息打印到系统日志中,可以分析找到问题的根本原因或者其他各种原因。
二、使用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在不同的文件中根据消息的严重水平和重要性来记录他们。
三、调试工具
Eclipse是一个免费和开源的Java集成开发环境,支持独立的Java应用程序和Web应用程序的开发,支持JSP和Servlet规范,也包括一个JSP调试器。
Eclipse支持以下基本的调试功能:
断点
单步调试
- 监视点
可以参考Eclipse文档来了解上面的调试功能。
四、使用JDB调试器
可以使用用来调试小程序和应用程序相同的jdb命令来调试JSP和Servlets 。
为了调试JSP和Servlets,可以调试sun.servlet.http.HttpServer,然后在来自浏览器的HTTP请求的响应里查看HttpServer正在执行的JSP/Servlets。这和如何调试小程序非常相似。不同不处是,在小程序里,真正的程序是在sun.applet.AppletViewer里调试的。
大多数调试器通过自动得知如何调试小程序来隐藏这些细节。直到它们对JSP做着同样的操作,必须帮助调试器执行以下操作:
设置调试器的类路径,以便于找到sun.servlet.Http-Server和与其相关的类。
- 设置调试器的类路径,以便于找到JSP和支持的类,典型的是ROOT\WEB-INF\classes。
一旦已经正确的设置了类路径,开始调试sun.servlet.http.HttpServer。对于一个给定的JSP,可以感兴趣的任何地方设置断点,然后通过一个Web浏览器来发送一个请求到HttpServer (http://localhost:8080/JSPToDebug
)。会看到执行设置的断点处停止。
详细参考:http://www.jianshu.com/p/c11ad97d5bec
五、使用注释
代码中的注释可以用不同的方法帮助调试过程。注释可以用于调试过程的很多其他方面。
JSP使用Java命令和单线(//...)和多线(/*...(/)命令,可以暂时删除Java代码的一部分。如果错误消失,仔细看看代码注释并找出问题所在。
六、客户端和服务器端头文件
有时,当一个JSP表现的不像预期的那样,查看一下原始的HTTP请求和响应是非常有用的。如果熟悉HTTP的结构,可以读取请求和响应,看看那些头文件中到底是社么信息。
七、重要的调试技巧
这里是一些关于JSP调试的调试技巧:
向浏览器查看它显示的页面的原始内容。这可以帮助识别格式问题。它通常是视图菜单下的一个选项。
- 确保浏览器不会通过强迫一个完全加载的页面来缓存先前的请求的输出。在 Internet Explorer,使用Shift-Refresh。(Ctrl+F5)
测试工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test23
JSP的调试的更多相关文章
- 对于JSP的调试
在eclipse中调试JSP 我换了图片但是网页中的图片却不变化 我删了工程里的图片还是没用 看了一下Tomcat根目录..貌似也是没有的.. 最后我考虑换了HTML中图片的名字..并且更改了替换的图 ...
- MyEclipse web jsp 如何调试
MyEclipse如何调试 | 浏览:882 | 更新:2014-03-13 17:38 1 2 3 4 5 分步阅读 当程序写好之后,如何调试呢? 我们在MyEclipse中jav添加断点,运行de ...
- IntelliJ IDEA 进行js Debug调试
idea的js调试目前看来不同给力,一是玩转它需要安装谷歌插件支持,二是貌似存在一些bug... 一.新建一个jsp并打上断点 二.调试 idea出现提示: 安装JetBrains IDE Suppo ...
- Java/JSP/JS Debug笔记
2006年的blog,当时好生涩啊: ------------------------ 谨以此文献给我没有头绪或心劲去debug的日子和很多辛苦debug的同志们. 应部门一个科的需求,给他们写一个夜 ...
- Eclipse高级操作 远程调试
Eclipse高级操作 远程调试 JPDA是SUN JDK自带的远程调试机制.它提供了一套标准的调试接口,可以从虚拟机一级允许外界用特定协议探测虚拟机内部的运作细节.只要你装了JDK1.2以上的SUN ...
- 在Linux虚拟机下配置tomcat
1.到Apache官网下载tomcat http://tomcat.apache.org/download-80.cgi 博主我下载的是tomcat8 博主的jdk是1.8 如果你们的jdk是1.7或 ...
- 《深入理解Java虚拟机》类文件结构
上节学习回顾 在上一节当中,主要以自己的工作环境简单地介绍了一下自身的一些调优或者说是故障处理经验.所谓百变不离其宗,这个宗就是我们解决问题的思路了. 本节学习重点 在前面几章,我们宏观地了解了虚拟机 ...
- Struts2 XML配置详解
struts官网下载地址:http://struts.apache.org/ 1. 深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1. 包配置: S ...
- struts2中struts.xml配置文件详解【未整理】
1. 深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1. 包配置: Struts2框架中核心组件就是Action.拦截器等,Struts2框架使用包来管 ...
随机推荐
- Java语法基础-序列化
33. Java序列化中如果有些字段不想进行序列化,怎么办? 答:对于不想进行序列化的变量,使用transient关键字修饰. transient关键字的作用是:阻止实例中那些用此关键字修饰的的变量序 ...
- Spark学习笔记--Spark在Windows下的环境搭建(转)
本文主要是讲解Spark在Windows环境是如何搭建的 一.JDK的安装 1.1 下载JDK 首先需要安装JDK,并且将环境变量配置好,如果已经安装了的老司机可以忽略.JDK(全称是JavaTM P ...
- 让TortoiseGit记住帐号密码方法
我的电脑环境是: Windows7 64x 系统用户名是:steden 所以,我的路径是:C:\Users\steden\ 具体要根据你的系统环境及当前用户名来决定. 在这里,有个文件:.gitc ...
- 判断Exe(DLL)和符号文件是否匹配---验证模块和符号文件是否匹配的工具和方法
当我们进行程序调试时,有时调试器会直接告诉你符号文件不对,或则显示出的调用栈不对,当你怀疑符号文件不匹配时,如何确定呢? 如果是用windbg调试,请用 !chksym 模块名比如,匹配的时候 不匹 ...
- mysql事件【定时器】
一,借鉴[luo奔的蜗牛] 1.创建一张表 create table mytable ( id int auto_increment not null, name ) not null default ...
- idea搭建SSM的maven项目(tomcat容器)
一.创建maven的web项目 (1)选择项目的骨架 (2)写项目的坐标 (3)maven的设置 设置maven的本地仓库,以及配置文件的位置,同时点击+号,填入archetypeCatalog和in ...
- spring Boot 不认Mapper.xml
很久以前的笔记了,大约就是用Generatro工具自动生成代码的时候,springboot找不到mapper.xml 之前,由于用mybatis-generator自动生成了entity,dao,ma ...
- 零基础入门学习Python(29)--文件:一个任务
知识点 一个任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起来: #record.txt文件内容: 小客服:小甲鱼,今天有客户问你有没有女朋友? 小甲鱼:咦?? 小客服:我跟她 ...
- Qt 编写应用支持多语言版本--一个GUI应用示例
简介 上一篇博文已经说过如何编写支持多语言的Qt 命令行应用,这一篇说说Qt GUI 应用多语言支持的坑. 本人喜欢用代码来写布局,而不是用 Qt Designer 来设计布局,手写布局比 Qt De ...
- Uva 10305 拓扑排序
题意: 给定n个点,与m条边, 给出他们的拓扑排序. 分析: 拓扑排序可以有两种做法, 第一种是dfs, 每次都找到某一个点的终点, 然后加入序列末尾, 正在访问的标记为-1, 访问过的标记为1, 未 ...