用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 程序开发教程 > JSP教程 > Jsp实例教程 > 文章正文
开发一个调试JSP的Eclipse插件
iTbulo.COM 2006-2-6 未知()

Tomcat 又将这个 JAVA 代码编译为 Hello_jsp.class,他们位于: $Tomcat_install_path$\work\Standalone\localhost\_ 目录下。但是 JSP 文件名/行号和 JAVA 行号的对应表(以下简称SMAP) 在哪里呢?答案是,它保存在 Class 中。如果用 UltraEdit 打开这个 Class 文件,就可以找到 SourceDebugExtension 属性,这个属性用来保存 SMAP。

  JVM 规范定义了 ClassFile 中可以包含 SourceDebugExtension 属性,保存 SMAP:

SourceDebugExtension_attribute { u2 attribute_name_index; u4 attribute_length; u1 debug_extension[attribute_length]; } 


  我用 javassist 做了一个测试(javassist可是一个好东东,它可以动态改变Class的结构,JBOSS 的 AOP就利用了javassist,这里我们只使用它读取ClassFile的属性)

public static void main(String[] args) throws Exception{ String[]files = {    "E:\\Tomcat5_0_5\\work\\Catalina\\localhost\\_\\org\\apache\\jsp\\Hello_jsp.class", };  for(int k = 0; k < files.length; k++){   String file = files[k];   System.out.println("Class : " + file);   ClassFile classFile = new ClassFile(new DataInputStream(new FileInputStream(file)));     AttributeInfo attributeInfo = classFile.getAttribute("SourceDebugExtension");   System.out.println("attribute name :" + attributeInfo.getName() + "]\n\n");   byte[]bytes = attributeInfo.get();   String str = new String(bytes);   System.out.println(str); } } 


  这段代码显示了SourceDebugExtension 属性,你可以看到SMAP 的内容。编译JSP后,SMAP 就被写入 Class 中, 你也可以利用 javassist 修改 ClassFile 的属性。

  下面就是 Hello_jsp.class 中保存的 SMAP 内容:

SMAP E:\Tomcat5_0_5\work\Catalina\localhost\_\org\apache\jsp\Hello_jsp.java JSP *S JSP *F + 0 Hello.jsp /Hello.jsp + 1 greeting.jsp /greeting.jsp *L 1:45 2:46 3:47 3:48 4:49 5:50 1#1:51 1:52 2:53 7#0:56 8:57 *E


  首先注明JAVA代码的名称:Hello_jsp.java,然后是 stratum 名称: JSP。随后是两个JSP文件的名称 :Hello.jsp、greeting.jsp。两个JSP文件共10行,产生的Hello_jsp共69行代码。最后也是最重要的内容就是源文件文件名/行号和目标文件行号的对应关系(*L 与 *E之间的部分)

  在规范定义了这样的格式:

  源文件行号 # 源文件代号,重复次数 : 目标文件开始行号,目标文件行号每次增加的数量
(InputStartLine # LineFileID , RepeatCount : OutputStartLine , OutputLineIncrement)

  源文件行号(InputStartLine) 目标文件开始行号(OutputStartLine) 是必须的。下面是对这个SMAP具体的说明:

1:45 2:46 3:47 3:48 4:49 5:50(没有源文件代号,默认为Hello.jsp)                    开始行号   结束行号 Hello.jsp: 1 ->Hello_jsp.java: 45 2 ->46 3 ->47 48 4 ->49 5 ->50 1#1:51 1:52 2:53(1#1表示 greeting.jsp 的第1行) greeting.jsp: 1 ->Hello_jsp.java: 51 52 2 ->53 7#0:56 8:57(7#0表示 Hello.jsp 的第7行) Hello.jsp: 7 ->Hello_jsp.java: 56 8 ->57 

上一页  [1] [2] [3] [4] [5] 下一页

文章搜索
相关资讯
相关文章 相关下载
JSP登录验证功能的实现
tomcat频繁死掉的问题
修改MYSQL数据库,数据表,字段的编码
jsp插入mysql数据库后乱码的解决办法
JDOM操作XML文件(法老修正版)
焦点信息