使用Struts2的好處
(1) 第一個好處就是我們不必非得編寫一個控制器不可,這使得我們可以把注意力集中在編寫各種動作類裏的業務邏輯方面。
(2) Struts2使用了一個基於XML的配置文件來匹配URI和動作。因爲xml是文本文件,因此對應用程序的許多修改都用不着在重新編譯有關代碼。
(3) 對動作類進行實例化和提取用戶輸入去填充相關動作屬性的工作都有Struts2來完成
(4) Struts2可以對用戶輸入做一些基本的合法性驗證,並在遇到不合法輸入時自動地把用戶重定向到相關的輸入表單。Struts2還內建了許多驗證程序。
(5) Struts2負責調用動作方法,我們可以通過配置文件輕易的該百年某個動作的方法
(6) Struts2負責檢查各個動作的結果和執行該結果。
還有很多好處,用過就知道了。
Struts2中的mvc模型
MVC設計模式有3個關注點:模型、視圖、控制器。在Struts2中,他們分別由動作(action)、結果(result)和控制器(FilterDispatcher)來實現。許多mvc框架中控制器的主要作用是來執行業務邏輯,而模型用來封裝數據相關的操作。在Struts2中,將業務邏輯和數據處理都放在模型(action)中。
Struts2的工作原理
每一次的動作處理流程中,過濾器調度程序會做一下幾件事:
(1) 查詢配置管理器,以確定應該根據請求URI調用哪個動作。
(2) 運行爲該動作註冊的每一個攔截器,其中一個攔截器將請求中的參數填充到動作的屬性上
(3) 執行相關的動作方法
(4) 執行相關的動作結果
注意:有些攔截器會在動作方法執行完畢之後、在動作結果執行之前再次執行。
從工作原理圖中可以看出,在攔截器和結果頁面中都可以通過OGNL來操作ValueStack,ValueStack中存放了與動作相關的數據,攔截器將數據方法ValueStack上,那麼在結果頁面就可以訪問這些數據了。動作中的數據正是通過ValueStack來傳遞到結果頁面中的。
其他幾個重要的概念,動作、攔截器都需要我們花時間自習研究。特別是攔截器,它在Struts2中起到了十分重要的作用,框架的很多功能都是通過攔截器來實現的,比如將請求中的參數填充到動作類的屬性上正是通過params攔截器實現的。
話不多說,開始動手做吧!就從經典的hello word開始:
首先需要將Struts所需要的包引入到工程中來:
接下來需要在部署描述符web.xml中將Struts2的過濾器引入進來,這樣Struts2在我們的工程中才能發揮作用。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
接下來我們就可以編寫我們的動作(Action)類:
- package action;
- import com.opensymphony.xwork2.ActionSupport;
- public class HelloWorld extends ActionSupport {
- private String userName;
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- @Override
- public String execute() throws Exception {
- return SUCCESS;
- }
- }
還需要在src目錄(classpath)下新建一個struts.xml文件,它就是struts2的配置文件,我們需要在這裏面配置好我們的Action。
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.3.dtd">
- <struts>
- <constant name="struts.devMode" value="true" />
- <package name="default" namespace="/" extends="struts-default">
- <action name="hello" class="action.HelloWorld">
- <result name="success">/success.jsp</result>
- </action>
- </package>
- </struts>
然後編寫input.jsp和success.jsp
input.jsp
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>input</title>
- </head>
- <body>
- <form action="hello.action">
- userName : <input type="text" name="userName"/>
- <input type="submit" value="submit"/>
- </form>
- </body>
- </html>
success.jsp
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>sucess</title>
- </head>
- <body>
- hello ${userName }
- </body>
- </html>
測試:
這樣,我們將成功的將Sturts2應用到了工程中,至於Action和interceptor以及result等知識以後學習的時候再去研究,這裏先把struts2環境搭建起來,算是邁出了學習struts2的第一步。
周圍很多同學都要去參加培訓公司的培訓,我看了一下培訓課程,基本就和我們自己學的差不多。講三大框架(SSH2)的時間加起來兩個月左右,其實我覺得兩個月時間自己看應該也能學到不少東西了,培訓機構收費那麼貴(1萬3),最怕就是去了發現老師都是打醬油,還不如花點錢把自己身體養好,精神好學習有勁!