新手提升JSP技術能力的一點建議

來源:互聯網
上載者:User
新手提升JSP技術能力的一點建議 一 如何快速提升自己的技術能力
做項目。 自己假設的也算。

比如你要做一個論壇,像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目錄下面,而是在
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提供了整合單步調試工具,就更方便了。

  隨著經驗的積累,你會很快的找到問題的原因,而且同樣的錯誤,你也會降低極大的再次出現的幾率。

三 ClassNotFoundException 的解決方案
  classpath問題,對於jsp,最大的可能是因為你的jar沒有放對地方,對於tomcat 有2個地方可放
  a) tomcat\shared\lib 目錄 tomcat 5.5版本 或者 tomcat\lib目錄 tomcat6版本 
  b) 你的應用的 WEB-INF\lib 目錄 推薦放在這裡。

  如果你不確認需要哪些jar,就把hibernate隨包帶的都複製過去就行了。 雖然不推薦,但對於初學者,也是一個臨時的解決方案

四 最常見的幾種問題和解決方案
  1 字串的== 判斷,應該用 equals() 進行
  2 ResultSet 使用前忘了 rs.next();
  3 資料庫連接沒有放在 finally{} 裡面關閉
  4 沒有判斷每個方法的傳回值,造成程式隱患

來源:http://www.java2000.net/viewthread.jsp?tid=223

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.