什么是Struts2?
Struts2是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合并的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有著太大的變化,但是相對于WebWork,Struts 2的變化很小。
什么是MVC?
模型(Model)-視圖(View)-控制器(Controller),通常簡稱MVC,是一種開發web應用程序的軟件設計模式。該軟件設計模式由以下三部分組成:
模型——屬于軟件設計模式的底層基礎,主要負責數據維護。
視圖——這部分是負責向用戶呈現全部或部分數據。
控制器——通過軟件代碼控制模型和視圖之間的交互。
Struts下載
地址:http://struts.apache.org/download.cgi
Struts2 的mvc通過五個核心部分進行實現
操作(Actions)
攔截器(Interceptors)
值棧(Value Stack)/OGNL
結果(Result)/結果類型
視圖技術
請求生命周期
通過上述圖片的描述,我們可以依照下面幾點解釋在Struts2 中用戶的請求生命周期:
用戶發送一個資源需求的請求到服務器(例如:頁面)。
核心控制器查看請求后確定適當的動作。
使用驗證、文件上傳等配置攔截器功能。
執行選擇的動作來完成請求的操作。
另外,如果需要的話,配置的攔截器可做任何后期處理。
最后,由視圖顯示結果并返回給用戶。
Struts2 Hello World示例
1、創建一個動態Web項目
2、加入 jar 包:Struts2 的lib文件夾C:\struts-2.2.3\lib中拷貝以下文件到項目的WEB-INF\lib文件夾里。你可以直接拖拽以下所有文件到 WEB-INF\lib 文件夾。
commons-fileupload-x.y.z.jar
commons-io-x.y.z.jar
commons-lang-x.y.jar
commons-logging-x.y.z.jar
commons-logging-api-x.y.jar
freemarker-x.y.z.jar
javassist-x.y.z.GA
ognl-x.y.z.jar
struts2-core-x.y.z.jar
xwork-core.x.y.z.jar
3、 在 web.xml 文件中配置 struts2: 復制 struts\apps\struts2-blank1\WEB-INF\web.xml 文件中的過濾器的配置到當前 web 應用的 web.xml 文件中
4、在當前 web 應用的 classpath 下添加 struts2 的配置文件 struts.xml: 復制 struts1\apps\struts2-blank\WEB-INF\classes 下的 struts.xml 文件到當前 web 應用的 src 目錄下.
5、創建Aciton類
當用戶點擊一個URL時,由Action類來響應用戶操作。一個或多個Action類的方法被執行,并返回一個字符串結果。基于結果的值,會呈現一個特定的JSP頁面
這是一個非常簡單的具有“name”屬性的類。對于“name”屬性,我們用標準的getter和setter方法,以及一個返回“success”字符串的執行方法。
Struts2 框架將創建一個“HelloWorldAction”類的對象,并調用execute方法來響應用戶的動作。你把你的業務邏輯放進execute方法里,最后會返回字符串常量。簡單的描述每個URL,你需要實現一個Action類,你也可以用類名直接作為你的動作名,或者如下面內容所示使用 struts.xml 文件映射到其他name上。
6、創建視圖
我們需要一個JSP來呈現最終的信息,當一個預定義動作發生時這個頁面將被Struts2 框架調用,并且這個映像會定義到 struts.xml 文件里。那么讓我們在你的Eclipse項目的WebContent文件夾里創建以下JSP文
Taglib指令告知Servlet容器這個頁面將使用Struts2 標簽,并且這些標簽會被s放在前面。s:property 標簽顯示Action類“name”屬性的值,這個值是使用HelloWorldAction類的getName()方法返回的。
7、創建主頁
在WebContent文件夾里,我們還需要創建index.jsp文件,這個文件是用作初始的action URL。用戶可以通過點擊它命令Struts2框架去調用HelloWorldAction類的定義方法并呈現HelloWorld.jsp視圖。
上面視圖文件里定義的helloaction將通過struts.xml文件影射到HelloWorldAction類及其execute方法。當用戶點擊提交按鈕時,將使得Struts2框架運行HelloWorldAction類中的execute方法,并基于該方法的返回值,選擇一個適當的視圖作為響應進行呈現。
8、配置文件
我們需要一個映像把URL、HelloWorldAction類(模型)以及 HelloWorld.jsp(視圖)聯系在一起。映像告知Struts2 框架哪個類將響應用戶的動作(URL),類里的哪個方法將要執行,以及基于方法所返回的字符串結果,會呈現怎樣的視圖。
那么接下來讓我們創建一個名為struts.xml的文件。因為Struts2 要求 strust.xml 文件顯示在classes的文件夾里,所以我們要在WebContent/WEB-INF/classes 的文件夾下創建 struts.xml 文件。Eclipse并沒有默認創建“classes”文件夾,因此你需要自己創建。在project explorer里右鍵點擊WEB-INF文件夾并選擇“New”>“Folder”,你的 struts.xml 文件應該如下:
這里說幾句關于上述的配置文件。這里我們設定常數struts.devMode的值為真,因為我們是在開發環境下工作,需要查看一些有用的日志消息。然后,我們定義一個名為helloworld的數據包。當你想要把你的Actions集合在一起時,創建一個數據包是非常有用的。在我們的示例中,我們命名我們的動作為“hello”,與URL/hello.action保持一致,由HelloWorldAction.class進行備份。HelloWorldAction.class的execute方法就是當URL/hello.action被調用時運行。如果execute方法返回的結果為“success”,那么我們帶用戶進入HelloWorld.jsp。
下一步是創建一個web.xml文件,這是一個適用于Struts2 任何請求的接入點。在部署描述符(web.xml)中,Struts2 應用程序的接入點將會定義為一個過濾器。因此我們將在web.xml里定義一個 oforg.apache.struts2.dispatcher.FilterDispatcher 類的接入點,而web.xml文件需要在WebContent的WEB-INF文件夾下創建。Eclipse已經創建了一個基礎的web.xml文件,你在創建項目的時候可以使用。那么,讓我們參照以下內容做修改:
我們指定了index.jsp作為我們的歡迎文件,那么我們已經配置好了在所有的URL(列如:所有匹配/*模式的URL)上運行Struts2 過濾器。
9、執行程序