熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Jakarta Struts簡介(一)

2013-11-23 20:39:09  來源: Java開源技術 

  Web應用開發早期曾經是那麼的簡單那個時候還只是純HTML頁面和浏覽器特效而已由於還涉及不到動態數據操作和商業應用也就省去了很多麻煩但是這樣的簡單只是過眼雲煙如今我們不得不為復雜的基於Web的商業應用開發采用諸多技術
   本文將介紹如何利用Struts進行應用開發的前台整合的開發過程Struts是一個為開發基於模型(Model)-視圖(View)-控制器(Controller)(MVC)模式的應用架構的開源框架(譯注)是利用Java Servlet和JSP構建Web應用的一項非常有用的技術
   閱讀本文需要讀者具有以下幾方面的開發經驗JSPServlet自定義標簽庫(custom tag library)和XML如果讀者想補一補自定義標簽庫的知識可以參考作者以前關於這方面的文章而本文也是關於介紹如何使用Struts系列文章的上半部分本系列暫定分為上下兩部分
  
  新手上路注意事項
   Struts是一個基於Sun JEE平台的MVC框架主要是采用Servlet和JSP技術來實現的其最初萌芽於Craig McClanahan的構思誕生至今也一年有余了(譯注)現在Struts是Apache軟件基金會旗下Jakarta項目組的一部分其官方網站是由於Struts能充分滿足應用開發的需求簡單易用敏捷迅速在過去的一年中頗受關注Struts把ServletJSP自定義標簽和信息資源(message resources)整合到一個統一的框架中開發人員利用其進行開發時不用再自己編碼實現全套MVC模式極大的節省了時間所以說Struts是一個非常不錯的應用框架
   目前的Struts 修正版包括完整的文檔既可以說是用戶文檔又是開發指導文檔如果讀者是JSP新手或者對MVC設計模式不是太熟的話可能剛上路時會比較慢不過不用擔心要相信自己會盡快趕上的:)
   此外應該注意到盡管當前Struts只是但已經相當穩定了作者從Struts 版就在一個大規模的項目中應用了(最近升級到版)至今還沒有遇到什麼麻煩問題實際上Struts在這個要開發復雜用戶界面的項目中為我們團隊大大的縮短了開發時間在此衷心的感謝Struts項目團隊的所有開發人員
   哦還有如果讀者開始上路了要知道Struts的郵件列表可是有相當分量的在這裡混混才可保證能及時跟上Jakarta項目的最新動態哦
  
  
  開始上路!
   Struts框架可分為以下四個主要部分其中三個就和MVC模式緊密相關
   模型(Model)本質上來說在Struts中Model是一個Action類(這個會在後面詳細討論)開發者通過其實現商業邏輯同時用戶請求通過控制器(Controller)向Action的轉發過程是基於由strutsconfigxml文件描述的配置信息的
   視圖(View)View是由與控制器Servlet配合工作的一整套JSP定制標簽庫構成利用她們我們可以快速建立應用系統的界面
   控制器(Controller)本質上是一個Servlet將客戶端請求轉發到相應的Action類
   一堆用來做XML文件解析的工具包Struts是用XML來描述如何自動產生一些JavaBean的屬性的此外Struts還利用XML來描述在國際化應用中的用戶提示信息的(這樣一來就實現了應用系統的多語言支持)
   好下一步咱們來看看構成這個框架的各個部分以及相互之間是怎樣運作的吧!
  
  搞定配置先
   在使用Struts之前咱們必先設置好JSP服務器以便讓服務器在用戶請求時知道該如何將指定後綴的請求轉到相應的Controller-Struts ActionServlet處理當然這些配置信息都一般在服務器啟動時通過webxml文件讀入的我們可以在webxml定義多個Controlloer為每一個應用定義一個一個典型的webxml文件配置如下其中有相應的注釋很好懂的在後面討論Action的時候我們將主要分析strutcconfigxml
  <webapp>
   <servlet>
  <!
  以下配置信息聲明了Struts中的ActionServlet即一個名為OreillyAction的Servlet其具體實現為orgapachestrutsactionActionServlet在這個配置中還有這個Servlet的兩個參數debug level和detail此處這兩個參數的值都設為了此外還設置了在啟動載入時創建兩個實例
  >
  
    <servletname>OreillyActionServlet</servletname>
    <servletclass>orgapachestrutsactionActionServlet</servletclass>
    <initparam>
     <paramname>config</paramname>
     <paramvalue>/WEBINF/strutsconfigxml</paramvalue>
    </initparam>
    <initparam>
     <paramname>debug</paramname>
     <paramvalue></paramvalue>
    </initparam>
    <initparam>
     <paramname>detail</paramname>
     <paramvalue></paramvalue>
    </initparam>
    <loadonstartup></loadonstartup>
   </servlet>
  <! 
  設置所有後綴為action的請求都轉發到OreillyActionServlet
  >
  <servletmapping>
    <servletname> OreillyActionServlet </servletname>
    <urlpattern>*action</urlpattern>
   </servletmapping>
  <! 
  將初始請求頁面設置為loginjsp
  > 
  <welcomefilelist><welcomefile>loginjsp</welcomefile></welcomefilelist>
  <! 
  設置Struts的JSP頁面要用到的標簽庫和她們的路徑
  >
   <taglib>
    <tagliburi>/WEBINF/strutsbeantld</tagliburi>
    <tagliblocation>/WEBINF/strutsbeantld</tagliblocation>
   </taglib>
   <taglib>
    <tagliburi>/WEBINF/strutshtmltld</tagliburi>
    <tagliblocation>/WEBINF/strutshtmltld</tagliblocation>
   </taglib>
   <taglib>
    <tagliburi>/WEBINF/strutslogictld</tagliburi>
    <tagliblocation>/WEBINF/strutslogictld</tagliblocation>
   </taglib>
  </webapp>
  
  控制器(Controller)
  Controller是這個框架中扮演交通警察的角色當客戶端與服務器有交互動作時都由她來控制Controller將HTTP請求封包並轉發到框架中相應的對象這些對象可能是一個JSP頁面或一個Action
   Controller在webxml中設置為orgapachestrutsactionActionServlet的一個實例在本例中這個實例就是OreillyActionServlet在一個完整的控制過程中也就是處理一個HTTP請求時在控制過程之初這個Servlet會從一個配置文件strutsconfigxml中獲取請求與控制動作向對應的配置信息這個我們會在後面詳細討論Controller通過這些配置信息來決定HTTP請求該往何處轉發而這些Action在接收到轉發來的請求後實現真正的商業邏輯我們要注意的非常重要的一點是Action對象要能夠調用這個ActionServlet的若干方法通過這個有力的特性當Action對象在控制過程中將請求再向別的Action對象轉發時(最初的請求是由ActionServlet獲取向Action對象轉發而Action對象還可以再轉發到別的對象)我們可以將一些需要共享的數據對象通過調用一些方法放入這個Servlet相關的一些標准容器中捎帶過去
  
  
  模型(Model)
   所謂Model就是在對用戶請求的整個控制過程中真正處理用戶請求並保存處理結果的對象在整個過程中我們一般利用JavaBean來把一些信息保存起來以便在各個對象之間傳遞因為在框架中Model對象是真正處理商業邏輯功能的對象因此也就是框架中應用需求實現相關性最大的部分在Struts的實現裡Model的具體表現形式就是ActionForm對象和與其對應的Action對象了對用戶提交表單的數據進行校驗甚至對數據進行預處理都能在ActionForm中完成通常的應用中一般是一個Model對象和一個請求頁面對應的關系但也可以一個Model對象對應多個頁面請求如果strutsconfigxml配置文件沒有指定一個Model對象對應的Action那麼控制器將直接把(通過Model對象完成數據封裝的)請求轉到一個View對象
  
  strutsconfigxml
   前面多次提到的strutsconfigxml配置文件是整個框架的主心骨webxml文件定義了一個請求到來應向何處轉發後後面的工作就全權由strutsconfigxml管理控制了可以說strutsconfigxml就是整個Struts框架的扛把子(譯注)只有這位老大清楚所有請求與動作的映射關系要是他哪裡沒有搞定或不爽的話整個社團就什麼也擺不平了:)如今的應用系統XML形式的配置文件越來越多如果整個系統只使用一個這樣的配置文件的話那麼保持整個系統的模塊化和可維護性都非常的輕松使用配置文件來描述請求動作的控制過程和相互關系而不是在代碼中將對象之間的調用關系寫死那麼都應用系統有變動時我們只用修改配置文件就行了而不是再重新編譯發布程序了
   Controller通過strutsconfigxml文件的配置信息確定當有請求時應該調用那個對象來處理從效率的角度出發這些信息都是在系統啟動時讀入並存在內存中的下面我們將講解一個極短小的strutsconfigxml文件文件中定義了一個與登錄請求對應的登錄動作請求到達後將被轉發到comoreillyuiauthenticationactionsLoginAction這個Action對象該對象處理
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28837.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.