2011年11月20日 星期日

Java MVC sample #1

前陣子因為公司長官的要求,現在負責訓練新進JavaEE工程師的training
目前大部分新進同仁都會被派駐在user site,提供資訊服務,如軟體開發、實作等
所以讓新進同仁能快速學習到實務上會遇到的情形是一大重點

因此takeshi寫了個簡單的sample project,期望此sample project能滿足以下目標
  • Trace code:在大多數情況,要先看懂前人寫的code,比自己會寫還重要
  • MVC Design:現今的資訊系統開發,大多有使用到MVC Pattern,但剛出社會的新鮮人可能還沒碰過
  • Requirement Change:在新人看懂sample project之後,takeshi會提出新功能需求,請新人依據此sample project之MVC架構,直接長出新功能並驗收
  • 熟悉工具:Eclipse IDE、WTP、Tomcat和Debugger(不是開玩笑的,takeshi還真遇到有不少人不會用debugger...)
  • Container的使用:本sample project #1有使用到Tomcat的安全性服務,takeshi在實務上也看到不少實作都是用自己開發的元件來作,但takeshi想提醒的是Java Container的功能遠遠比我們想像的還多...
  • 尋序漸進: sample project #1是簡單版本,尚未套用任何framework,主要是讓新人知道,使用JavaEE Web Spec.是如何實作出MVC架構的,之後還有#2(Flex版本,希望未來有空時,再加上其它的版本)
接下來是重頭戲啦~以下介紹如何使用Sample Project #1

1. 下載 Sample Code
1.1 sample code在這裡,SVN Borwser在這裡
1.2 接著把程式training01.zip解壓縮並匯入到Eclipse中

2. 設定Tomcat
2.1 Tomcat版本6.0.x,在這裡下載
2.2 因為本專案使用到Tomcat安全性服務,所以要另外下載設定檔在這裡
在ZIP檔案中有三個檔案
server.xml 要複製到 ${TOMCAT_HOME}\conf\
h2-1.2.121.jar 要複製到 ${TOMCAT_HOME}\lib\
keystore 要複製到 ${user.home} \
當然你也可以改成你要的路徑,也請一併更改server.xml的94行
<Connector SSLEnabled="true" clientAuth="false"
 keystoreFile="${user.home}/keystore" keystorePass="changeit"
 maxThreads="200" port="8443" 
 protocol="org.apache.coyote.http11.Http11Protocol" scheme="https"
 secure="true" sslProtocol="TLS"/>
2.3 如何使用SSL登入Tomcat在這裡,如何使用JDBC Realm在這裡
2.4 把Tomcat加入至Eclispe的WTP中,待會執行Sample Project時,Eclispe會把project佈署在Tomcat裡執行

3. 資料庫設定
假如是測試或學習的目的,takeshi很喜歡使用H2 DB,它非常輕量(一個JAR檔,h2-1.2.121.jar),且在embedded mode還可支援多個連線(不像Derby或其它DB)
3.1 運行H2 DB,把${sampleProject#1}\trainingWebAp02\docs\db\createData.sql檔案中的SQL Script丟到H2 DB執行
3.2 會長出以下Schema和相關測試資料


4. 終於可以執行專案了!
執行和操作方式粉簡單,如下影片所示

5. 在本專案主要使用到的技術和架構如下

 需要特別注意的是
  • MVC分別由 Biz/Data Integration Tier代表Model和Controller,Presentation代表View
  • Presentation只能使用JSP/EL,儘量不在View裡撰寫Java code(Scriptlet),如邏輯相當複雜,可考慮使用javax.servlet.jsp.tagext套件求解(SimpleTagSupport等類別)
  • 由Biz/Data Integration Tier來同時處理Request/Response/DAO等工作,之後的Sample會再切分

今天就先寫到這吧,之後takeshi會在把Sample Project #2給放上來~

沒有留言:

張貼留言