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