2012年8月19日 星期日

[log] 久違的講課:Java Web & JDBC


因為答應了要替朋友去上課,內容是我幾乎不太寫的 Java Web。一方面是工作的主軸早就不是寫 Java Web 的內容,另一方面寫 Java Web 有它痛苦的地方。趁機寫寫課後心得作為之後上課的參考 :)

..
..

內容主要為 JDBC Programmaing 與 Web Programming 二個部分。JDBC 簡單地示範基本的 API 使用後,下一個範例就直接切入使用 Connection Pool、Commons DBUtils,在 Web 方面也是相似的安排,但多加了個不倚懶 Servlet API 完全由土炮簡單的 Web Server,並設計 Handler Class 開始。

這是我自己覺得『理想』中的 Java Web Programming 的學習路線,當然這個單純寫書教導 Java Web Programming 是不同的目標。書本需要帶給人最完整的知識,即使不值得使用的技術也是需要列上去,通常也包含大部分 API 的說明,同時也有許多為人詬病的功能。

就以 JSP 來說,它一開始的目標是為了解決 Servlet 沒有好用的 template engine 解決方案,但卻 release 了許多超出一個 template engine 本身應負擔的功能。這能想像成是一種變形的『破窗效應』,自從有人在專案內寫 scriptlet 做一些稍為複雜的邏輯後,scriptlet 就成為一種惡名昭彰的存在,而 JSP 也提供自訂 taglib 的功能,而在規格內的 JSTL 就有許多不適合在 JSP 內使用的東西,像 Database Query。在些不見得需要的功能就必需在寫書或教學時展示它,在這次的內容安排,我僅使用了 EL 與 JSTL Core 或一些變數的判斷與顯示,像是檢查使用者有沒有登入的 if 與顯示 TODOs 的 forEach 這類簡單的邏輯,若未來課程有提到 i18n 頂多再加個 fmt 相關的 taglib,還有些性質相近或易混淆的功能就不提,像是 include 部分就只教 JSP Directive include。JSP Action 或 JSTL 的 include 就完全不在內容之中。。以單純做 View Presentation 來說,並不需要太多的功能。

在 JSP 上要寫 Business Logic 其實是非常不得已的,這樣寫不僅讓你的 Business Logic 散落於各 JSP 檔,或是做一些 Java Bean 來處理 Business Logic,但這始終不是個解法。因為整個商業流程還是控制在 JSP 內,採用 Model 2 的型式實作才能真的將邏輯集中,並且較能讓設計清晰、明確。

針對 Model 2 的部分,我選用的例子是改寫原 Model 1 的例子而來。它不單純是將 request 對象改成 Controller (Servlet),而是仿 Web Framework 做 Action Mapping 的方法,透過 Servlet 進行 matching & dispatching。我們有個『微型』的 Web Framework,並直接在程式內 hardcode mapping,儼然是個小巧可用的 Web Framework。若曾寫過 WebWork 的人,可能會找到一點熟悉的感覺。

實際上執行起來發覺時間有限。也許是我把 4 小時想得太長,而對於學生能跟得上實作的時間估得太短。這樣的教學效果不盡理想。過程中有些小狀況,像是安裝課程要使用的 mysql,因為學生之前專案有先安裝過,所以同時裝另一份 unzip 版就會出現許多奇怪的現象。另外,自己沒有 win 7 的環境,也缺乏在同樣的環境測試是否 lab 能做得起來的機會。這些意外倒是比較可惜的地方。這部分的改進方案,是採用 embedded db,像是 h2。減少練習地安裝 mysql 不成功的變數。


沒有留言:

張貼留言