用JBuilder9 開發Struts實例

本文將給大家介紹在jbuilder 9 集成開發環境下,如何運用struts framework來開發web 應用程序,我們這裏所說的jbuilder9是指jbuilder 9 developer 與 enterprise兩個版本。



  一、jbuilder 對於 struts 之支持

  jbuilder 提供圖形使用者接口以簡化組件文件 struts-config.xml 之編輯與設定,此外,jbuilder 於 object gallery對話框內的 web 頁次,提供四種精靈以簡化 struts 開發流程。



   struts c wizard:

  可指定 html 或一般 jsp 檔案自動產生使用 struts tag libraries 之 jsp 檔案。

   acti wizard:

  可導入jsp 檔案產生繼承自 acti 之類,或自定義屬性 ( property ) 產生繼承自acti 之類,類產生後可選擇是否自動完成 struts-config.xml 對應設定。

   action wizard:

  可產生繼承自 action 之類,設定搭配之 jsp 檔案、有效範圍 ( scope ) 並自動完成struts-config.xml 對應設定。

   jsp from acti wizard:

  可由指定之 acti 自動產生使用 struts tag libraries之 jsp 檔案。

  除了上述精靈外,jbuilder 可協助開發人員自動設定web.xml 部署描述檔,以便 jsp 使用struts 自定義 tag libraries 。

  二、使用jbuilder開發struts實例

  我們在這裏舉開發一個簡易的 web 應用程序的例子來幫助大家瞭解struts framework。此 web 應用程序允許使用者輸入兩獨立字符串,並將兩字符串連接後顯示於網頁。由於處理邏輯過於簡單,此實例中我們打算直接在扮演 c action 中完成兩字符串連接動作,因此未使用扮演 model 角色之 javabean 或類來處理字符串連接。

  步驟一: 建立 web 應用程序

  首先點擊選擇 jbuilder 集成開發環境主菜單 file | new project… 建立一個名爲strutsdemo 之項目。接着由菜單file | new… 激活object gallery 對話框,並點擊選擇web 頁次中的 web application 精靈準備建立 web 應用程序。



  web application 精靈會爲此 web 應用程序準備妥產生war 所需之部署描述檔 web.xml,war 是 j2ee 規格中用以簡化 web 程序部署複雜度之標準檔案格式。我們爲此 web 應用程序命名爲 demo,往後將會在編譯此項目檔時產生名爲 demo.war 檔案以便於部署,在此 web 應用程序中由於將會用到 struts 之 tag libraries,因此在jsp/servlet frameworks 中勾選struts 1.0,同時jbuilder 會自動設定妥 web.xml。

  步驟二 : 建立自定義之 acti 類

  struts framework 中並未限制 mvc 三部份開發順序,由於此時我們並未準備妥可輸入兩字符串之 html 或jsp,因此先建立儲存信息之 acti 類,再產生扮演 c 角色之 action 類,最後再由 acti jsp 檔案,大家可依狀況調整順序以適應實際案例。點擊選擇object gallery 對話框 web 頁次中 acti 可產生自定義之 acti 類,acti 又可分爲三步:第一步精靈自動偵測出之前已建妥之 web 應用程序demo,我們將自定義 acti 名稱由預設 untitled1acti 修改爲 myacti next 按鈕進入第二步。第二步依照需求將未來 jsp 頁面上所需顯示與輸入的字段加入 field definition 清單方塊中,倘若負責網頁美工專職人員已備妥輸入用jsp 網頁,亦可按下 add from jsp… 按鈕直接導入,jbuilder 將解析此 jsp 檔案產生field definition 表格。本例中由於未準備輸入之 jsp 檔案,因此必須自行加入所需之字段。我們爲此 web 應用程序預先準備三個字段,fielda 與 fieldb 可儲存輸入之字符串,fieldresult 可置放兩字符串連接後結果。設定完成後按下 next 按鈕進入第三步。



  步驟三對話框提示是否將 myacti 加入 struts-config.xml 組件檔中?是否需要產生reset 方法? 可依照默認值按下 finish 按鈕。

  此時 acti wizard 已經自動產生了繼承自acti 之 myactionform.java 檔案,如果我們不打算實現資料覈驗之 validate 方法,我們完全無須撰寫任何程序代碼。




  步驟三 : 建立自定義之 action 類

  點擊選擇object gallery 對話框 web 頁次中 action wizard可產生自定義之 action 類,action wizard 分爲兩步:第一步精靈自動偵測出之前已建立之 web 應用程序demo 與 struts-config.xml 組件檔,我們將自定義 action 名稱由預設 untitled1action 修改爲 myacti 按鈕進入第二步。



  在第二步對話框中,我們可以設定 myaction 的 perform 方法會傳入哪一個 acti name 組合方塊中,所有記錄於 struts-config.xml 中的 acti 都會列出以供選用,此外我們設定 myaction 之有效範圍( scope ) 爲 session,並指明/input.jsp 所有輸入動作,將交由 myaction 處理。

  按下 finish 按鈕後即產生 myaction.java 檔案。在myaction.java 中,jbuilder 已經自動產生了 perform 方法與尚未實現之例外程序代碼,我們將 perform 內的程序代碼做以下之修改,已完成字符串連接的動作:

myacti myacti ;
string sa = myactionform.getfielda ( ) ;
string sb = myactionform.getfieldb ( ) ;
myactionform.setfieldresult (sa+sb) ;
return ( actionmapping.findforward ( "input" ) ) ;

  由於 perform 方法會傳入參數 acti 以便獲知 web瀏覽器內使用者輸入之字符串,在此jbuilder 已將acti 轉型 ( type cast ) 爲 myacti 之程序代碼產生完成,開發人員僅需以 getfielda 與 getfieldb 方法即可得知使用者輸入之字符串,並將連接後結果以setfieldresult 方法回存fieldresult 屬性。return 將決定負責顯示之 jsp 網頁,利用perform 方法傳入參數acti 之 findforward 方法,可用以指定顯示之jsp 網頁。之前精靈對話框中已預設 /input.jsp 爲負責輸入之 jsp 網頁,struts 中允許輸入與顯示同爲一個 jsp 網頁,因此我們需在 struts-config.xml 中定妥名爲 input 之forward 標記,以便 findforward 方法能夠利用此標記得知真正 jsp 網頁名稱 /input.jsp。

  步驟四 : 設定 forward 標記

  點擊選擇 jbuilder 左上方之項目窗格 ( project pane ) 內之struts-config.xml,此時集成開發環境便可以圖形使用者接口方式編輯 struts-config.xml 內容,左下方結構窗格( structure pane ) 會依照 struts-config.xml 結構,分爲 datasources 、form beans、global forwards 與 action mappings四類標記項目。

  當點擊選擇 global forwards 項目後 jbuilder 右方內容窗格( c pane ) 將出現如圖所示之編輯畫面,開發人員可按下 add 按鈕加入名爲 input 之標記,並指明此標記對應路徑爲 /input.jsp。



  對於已經熟悉 struts framework 的開發人員, 若欲直接修改 struts-config.xml 內容,可以點擊選擇內容窗格中的source 頁次,此時內容窗格如圖所示將以文字編輯器顯示 xml 內容,我們可自由選擇習慣之方式維護 struts-config.xml 內容。



  步驟五 : 產生 jsp

  接下來我們將利用現有 myactionform.java 產生/input.jsp,點擊選擇object gallery 對話框 web 頁次中jsp from acti wizard,將出現以三步產生 jsp 之精靈:

  在第一步對話框中,我們可將欲產生的 jsp 檔名由預設之untitledjsp1.jsp 改爲 /input.jsp,並可按下 [ … ] 按鈕以選取 acti 選取對話框有兩種查找模式,我們可以瀏覽 java package 樹狀結構直接選取myactionform。

  或是鍵入java 類前綴名稱,jbuilder 將會自動查找相符之類。例如我們鍵入 myacti 的前綴 my,將可見到對話框查找到兩個相符之類。此一便捷選取類別之對話框,可在jbuilder 編輯器中以熱鍵 ctrl-alt-h隨時激活使用。



  選取 myacti 完畢後,按下 next 按鈕可進入至第二步對話框。jbuilder 將分析myactionform.java 內容顯示其字段,我們可以組合方塊決定該字段將以何種 struts tag 搭配顯示,本例中三個字段皆使用可輸入文字、預設之 text 型態,按下 next 按鈕即進入第三步。第三步對話框針對 struts tag libraries 特性,提供多種選項,並且詢問是否將全部之struts tag libraries 宣告導入至jsp 檔中。本例我們採用默認值,按下 finish 按鈕後 jbuilder 即產生 /input.jsp。

  步驟六 : 設定執行組件

  接着我們可以設定執行組件以測試本程序。點擊選擇jbuilder 集成開發環境主菜單 project | project prosperities… 將出現項目屬性設定之對話框,點擊選擇run 頁次準備設定執行組件。jbuilder 允許在單一項目中擁有多個執行組件,可執行 java applicati applet、j2me midlet 及 j2ee 各式 server 端應用程序。

  本例中將建立一個 server 類型之執行組件。按下對話框右側 new… 按鈕將會出現執行組件屬性設定對話框,以新增一個執行組件。



  執行組件屬性設定對話框中,我們可以鍵入一識別用途之名稱於 name 字段,本例中我們鍵入中文識別名稱 "執行 input.jsp",在 run 頁次 type 組合方塊中可選取server 類型應用程序,由於本例我們採用 jbuilder 內置之 tomcat 4.0 爲 jsp/servlet c server 下拉盒選取 tomcat 4.0。倘若我們的 server 組合方塊中無適當選項可供選取,可於jbuilder 主菜單 tools | c server… 中進行相關設定。接着我們必須選取此 web應用程序激活 uri,我們可按下 launch uri 字段右側 [ … ] 按鈕,即可出現選取 uri 之對話框,我們可直接以鼠標點擊選擇左側 input.jsp,按下 ok 按鈕完成選取,並返回執行組件屬性設定對話框。

  此時執行組件屬性設定對話框中主要項目皆已設定完畢,按下 ok 按鈕返回項目屬性設定對話框。項目屬性對話框中將把前述步驟所設定之執行組件列於runtime c 清單方塊中,按下 ok 按鈕即完成執行組件設定。

  步驟七 : 執行 web 應用程序

  接下來可點擊選擇 jbuilder 菜單 run 或工具列中綠色三角形符號執行此 web 應用程序。jbuilder 將於集成開發環境內激活 tomcat 4.0 server,我們可以通過 jbuilder 內置之 web 瀏覽器進行測試,或於microsoft internet explorer 網址字段中鍵入:

http://localhost:8080/demo/input.jsp

  以進行測試。在 web 瀏覽器中我們鍵入 aaa 與 bbb 按下 submit 按鈕,得到預期之運算結果aaabbb。



  倘若將第一個字段改以繁體中文鍵入,卻發現產生亂碼,字符串連接結果也無法正確辨認。struts framework並無中文兼容性上之問題,但是 tomcat 4.0 在使用 jsp處理內含中文請求時,並需設定請求編碼。繁體中文環境常用編碼爲 big5 與 ms950,ms950 編碼含括 big5 編碼,並額外增加 碁、恆、裏、妝、嫺、鏽、牆 等七字。

  例如,在 microsoft windows 平臺下,欲使 tomcat 4.0 正確處理繁體中文,通常在 jsp 起始處加上:

<%@ page c charset=ms950" %>
<% request.setcharacterencoding("ms950") ; %>

  以設定網頁內容編碼與請求編碼爲 ms950 編碼;類似地,對於簡體中文(常用編碼爲gb2312),以上的代碼應爲:

<%@ page c charset=gb2312" %>
<% request.setcharacterencoding("gb2312") ; %>

  但是 struts framework 中實際上是由 acti 收到web 瀏覽器端請求,再轉交特定之 action 類加以處理,因此直接於 jsp 中設定請求編碼並無效果。



  三、處理中文編碼問題(以繁體中文爲例)

  對於處理 struts framework 中文編碼問題有多種方式,在此我們繼承 acti 類並覆蓋 process 方法,於子類process 方法中設定請求編碼。由此展現acti 扮演前端 c 之特質。

  首先,點擊選擇 jbuilder 主菜單 file | new classes 準備產生一新的類。並繼承自org.apache.struts.action.acti 改爲 myacti ok 按鈕後即產生程序代碼。點擊選擇 jbuilder 主菜單wizards | override methods… 激活覆蓋方法精靈,覆蓋方法精靈會自動列出父類 acti 所有可供覆蓋之方法。我們可於 available methods 清單方塊中選取process (httpservletrequest request, httpservletresp resp 方法,完成後按下 ok 按鈕。

  此時我們可修改覆蓋後 process 方法程序代碼如下:

request.setcharacterencoding ("ms950") ;
super.process (request, resp ;

  備註:此處以繁體中文爲例,在中國國內一般我們用的是簡體中文,因此可以將上述代碼在簡體中文環境下編寫爲:

request.setcharacterencoding ("gb2312") ;
super.process (request, resp ;

  首行程序代碼將 process 傳入之參數 request 設定爲 ms950編碼,其餘行爲同父類。接下來我們將要修改 web.xml部署描述檔,以指定 servlet 之進入點,首先點擊選擇左上方項目窗格中的 web.xml。



  此時,左下方結構窗格將出現 web.xml 內 xml 標記之樹狀結構。我們可以點擊選擇 servlets 內的 action 項目。

  此時,便可運用右方內容窗格之圖形使用者接口編輯器修改 servlet 進入點,目前預設之進入點是 struts framework 的 actionservlet。

  我們可以按下 servlet class 項目右方 [ … ] 按鈕選取新的進入點替換預設之actionservlet,也就是之我們撰寫之strutsdemo.myactionservlet。倘若我們非常熟悉web.xml 結構,同樣地可以直接點擊選擇內容窗格內的 sources 頁次,直接以文字編輯器修改<servlet-class> 標記的內容。

  修改完畢後,內容窗格內應如下圖:



  完成後重新編譯此項目並執行之。再次測試後我們將發現繁體中文已經可以正確處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章