久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2025年度未來銀行科技服務(wù)商TOP100
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

Jakarta Struts應(yīng)用框架介紹

2004-02-11 eNet&Ciweek

  Web應(yīng)用開發(fā)早期曾經(jīng)是那么的“簡單”,那個時候還只是純HTML頁面和瀏覽器特效而已。由于還涉及不到動態(tài)數(shù)據(jù)操作和商業(yè)應(yīng)用,也就省去了很多麻煩。但是這樣的“簡單”只是過眼云煙,如今我們不得不為復(fù)雜的基于Web的商業(yè)應(yīng)用開發(fā)采用諸多技術(shù)。

  本文將介紹如何利用Struts進(jìn)行應(yīng)用開發(fā)的前臺整合的開發(fā)過程。Struts是一個為開發(fā)基于模型(Model)-視圖(View)-控制器(Controller)(MVC)模式應(yīng)用架構(gòu)的開源框架,是利用Java Servlet和JSP構(gòu)建Web應(yīng)用的一項非常有用的技術(shù)。

  閱讀本文需要讀者具有以下幾方面的開發(fā)經(jīng)驗:JSP、Servlet、自定義標(biāo)簽庫(custom tag library)和XML。如果讀者想補一補自定義標(biāo)簽庫的知識,可以參考作者以前關(guān)于這方面的文章。而本文也是關(guān)于介紹如何使用Struts系列文章的上半部分,本系列暫定分為上下兩部分。

  新手上路注意事項

  Struts是一個基于Sun J2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)來實現(xiàn)的。其最初萌芽于Craig McClanahan的構(gòu)思,誕生至今也一年有余了。現(xiàn)在,Struts是Apache軟件基金會旗下Jakarta項目組的一部分,其官方網(wǎng)站是http://jakarta.apache.org/struts。由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡單易用,敏捷迅速,在過去的一年中頗受關(guān)注。Struts把Servlet、JSP、自定義標(biāo)簽和信息資源(message resources)整合到一個統(tǒng)一的框架中,開發(fā)人員利用其進(jìn)行開發(fā)時不用再自己編碼實現(xiàn)全套MVC模式,極大的節(jié)省了時間,所以說Struts是一個非常不錯的應(yīng)用框架。

  目前的Struts 1.0修正版包括完整的文檔,既可以說是用戶文檔又是開發(fā)指導(dǎo)文檔。如果讀者是JSP新手,或者對MVC設(shè)計模式不是太熟的話,可能剛上路時會比較慢,不過不用擔(dān)心,要相信自己會盡快趕上的:)

  此外,應(yīng)該注意到盡管當(dāng)前Struts只是1.0版,但已經(jīng)相當(dāng)穩(wěn)定了,作者從Struts 0.9版就在一個大規(guī)模的項目中應(yīng)用了(最近升級到1.0版),至今還沒有遇到什么麻煩問題。實際上,Struts在這個要開發(fā)復(fù)雜用戶界面的項目中,為我們團(tuán)隊大大的縮短了開發(fā)時間,在此衷心的感謝Struts項目團(tuán)隊的所有開發(fā)人員。

  開始上路!

  Struts框架可分為以下四個主要部分,其中三個就和MVC模式緊密相關(guān):

  1、模型(Model),本質(zhì)上來說在Struts中Model是一個Action類(這個會在后面詳細(xì)討論),開發(fā)者通過其實現(xiàn)商業(yè)邏輯,同時用戶請求通過控制器(Controller)向Action的轉(zhuǎn)發(fā)過程是基于由struts-config.xml文件描述的配置信息的。

  2、視圖(View),View是由與控制器Servlet配合工作的一整套JSP定制標(biāo)簽庫構(gòu)成,利用她們我們可以快速建立應(yīng)用系統(tǒng)的界面。

  3、控制器(Controller),本質(zhì)上是一個Servlet,將客戶端請求轉(zhuǎn)發(fā)到相應(yīng)的Action類。

  4、一堆用來做XML文件解析的工具包,Struts是用XML來描述如何自動產(chǎn)生一些JavaBean的屬性的,此外Struts還利用XML來描述在國際化應(yīng)用中的用戶提示信息的(這樣一來就實現(xiàn)了應(yīng)用系統(tǒng)的多語言支持)。

  好,下一步咱們來看看構(gòu)成這個框架的各個部分以及相互之間是怎樣運作的吧!

  配置

  使用Struts之前,咱們必先設(shè)置好JSP服務(wù)器,以便讓服務(wù)器在用戶請求時,知道該如何將指定后綴的請求轉(zhuǎn)到相應(yīng)的Controller-Struts ActionServlet處理,當(dāng)然,這些配置信息都一般在服務(wù)器啟動時通過web.xml文件讀入的。我們可以在web.xml定義多個Controlloer,為每一個應(yīng)用定義一個。一個典型的web.xml文件配置如下,其中有相應(yīng)的注釋,很好懂的,在后面討論Action的時候,我們將主要分析strutc-config.xml。   

  

  

  

   OreillyActionServlet

   org.apache.struts.action.ActionServlet

  


  

   config

   /WEB-INF/struts-config.xml

  


  

   debug

   2

  


  

   detail

   2

  


   2

  


  

  

   OreillyActionServlet

   *.action

  


  

  login.jsp

  


  

  

   /WEB-INF/struts-bean.tld

   /WEB-INF/struts-bean.tld

  


  

   /WEB-INF/struts-html.tld

   /WEB-INF/struts-html.tld

  


  

   /WEB-INF/struts-logic.tld

   /WEB-INF/struts-logic.tld

  


  


   ?。ㄎ赐辏?br>   控制器(Controller)

  Controller是這個框架中扮演“交通警察”的角色,當(dāng)客戶端與服務(wù)器有交互動作時,都由她來控制。Controller將HTTP請求封包并轉(zhuǎn)發(fā)到框架中相應(yīng)的對象,這些對象可能是一個JSP頁面或一個Action。

  Controller在web.xml中設(shè)置為org.apache.struts.action.ActionServlet的一個實例,在本例中,這個實例就是OreillyActionServlet。在一個完整的控制過程中,也就是處理一個HTTP請求時,在控制過程之初,這個Servlet會從一個配置文件struts-config.xml中獲取請求與控制動作向?qū)?yīng)的配置信息,這個我們會在后面詳細(xì)討論,Controller通過這些配置信息來決定HTTP請求該往何處轉(zhuǎn)發(fā),而這些Action在接收到轉(zhuǎn)發(fā)來的請求后,實現(xiàn)真正的商業(yè)邏輯。我們要注意的非常重要的一點是Action對象要能夠調(diào)用這個ActionServlet的若干方法,通過這個有力的特性,當(dāng)Action對象在控制過程中將請求再向別的Action對象轉(zhuǎn)發(fā)時(最初的請求是由ActionServlet獲取,向Action對象轉(zhuǎn)發(fā),而Action對象還可以再轉(zhuǎn)發(fā)到別的對象),我們可以將一些需要共享的數(shù)據(jù)對象通過調(diào)用一些方法放入這個Servlet相關(guān)的一些標(biāo)準(zhǔn)容器中捎帶過去。

  模型(Model)

  所謂Model就是在對用戶請求的整個控制過程中,真正處理用戶請求并保存處理結(jié)果的對象,在整個過程中,我們一般利用JavaBean來把一些信息保存起來以便在各個對象之間傳遞。因為在框架中,Model對象是真正處理商業(yè)邏輯功能的對象,因此也就是框架中應(yīng)用需求實現(xiàn)相關(guān)性最大的部分。在Struts的實現(xiàn)里,Model的具體表現(xiàn)形式就是ActionForm對象和與其對應(yīng)的Action對象了。對用戶提交表單的數(shù)據(jù)進(jìn)行校驗,甚至對數(shù)據(jù)進(jìn)行預(yù)處理都能在ActionForm中完成。通常的應(yīng)用中,一般是一個Model對象和一個請求頁面對應(yīng)的關(guān)系,但也可以一個Model對象對應(yīng)多個頁面請求。如果struts-config.xml配置文件沒有指定一個Model對象對應(yīng)的Action,那么控制器將直接把(通過Model對象完成數(shù)據(jù)封裝的)請求轉(zhuǎn)到一個View對象。

  struts-config.xml

  前面多次提到的struts-config.xml配置文件是整個框架的主心骨。web.xml文件定義了一個請求到來應(yīng)向何處轉(zhuǎn)發(fā)后,后面的工作就全權(quán)由struts-config.xml管理控制了??梢哉fstruts-config.xml就是整個Struts框架的“扛把子”,只有這位“老大”清楚所有請求與動作的映射關(guān)系,要是他哪里沒有搞定或不爽的話,整個“社團(tuán)”就什么也擺不平了:)如今的應(yīng)用系統(tǒng),XML形式的配置文件越來越多,如果整個系統(tǒng)只使用一個這樣的配置文件的話,那么保持整個系統(tǒng)的模塊化和可維護(hù)性都非常的輕松。使用配置文件來描述請求-動作的控制過程和相互關(guān)系,而不是在代碼中將對象之間的調(diào)用關(guān)系寫死,那么都應(yīng)用系統(tǒng)有變動時,我們只用修改配置文件就行了,而不是再重新編譯發(fā)布程序了。

  Controller通過struts-config.xml文件的配置信息確定當(dāng)有請求時應(yīng)該調(diào)用那個對象來處理,從效率的角度出發(fā),這些信息都是在系統(tǒng)啟動時讀入并存在內(nèi)存中的。下面我們將講解一個極短小的struts-config.xml文件,文件中定義了一個與登錄請求對應(yīng)的登錄動作,請求到達(dá)后將被轉(zhuǎn)發(fā)到com.oreilly.ui.authentication.actions.LoginAction這個Action對象,該對象處理的結(jié)果決定向用戶返回的頁面。這個例子同時還示范了一個Action對象將請求轉(zhuǎn)發(fā)到別的Action對象,而例子中另一個返回的對象則是一個View對象,即我們看到的login.jsp頁面。   

  

  

   "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"

   "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd";>

  

  

  

  

  

  
  type - 完整的Action實現(xiàn)類名

  name - 該Action要用到的ActionForm名

  path - 請求該Action的URI

  unknown – 如果將該屬性設(shè)置為true,那么就是聲明這個Action將處理整個應(yīng)用中

  所有未找到相應(yīng)處理Action的請求,當(dāng)然,一個應(yīng)用系統(tǒng)中也只會有一個Action

  的unknown屬性可以設(shè)為true了

  validate - 如果本屬性為true則在Action動作之前其對應(yīng)的ActionForm

  的validate方法會自動被調(diào)用,一般用以校驗用戶輸入的數(shù)據(jù)

  -->

  

  

  

  

   type="com.oreilly.ui.authentication.actions.LoginAction">

  

  

  


  


  


  視圖(View)

  View對象通常來說都是指的JSP頁面。Struts框架實際上并沒有真正的JSP的要求規(guī)范,而是提供了大量的標(biāo)簽庫來為開發(fā)者更簡便的將JSP整合到Struts框架中。在Struts中通過標(biāo)簽定義方式的JSP頁面能夠?qū)⒂脩敉ㄟ^表單輸入的數(shù)據(jù)存入一個JavaBean中,也就是我們前面提到的ActionForm bean。通過Action類調(diào)用(自動或手動)ActionForm的校驗方法來檢查用戶輸入的數(shù)據(jù),如果發(fā)現(xiàn)不合法的數(shù)據(jù),再通過Struts的一個通用機制將錯誤信息返回給用戶顯示。

  Struts框架提供了若干個標(biāo)簽庫,它們有各自不同的用途。由于這些庫還可以脫離Struts框架單獨使用,這樣我們也可以在其他系統(tǒng)中嘗試使用這些標(biāo)簽庫,它們包括: 

  * struts-html - 這個標(biāo)簽庫用來創(chuàng)建動態(tài)的HTML頁面和表單。  

  * struts-bean - 提供了類似甚至更強于中的功能。  

  * struts-logic - 用于在頁面輸出文本信息時的條件、循環(huán)等流程的控制。   

  * struts-template - 用于產(chǎn)生有共同風(fēng)格的動態(tài)JSP頁面模板。   

  此外,可定制標(biāo)簽庫在Struts中還有一大用處是,通過資源文件的方式來實現(xiàn)應(yīng)用系統(tǒng)的多語言特性,應(yīng)用Struts的系統(tǒng)若想將系統(tǒng)中的用戶交互信息換一種語言的會很簡單,更換一個不同的資源文件就可以了。

  大家都開始應(yīng)用Struts吧!

  Struts框架可能對于大多數(shù)開發(fā)人員來說,是一門比較新的技術(shù)。但我們現(xiàn)在已經(jīng)可以在不少的應(yīng)用系統(tǒng)中看到Struts的身影了,而我們大可在新的應(yīng)用或正在開發(fā)的JSP項目中使用Struts框架。

  例如,在作者現(xiàn)在正在為客戶開發(fā)的一個大型數(shù)據(jù)庫應(yīng)用系統(tǒng)中,商業(yè)邏輯都是通過EJB來實現(xiàn)的,用戶界面則是JSP頁面。在struts-config.xml文件中定義了用戶輸入表單和對應(yīng)的Action類,當(dāng)一個請求發(fā)生時,即用戶數(shù)據(jù)以ActionForm的形式封裝提交到Action時,Action先調(diào)用ActionForm的校驗方法,數(shù)據(jù)檢查校驗通過后,Action再調(diào)用相應(yīng)的EJB中的方法來完成數(shù)據(jù)操作,操作的結(jié)果以XML的形式返回,XML解析后再放入我們數(shù)據(jù)的封裝傳遞JavaBean - ActionForm中顯示到JSP頁面里返回用戶。

  整個的控制流程(包括Action調(diào)用后的不同的返回結(jié)果)都盡在struts-config.xml中所掌握,這種“中央集權(quán)”的方式非常便于應(yīng)用流程的調(diào)整。而不管是Servlet還是JSP頁面中(甚至在一些n層的應(yīng)用架構(gòu))都無需撰寫如何獲取顯示數(shù)據(jù)的代碼。

  由于目前作者所開發(fā)的是一個較大型的系統(tǒng),有很多的JSP頁面和用戶要提交的ActionForm類型,因此發(fā)現(xiàn)Struts的一個麻煩的地方,那就是:我們要為如此多頁面和ActionForm開發(fā)對應(yīng)的Action類來完成控制,因為我們目前JSP和ActionForm與Action是一對一的關(guān)系。不過我認(rèn)為如果在項目前期分析和設(shè)計時多下些功夫,做出更完美一些的設(shè)計方案的話,這樣的情況是可以避免的,當(dāng)然,在新產(chǎn)品的開發(fā)過程中,想一步就把所有需求弄清楚明白那也是不可能的。我們不是都有這樣的經(jīng)歷嗎?在開發(fā)中的應(yīng)用系統(tǒng)正一步一步走向成熟的時候,更新和更明確的需求才會被提出來。不過,像我們手里這個利用Struts開發(fā)了六個月的系統(tǒng)也確實少見了,呵呵。除去這些非技術(shù)因素不談,Struts框架為我們實現(xiàn)MVC模式節(jié)省了大量的時間,并且開發(fā)出的系統(tǒng)相當(dāng)?shù)姆€(wěn)定,可以說是很成熟的產(chǎn)品了。

  在本系列文章的第二部分,我們將把各小段代碼集成起來,完成一個完整的Struts應(yīng)用的實例,希望大家繼續(xù)和作者一起學(xué)習(xí)Struts!   

  注:Sue Spielman是ONJava.com的副編輯,主要擅長于JSP和Servlet技術(shù),她還是Switchback Software LLC公司的總裁和高級技術(shù)咨詢專家。

  (完)

相關(guān)頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com