用户名: 密码: [免费注册] [忘记密码]
您的位置:首页 -- jsp技术
在JSP空间调试程序时经常遇到的错误解决办法
发布日期:2012-09-25     返回

在使用JSP空间的技术人员,会经常在调试的时候遇到错误
NullPointerException       空指针异常 
ClassNotFoundException     无法找到指定的类异常  
这2个异常出现的频率太高了,如果能仔细看的话,异常信息连那一行都给你指出来了,自己直接去看源代码不就行了   
以tomcat为例。 jsp文件会先被tomcat的 jspc 翻译成 .java文件,一个servlet, 然后再javac 编译成.class文件 

异常信息一般有2种大类  
  1 源代码错误
复制内容到剪贴板代码:

 

 

 

 

org.apache.jasper.JasperException: Unable to compile class for JSP:   

An error occurred at line: 24 in the jsp file: /viewthread.jsp  
Syntax error, insert ";" to complete Statement  
21: }  
22: if(post.getIdParent()>0){  
23: %>  
24: <script type="text/javascript">self.location="viewthread.jsp?tid=<%post.getIdParent()%>";</script>  
25: <%  
26: return;  
27: }  


Stacktrace:  
  at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)  
  at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)  
  at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.
可以看到在第24行,出现了无法编译的问题,经检查,那个<%post.getIdParent()%>少了等于号 <%=post.getIdParent()%>  
    
这类错误因为错误信息和源代码逐行对应,所以比较好找。  

 

 

 

 


  2 运行错误
复制内容到剪贴板代码:
HTTP Status 500 -   

--------------------------------------------------------------------------------  

type Exception report  

message   

description The server encountered an internal error () that prevented it from fulfilling this request.  

exception   

org.apache.jasper.JasperException  
  org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)  
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)  
  org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)  
  org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)  
  javax.servlet.http.HttpServlet.service(HttpServlet.java:802)  

 

 

 


root cause   

java.lang.NullPointerException  
  java.math.BigDecimal.compareTo(BigDecimal.java:2406)  
  com.goodtp.sales.html.Order.getOrderItem(Order.java:146)  
  com.goodtp.sales.html.HtmlOrder.saveOrder(HtmlOrder.java:214)  
  org.apache.jsp.saler.saveOrder_jsp._jspService(saveOrder_jsp.java:180)  
  org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)  
  javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
这个错误最常见,请注意如下这一行  
org.apache.jsp.saler.saveOrder_jsp._jspService(saveOrder_jsp.java:180)  

  错误在 saveOrder_jsp.java 的 180行, 怎么找到这个文件呢  
    
  这个文件就在 tomcat/works/ 目录下面,你可以在这个目录下面搜索文件,就能找到saveOrder_jsp.java  
  打开后,找到 180行,就可以看到到底是哪里出了问题了。  

  对于eclipse集成Tomcat调试的, 这个文件不在 tomcat目录下面,而是在  
eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work  

  实在找不到,就全盘搜索,一般也就1-3分钟的事情。  

 

 

 



  问题找到了,怎么调试呢?  

  我们假设你没有用过log工具,我们现在就用最简单的 System.out.println() 来做  

  比如NullPointerException, 那证明那一行的调用方法的对象是null,  
  int id = order.getId(); //  

  你可以修改成  
  System.out.println("order="+order);  
  int id = order.getId();  

  运行,你就能在控制台看到  
  order=null 的输出,从而确定 order并没有被正确的赋值。  

  然后以这里为起点,逐步往前面查找,看看到底是哪里给order赋值的。比如找到  
  Order order = orderService.find(orderId);  
    
  这也许是因为 orderId对应的order根本没有啊,也许是orderId取错了参数。  
  修改为  
  System.out.println("orderId="+order);  
  Order order = orderService.find(orderId);  

  运行,输出为  
  orderId=35  

  查看数据库,如果不存在35号数据,可以肯定参数错误,如果存在,可以肯定是 orderService.find() 方法里面出现了问题。查进取  


  这就是最基本的jsp调试方法.  

  对于java应用,比如Swing, Eclipse提供了集成单步调试工具,就更方便了。  


  随着经验的积累,就会很快的找到问题的原因,而且同样的错误,你也会降低极大的再次出现的几率

典型客户
JAVA技术
 
域信息科技提供专业的jsp空间服务,jsp空间,jsp空间租用,jsp空间购买,虚拟JSP主机,jsp主机,独享TOMCAT,JSP服务器
售前电话:400-004-4994
售后电话:400-004-4994
技术支持(7×24支持):400-004-4994 018241839456
公司地址:阜新市中华路65号新天地大厦9F
邮编:123000       传真:0418-2493388-606
经营性ICP证:辽B-2-4-20070114    ICP备案: 辽ICP备07005704号
域信息科技提供专业的jsp空间,虚拟JSP主机,jsp主机,独享TOMCAT,JSP服务器
域信息科技提供专业的jsp空间,虚拟JSP主机,jsp主机,独享TOMCAT,JSP服务器