最近又发现了许多人提问JSP里面遇空指针的问题,突然想起我还不是小版主时,就写过一个类似的文章。不过那时没有引起太大的反向,也就冷清了。今天利用【特权】加为精华。
同时将此文发布到博客上,希望对初学者掌握一定的调试技巧有帮助。
原文地址:http://www.java2000.net/viewthread.jsp?tid=223
论坛地址:http://topic.csdn.net/u/20080107/09/30190cef-a255-43ac-ad78-4e5201791019.html?seed=1724603974
声明:此文为2008年1月7日的帖子,部分内容在我以后发布的帖子中出现了。此文可以看作陈年老帖了。
一 如何快速提升自己的技术能力
做项目。 自己假设的也算。
比如你要做一个论坛,像CSDN 这样的。 在制作过程中,你会遇到非常多的困难。
你的代码结构也会变动很多次,我说的是结构,代码就变动更多了。
遇到问题,首先到搜索引擎上去搜索,我只去google,可以确定一点,
你绝对不是第一个遇到这个问题的人,也不是最后一个。
只有自己通过努力思考,搜索,最终掌握的东西才真正是自己的。
自己实在想不通,也找不到(因为不会找,而不是没有),再到论坛,QQ什么的,找其它人帮忙
问题也会局限在某个技术点上,毕竟你已经自己思考过了,别人稍微一点拨,你就会豁然开朗的。
那些直接问,这个功能怎么做啊的,基本都不是自己认真思考过的,否则他只会问,谁知道XXX的地方,怎么弄才能达到YYY的效果?
另外,英文是不不可少的,看到那么多人带着异常来求救,真是....
二 关于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.
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)0
顶一下0
踩一下