Struts開始於
年
月
是采用Java Servlet/JavaServer Pages技術
開發Web應用程序的開放源碼的框架
當前最新的正式版本是
本文內容就是針對這個版本的
采用Struts能開發出基於MVC(Model
View
Controller)設計模式的Java Web前端應用
通常MVC設計模式把一個系統劃分為相互協作的三個部分
Model(模型)
模型用於封裝系統的狀態
比如業務數據
View(視圖)
視圖是模型的表示
提供用戶交互界面
當模型狀態發生變化時
視圖應該得到通知
以便更新模型的變化
Controller(控制器)
接受來自視圖的請求
修改模型的狀態
但是
在基於JSP/Servlet的Web應用中要使用MVC模式
需要解決這樣一個問題
就是HTTP的底層是TCP/IP協議
而TCP/IP是一種無狀態連接的協議
如果我們的模型發生了變化
就無從通知視圖
而Struts采用了在
JSP規范v
中就提出的MVC Model
這是對MVC在Web上應用的修訂版
它可以解決這個問題
見圖
圖
MVC Model
(FromMalcolm Davis)
圖
Sturts工作機理(From Malcolm Davis)
Struts應用有
個主要部件
一個是使用Servlet實現的中心控制器(Controller Servlet
由Struts提供的org
apache
action
ActionServlet類實現)及負責具體業務邏輯處理的Action(org
apache
action
Action的子類)
一個是用於顯示的JSP頁面(viewer)
另一個是用於封裝系統狀態的業務邏輯元件(Model)
Struts 的中心控制器接受所有來自客戶端的請求
並根據系統的配置(struts
config
xml)路由HTTP請求到其它Action對象(開發者實現的org
apache
struts
action
Action的子類)
在這些Action對象中會完成所有的業務操作
比如插入一條訂單
修改一條記錄等
處理完畢
由Struts的Controller Servlet根據配置轉向到適當的JSP頁面
將處理結果顯示給用戶
從這裡可以看出
在Struts中Controller Servlet擔任了重要的角色
它控制所有的程序流轉
使MVC三個相對獨立的部分協調工作
從而使系統的功能更加完善
從圖
可見Struts是MVC Model
的一個典型應用
安裝
你可以從
struts/release/下載Struts最新的二進制版本和源碼
首先進入v
下載頁面
下載jakarta
struts
zip(
MB)
然後將jakarta
struts
zip解壓
其中包含lib和webapps兩個子目錄
lib子目錄中是使用Struts需要的Jar文件
標簽庫定義文件(
tld)
以及對一個Struts Web應用的web
xml和struts
config
xml配置文件的DTD定義(
dtd)
webapps子目錄中包含了幾個Struts的示例應用
都已打包為
war格式
這裡主要介紹其中三個
struts
example
war
一個采用Struts框架的簡單的示例程序Controller
struts
documentation
war
Struts文檔的war包
struts
blank
war
一個空白的Struts的應用
可以方便地修改
並且配置自己的應用
下面運行struts
example這個示例程序
因為Struts是一個Web應用
所以要運行這個示例需要一個兼容Servlet
JSP
以上規范的Web容器
本文以Tomcat
a(對Tomcat
也適用)為例進行介紹
首先保證Tomcat可以正常運行
而運行struts example不需要其它特殊配置的
只要把struts
example
war拷入Tomcat下的webapps目錄
Tomcat在啟動時就會自動解壓了
然後啟動Tomcat
在浏覽器中輸//localhost:
/struts
example
如果能看到如圖
頁面
就說明已經運行成功
在圖
中你可以點擊
Register with the MailReader Demonstration Application
注冊一個MailReader用戶
或直接點擊
Log on to the MailReader Demonstration Application
輸入用戶名和密碼(示例程序已經預置了一個用戶user/pass
配置在struts
example下的WEB
INF\database
xml文件中)登入
分析
web
xml
在圖
所示的頁面中
點擊
Log on to the MailReader Demonstration Application
鏈接
進入/logon
jsp頁面
輸入預定義的用戶名為user
密碼為pass
然後提交就進入了圖
的用戶主頁面
圖
struts example主頁面
圖
用戶主頁面
大家可能已經注意到了
這裡的URL的後綴是
do
那麼它有什麼意義?服務器又是怎樣處理這樣的請求呢?下面我們看看{TOMCAT}\WEB
INF\web
xml文件
就會非常清楚
在web
xml中
你可以找到如下配置片斷
action
*do
從上面配置代碼中可以知道
以
do結尾的請求URL是由一個名為action的Servlet處理
實際上可以為應用取另一個後綴
只要修改就行了
但下面所有的討論都以
do為例
我們再看一下這個Servlet的配置
action
orgapachestrutsactionActionServlet
application
orgapachestrutswebappexampleApplicationResources
config
/WEBINF/strutsconfigxml
……
由此可見
action對應的類是org
apache
struts
action
ActionServlet
這是一個Struts提供的處於中心控制地位的Servlet
即圖
中的Controller Servlet
正是用它監聽所有的來自於用戶的以
do為後綴的請求
在上面的配置中
為ActionServlet配置了一個名為config的初始化參數
值為 /WEB
INF/struts
config
xml
struts
config
xml是一個基於Struts應用的最重要的配置文件
其中包含了所有的Action請求(指以
do結尾的請求)
相應的Action處理類
Form Bean
以及頁面的轉向等信息的配置
struts
config
xml在應用啟動時讀入
然後根據這些配置進行響應
下面以示例程序中的LogonAction的配置為例
對struts
config
xml進行分析
struts
config
xml
下面是struts
config
xml中對LogonAction進行配置的部分代碼
path=
/logon
type=
org
apache
struts
webapp
example
LogonAction
name=
logonForm
scope=
request
input=
/logon
jsp
>
從上面可以看出
MailReader應用中對/logon
do的請求是由org
apache
struts
webapp
example
LogonAction類進行處理的
name屬性指定的是這個請求對應的表單
logonForm也是在struts
config
xml中配置的
配置代碼為: