本週感想 -- J2EE or .NET ?!
最近, 蔡學鏞先生發表了一篇 該學Java或.NET?. 我自己是鑽研 Java 的工程師, 看到這篇文章, 不免有點感慨, 當年是 Java 週報的專欄作家, 今年 JavaTwo 2003, 也有上台當講師, 說真的, 當年 "寫程式還不如去賣雞排" 一文說到了所有軟體工程師的心聲而聲名大噪的他, 如今為何會寫出這麼似是而非的邏輯, 實在讓我納悶....


很多時候, 大家都迷失在意識型態的爭論之中, 我總是希望自己能夠站在公平的地方來面對所有的問題, 客觀地分析以及了解問題的癥結與可以改進的方向, 我很想真的了解 .NET 的好處, 至少有一個充足又有力的理由告訴我, .NET 是值得學習的, 值得去研究的..





我分別針對這篇文章做了一些分析與建議, 都放在我的部落格之中 , 2003/11/102003/11/13 的日誌中. 如果大家有任何指教, 可以直接留言和我討論...


還是有一種失落感....


閱讀完這篇文章之後...


心中的一個巨星已經殞落...





jini(99% jakarta) 的部落格 -


簡體中文版 -


松凌科技 -





本週主題 -- struts 系列(IV) -- jPolls 投票區
SECTION 01 投票區簡介

在一個網站, 除了商品的展示及交易的功能, 我們還可能會附加一些社群的功能, 來增加彼此溝通成長的互動機制, 例如留言版, 討論區等等, 而今天我們要介紹的是線上民調, 也就是投票的機制, 也可以稱之為線上問券系統.. 來調查使用者對於一個問題的看法, 例如


"你覺得 Java 還是 .Net 有前途?"


Java
NET
兩者都有前途
其他架構





使用 Java 製作相關的投票系統有很多, 我僅僅列出幾項.. 我這次將介紹 jPolls, 這個簡單的系統卻包含了完整的設計架構, 如果想要設計公司內部的架構, 可以先研究這個專案的 source, 他的特色有 :
  1. 使用 Struts 作為 MVC Framework
  2. 使用 Hibernate / Castor-XML 處理 O/R Mapping
  3. View 端採用 Display TagCewolf Charts Tag 等等處理.
架構清晰, 可以讓大家對於 struts 的應用更加明白, 進而創造更多更人性化的產品. 一同為 Java Opensource 界努力 .


SECTION 02 jPolls 的安裝

. 目前版本 2.4.1, 由此下載 war 及 pdf 檔案


當你下載完成該 war 檔案, 直接放到 Tomcat4 的 webapps 目錄之下, 就會自動 deploy polls 這個 webapp, 接著使用瀏覽器連結 http://localhost:8080/polls 就可以看到以下的畫面了.





SECTION 03 I18n 中文化

Struts 能夠在全世界風行的原因除了架構清晰, 開發簡單, 資源充足之外, 還有一個最重要的原因就是 Internationalization ( I18n ) 國際化. 所以, 我們先來了解, 如何快速地修改成中文.


在 struts-config.xml 中, 有這麼一段 code, 就是說, 所有 Message 都是由此取得.
<message-resources parameter="org.sf.polls.PollsResources"/>
使用 NetBeans 是最方便處理 i18n 的 IDE 工具, 因此我們開啟 NetBeans Mount WEB-INF/classes/ 進來, 打開到 org.sf.polls.PollsResources, 按下右鍵 Add Locales..





選擇 zh_TW 中文台灣, 或是 zh_HK 中文香港, zh_CN 中文/中國. 後按下確定. 他會根據 default 產生相同的內容在你新建的 properties 中, 存檔後, 也將發現有一個 PollsResources_zh_**.properties 的檔案在該目錄之下. 好的, 接下來就是考驗你的英文能力了, 將每個屬性設定你認為的中文意思. 當然你也可以採用 native2ascii.exe 來轉換你的 properties 編碼.


附註:
  • zh_** 可能是 zh_TW / zh_HK / zh_CN
  • 存檔完成後, 需要重新啟動 tomcat



SECTION 04 Poll.hbm.xml 與 Poll 的關係

在 /src/org/sf/polls/ 目錄下, 有 Poll.hbm.xml 與 Poll.java, *.hbm.xml 是 Hibernate 的定義檔,
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>

  <class name="org.sf.polls.Poll" table="poll">
    <id name="id" column="id" type="long">
         <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="heading"/>
    ............................
    <property name="locale"/>
    <set name="resultsList" cascade="delete" lazy="true" inverse="true">
      <key column="poll_id"/>
      <one-to-many class="org.sf.polls.Results" />
    </set>
  </class>

</hibernate-mapping>
在這裡定義了 org.sf.polls.Poll 對應到資料庫中 poll 的 table, 並且和 org.sf.polls.Results 是一對多的關係, 中間採用 poll_id 為 foreign key. Hibernate 是一個非常強大的 O/R Mapping 工具, 未來有機會將在電子報中做他的專門討論. 不過在這裡的基本意思就是由 poll table 取出資料, 會產生 org.sf.polls.Poll Persistent Object, 可以在 org.sf.polls.storage.HibernateDAO.java 中看到相關 hibernate sql 的語法.
  public Poll getPoll( Long id ) throws DAOException{
    try{
      return (Poll) retrieve( Poll.class, id );
    }catch(Exception e){
      throw new DAOException( e );
    }
  }
而我們在程式中就可以根據 Poll 來進行處理運算接著做顯示. 另外, 在這個專案之中, 為了方便切換各種 O/R Mapping 的工具, 特別撰寫了一個 SetupDAO 的 Struts Plugin, 有興趣的也可以直接參考.


SECTION 05 Struts Action 的處理

這個專案中, 他做了一個 BaseAction, 通常我們會採取這種手段, 讓所有開發的 Action extends BaseAction, 這樣如果要增加共用性模組的檢核, 判斷或資料處理等等, 都可以簡單的在 BaseAction 中做完. 另外他也有用到 token 的檢核機制, 這個檢核是為了避免因為網頁 Reload 而造成的重複 Insert,


Token 的觀念很簡單, 在產生資料輸入頁面之前, 你在 Action 之中加入 saveToken( request ); 你的 <html:form> 轉換成 HTML 之後就會帶有 org.apache.struts.taglib.html.TOKEN 的 Session 數值, 接著, 當你按下送出的指令, 我們就寫 isTokenValid( request ),他就會根據 Server 上的 SessionData 與 request 中的 parameter 做比較, 如果是相同的, 就會回傳 true ( 合法 ), 反之回傳 false. 接著, 你還需要 resetToken( request ) 就可以避免重複下單了.


SECTION 06 一些 taglibs

這個專案, 大量地使用許多 taglibs, 其中有 Display Tag 與 Cewolf Chart Tag, 這兩個都是 sourceforge.net 上面著名的專案, 我本身認為 Display Tag 處理 Table 的能力非常高也很好看, 而 Cewolf 是簡化複雜的 jFreeChart 所設計的 Taglibs, 只需要透過簡單的 Taglibs 呼叫, 就可以產生漂亮的圖表了.


而最重要的一件事情, 這個專案所做的是 Model II MVC Framework 的範例, 在 View 端幾乎不做任何的商業邏輯處理, 並且採用通用的 taglib 作為 Web UI Component 來處理, 所以我們在 Action 之中, 必須將資料準備好, 放到 page/request/session/application 等等 scope 之中, 讓 jsp 透過 taglib 來呼叫產生相關的頁面呈現.


SECTION 07 結論

其實, 我都沒有說到 jPolls 該怎麼操作, 我根本不在乎他怎麼操作, 因為他只能算是一個範例程式, 使用了許多 opensource 作為集合, 讓大家對於整體的網站程式架構有所了解.. 不過在 Action 之中, 他寫得又雜又亂, 說真的, 我很討厭這種一個 method 超過一頁可視範圍的程式, 如果配合一個 Design Pattern 來抽出商業邏輯流程, 這樣反而可以更輕易地更換 Struts Framework 到其他的 MVC Framework, 不過呢, 或許就是這麼簡單明瞭的架構, 反而可以讓初學者更加快速了解 Struts + Hibernate 如何搭配應用吧 ~~~
參考 -- 相關書目或相關文章

  1. struts
    http://jakarta.apache.org/struts/
  2. jPolls
    http://www.jpolls.net/
贊助 -- 如果你覺得這個電子報對你有幫助, 可以匯款贊助, 如果需要刊登廣告, 也可聯絡 !
匯款帳號 : 第一銀行 板橋分行 201-10-071238

帳戶名稱 : 松凌科技股份有限公司

聯絡電話 : (02)8951-9554 # 121 王先生

聯絡Email: johnny@softleader.com.tw

人才招募 -- 松凌科技 徵才



>>徵求 Java 工程師 1 名<<



徵求有心向學的 Java 工程師加入我們的行列, 本公司的 Framework 採用 Struts 為基礎, 主要著重於 J2EE 相關系統開發 及 金融資訊的資訊整合應用, 目前的產品涵蓋了證券/期貨/基金 及 EIP/CMS 等, 工作內容以 WEB-Based J2EE 程式設計為主, 歡迎大家的加入.


應徵職稱: Java 軟體工程師

員工福利: 享有勞健保, 保障 14 個月年薪, 股票分紅等福利.

工作年資: 不拘, 也歡迎剛退伍或畢業的新鮮人加入

性別: 不拘, 只要能夠吃苦耐勞即可

人格特質: 聰明, 外向, 肯拼, 肯學

學經歷需求: 大專學校資訊相關科系畢業尤佳, 或具有 SCJP 認證, 有 SCWCD 將優先錄用

基本技能: JSP, MVC 概念, 了解 Struts 者優先錄用

聯絡電話: (02)8951-9554 #9 陳小姐

聯絡Email: yvonne@softleader.com.tw

履歷格式: http://www.softleader.com.tw/resume/resume.doc

廣告 -- 松凌科技 獨家贊助



>>軟體生產力提升計畫 -- 企業包班方案<<



如果你們公司正在想要轉型成為 java 的軟體公司,

或是已經採用 java 卻發現不得其門而入,

甚至工程師一直無法突破瓶頸,

松凌科技技術顧問團隊將帶領你們技術人員在五天的課程中,

了解整個 j2ee 的概觀以及標準的開發流程.



課程名稱: 建立 J2EE 標準的開發流程

課程編號: SLJ-021

課程時數: 40 小時

課程規劃:
  • J2EE 架構與概觀
  • 使用 Struts 建立一套完善的 MVC Framework
  • 建立自己的設計模組 Design Pattern
  • 使用 Hibernate 建立 O/R Mapping 的環境
  • 透過 JSTL 處理頁面端邏輯
  • 實作教育
基本開班人數: 10 人

收費標準: 每人 30,000 元, 超過一人酌收 5,000 元 ( 含稅, 大台北地區外需加上車馬費 )

聯絡電話: (02)8951-9554 # 111 陳先生

聯絡Email: kevin@softleader.com.tw

政府補助: 短中期輔導課程, 可申請軟體策進協會補助約 50% 的教育訓練費用

快速訂閱 -- 覺得好就訂閱吧~~~~
目前訂戶數: ; 目前發報數: ;
欣賞之前發行電子報 ;
投票區 ~ 覺得好就投票吧 !
有夠讚 不錯啦 普普說 蠻爛的 爛到最高點