日期:2014-05-20  浏览次数:20719 次

新手提升JSP技术能力的一点建议
原文地址 http://www.java2000.net/viewthread.jsp?tid=223
这里帖子不能编辑,如有建议或修正,我会在那面更改。
-----------------------------

一 如何快速提升自己的技术能力 
做项目。 自己假设的也算。 

比如你要做一个论坛,像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.
可以看到在第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目录下面,而是在