[Jsp技巧]看到錯誤碼?找到Exception位置呢?

剛開始學習jsp時,看到了Exception就一個頭二個大,因為好像跟一般Java出現錯誤的表示方式不一樣,Exception的訊息寫的錯誤行數,總跟jsp裡的行數不太一樣?這樣子就不好判斷Exception產生在那裡,進而修改了!

其實不然,在執行jsp網頁時web-server會把jsp檔先轉換成java檔,再由java檔編譯成class檔,所以要找出錯誤的地方就只需要找到java檔的所在,就可以了。

範例使用的環境是tomcat,Exception直接向網頁丟出,會看大概如下的畫面

errorcheck4.png
Read More

[教學]jsp Web的檔案上傳-FileUpload

這是一個簡單的fileupload程式,把整個upload動作都包裝在UploadTool這個class裡,而在jsp裡再call此class來做檢查及上傳等動作。jar檔需放置WEB-INF/lib/裡,而程式complier後放置WEB-INF/classes/toolkie/裡。

首先需要二個第三方的jar檔 Apache FiluploadApache common io 都下載Binary的jar檔就可以了

檔案的配制結構如下圖:

tomcat文件配制圖

再來利用下面的程式來進行上傳作業

Read More

[jsp小技巧]利用Throw Exception來完成Ajax

一般在寫Ajax時,最直覺的使用方法就是利用Ajax Object來要求Server給與回應, 再依回應的內容解西倒底是完成動作?還是有錯誤產生,如必填欄位未填。

這裡介紹一個小技巧,在編譯式的網頁伺服器語言可能比較合適使用。

大概的原理是利用程式在執行有錯誤時Throw Exception來當做錯誤訊息, 回傳給client,而client只要接收到503的錯誤,則就可以知道動作並未完成, 反之則是完成。

範例使用prototype來使用Ajax,傳送及回應,有需要可以參考:

Ajax 使用prototype.js 1

以下是載行結果,當有填值時,則回應填寫的值,

沒填值的時候就回傳錯誤訊息。(Exception)

1
2
Read More

java.sql.ResultSet absolute造成out of memory

java.sql.ResultSet 使用absolute方法可以移動ResultSet的指標到想要的筆數,

當 JDBC跟資料庫要資料時,會回傳一個ResultSet,但不是把所有查詢的結果均回傳至Web Server端,

而是只給前面幾筆資料,可以利用ResultSet的方法setFetchSize來設定一次回傳的筆數,

(一次傳的多,等待的時間就比較長,傳的太少,要一直跟資料庫要ResultSet.next()也會比較慢)

當ResultSet向下移動碰觸或是快要碰觸到目前回傳的筆數時,會自動再跟資料庫要設定好的筆數,

而把目前筆數以上的資料全都暫存在記憶體裡。

以上是ResulSet的基本原理,當一次查詢的量夠大時,而利用absolute來移動到想要的Row時,

就有可能發生out of memory的問題,

舉個列子:

Read More