Apress公司很有经验的技术团队对本书的代码进行了评审和测试,我们希望所有这些代码都能很好地工作,当然最终也实现了这个目标。
但是,有时事情并非像我们所希望的那样。当我们输入本书的代码或者开发自己的JSP时,或多或少都会遇到一些解释或者编译上的问题。下面将关于如何发现和解决这些问题给出一些帮助。
JSP的规范里列举了不少发生解释错误的情形。比如,page指令出现多次,但是任何一个属性都只能定义一次。如果同样的属性出现两次,那么第二次的值必须和第一次相同,否则就会出现解释错误。
为了更好地理解,请看前面的welcome.jsp例子(清单3ˉ1)。随便在该文件的某个地方添加下面这行代码:
然后在Tomcat中重新部署这个JSP应用。当试图载入欢迎页面时,出现图3ˉ10所示的错误。这种情况下,Tomcat会发送一个特定格式的错误页面。根据服务器的不同,看到的错误信息可能稍有不同。
|
|
| 图3ˉ10 Tomcat显示解释问题的栈轨迹信息,这些信息对于定位和修正错误很有用 |
尽管这张图没有显示完整的错误信息,但是看到的异常信息栈轨迹的第一行如下:
如图所示,这些栈轨迹告诉我们这个错误出现在哪个文件(welcome.jsp)的哪一行和哪个字符(10,0),而且对错误也做了清楚的描述。根据这些信息,我们应该很容易找到该文件的第10行,发现它违反了errorPage的使用规范,然后修正它。
但是,编译错误有时却不太容易定位。再回到welcome.jsp页面,删除重复的errorPage指令(如果前面你添加了它)。然后,在代码中添加一个多余的大括号,如下:
当我们把这个破坏掉的文件部署到Tomcat后,出现如图3ˉ11的页面。Tomcat再次发送了一个特定格式的errorPage,但是这个页面没有指出JSP源码中哪里出现了错误。实际上,出现了5个错误,第一个是:
|
|
| 图3ˉ11 当服务器不能编译JSP时,它会返回给客户端一个错误页面。编译错误有时比较难定位 |
这时,你可能感到奇怪了。为什么Tomcat返回的错误页面上说try没有相应的catch?在这个JSP页面中并没有tryˉcatch语句块啊!本章前面曾提到,容器把JSP文件转换成页面的实现类。正是这个实现类的源文件包含了tryˉcatch语句块。只要意识到这点,你很快就应明白是由于添加一个多余的大括号引起了全部的编译错误。但是,在真实情况下你不可能已知添加了错误,所以只知道是JSP出了问题,但是不容易定位和修改这个错误。
解决这个问题的一个办法是查看解释后的源码。如图3ˉ11告诉我们解释后的源码welcome jsp.java的位置,我们可以用编辑器打开它,然后查找错误。这样比在JSP文件中查找要容易些。本例中,栈轨迹告诉我们第一个错误是在解释之后的文件的第43行,实际上,真正的问题是在文件稍后的位置上多出了一个大括号。
有时,错误信息并没有报告JSP在哪行出现了问题,解决这类编译问题的最好方式是回头检查一下Java语法。例如,检查所有代码的行结束符是否是逗号;检查所有的大括号是否匹配;并且用你喜欢的IDE工具自动检查Java文件微小的语法错误,最终得以保证JSP文件不会出现这类问题。
| 回书目 上一节 下一节 |
|
· SQL Server入门到精通.. · 交换技术配置手册技术.. · 超级网管员——网络应.. · 网络服务器配置与应用.. · Linux集群技术自测试题.. · JavaSript核心技术自测.. |
· ARP攻击与防范技术自测.. · 国庆挑战自己参加自测 .. · 《网管员必读—网络应.. · 历次技术自测 获奖网友.. · 51CTO国庆七天技术自测.. · 9.2.2 无线AP |
|
|||
| · McWill、WiMAX、3G博弈 · 网管系统介绍 · 网络管理系统如何支撑I.. · CISSP认证成长之路 · 51CTO国庆充电专题之好.. · 网络技术经典基础教程 · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 |
· 充电计划之热门IT认证.. · 51CTO技术自测 挑战自.. · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 · 我是黑客我怕谁——讲.. · Solaris 10 配置管理 · Solaris基础知识入门 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · C#技术开发指南 · Solaris 10 配置管理 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·体验Windows Server 2008.. ·将超星图书转成PDF文档 |
·使用 Office Communicati.. ·VMware Workstation 6.01.. |
| ·强烈质疑“步行1公里就能.. ·国庆期间新闻回顾:微软.. |
·9月第3周回顾:微软和英.. ·9月第2周回顾:四核之战.. |
| · 华为、贝恩资本22亿美元.. · NGN:下一代网络 · 网络访问中断大排查 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· Google推出唯一硬件——.. · 硬盘之父获得诺贝尔物理.. · 理性面对四核服务器选购 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 硬盘之父获得诺贝尔物理.. · 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. |