剛開始學習jsp時,看到了Exception就一個頭二個大,因為好像跟一般Java出現錯誤的表示方式不一樣,Exception的訊息寫的錯誤行數,總跟jsp裡的行數不太一樣?這樣子就不好判斷Exception產生在那裡,進而修改了!
其實不然,在執行jsp網頁時web-server會把jsp檔先轉換成java檔,再由java檔編譯成class檔,所以要找出錯誤的地方就只需要找到java檔的所在,就可以了。
範例使用的環境是tomcat,Exception直接向網頁丟出,會看大概如下的畫面
可以看到錯誤是java.lan.NullPointException,就是有null的空指標錯誤(翻的不好,應該不能叫指標,java沒有指標)
錯誤訊息由圖上方至圖下面,一個程式一個程式向上丟出的錯誤訊息,也就是說org.apache.jsp_connect_jsp.jspService向org.apache.jasper.runtime.HttpJspBase.service丟出它的錯誤,而org.apache.jasper.runtime.HttpJspBase.service再向javax.servlet.http.HttpServlet.service丟出錯誤,以此類推。
找connect_jsp.java:136行,出NullPointException的地方在connect.jsp這隻程式的第136行,其它列的訊息,因為是系統程式,應該不是真的錯誤來源。
java的package結構,如org.apache.jsp ,也是目錄結構。
所以到tomcat目錄下的work\Catalina\localhost\0502\org\apache\jsp裡找到connect_jsp.java這程式,用記事本打開它。
ps.其中Catalina\localhost是預設的目錄,如果有更改config/server.xml內容,有可能會路徑不同。
ps.0502是網頁的子目錄,例如http://localhost:8080/0502/
找到第136號錯誤的地方
result = stmt.executeQuery(qq);這行有NullPointException,再來只要解決這個錯誤就可以了。