對應視頻配套地址: https://www.imooc.com/video/9088
項目創建:
Eclipse:
1.創建一個動態項目
2.將對應的核心jar包導入到WebContent中的lib中
commons-fileupload.jar:文件上傳
commons-io.jar:
commons-lang.jar:
commons-logging.jar:
struts2-core.jar:
xwork-core.jar:
freemarker:模板引擎,根據模板生成
ognl:一些表達式
javassist.jar:解析java類文件的包
3.在項目中引用jar包
->->->
4.在web.xml中配置過濾器,將所有請求轉交到struts2
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.在src下邊創建struts.xml配置文件
6.在src下邊創建上圖中對應的類文件
7.創建對應的jsp文件
開啓運行即可,如果沒有繼承tomcatServer,需要現在eclipse中添加對應的tomcat服務器
4-3 Action搜索順序
http://127.0.0.1:8080/struts/path1/path2/path3/student.aciton
程序會首先從path3開始檢索,看看目錄下有沒有path3包,有的話看看有沒有相應action,
否則看看目錄下有沒有path2包,有的話看看有沒有相應action,
否則看看目錄下有沒有path1包,有的話看看有沒有相應action,
所有的包檢索完了都沒有對應aciton那麼會檢索項目根目錄下,即\下有沒有對應的action即
4-4 動態方法調用
url訪問HelloWorld.action時,默認請求execute()方法
動態方法調用:(爲了解決一個Action對應多個請求的處理,以免Action太多)
1.置頂method屬性
通過url訪問addAction中的add方法,然後映射到com.imooc.action.HelloWorldAction類中的add方法
2.感嘆號方式(不推薦)
需要提前在struts.xml配置文件中開啓一個常量值
然後配置相應的action
如何用感嘆號方式調用呢:
默認跳轉到result.jsp
helloworld!add.action跳轉到add.jsp
helloworld!update.action跳轉到update.jsp
3.通配符方式
simple:
helloworld_add.action跳轉到add.jsp
advance:
訪問helloworld_add.action,那麼struts框架會先將helloworld匹配給{1}即請求類helloworldAction.java,然後下劃線後邊的add匹配給{2}即請求類helloworldAction.java中的add方法,然後如果返回add|update都打開add.jsp
4-5 指定多個配置文件
在struts中使用include包含多個配置文件
然後創建相應的helloworld.xml文件,並且helloworld文件和struts文件結構一致
同理可以多個文件引入
4-5 默認Action的使用
在項目中打開不存在的action時,就會出現404訪問錯誤,用戶體驗較差,遂使用默認action
ForExample:
在任意struts的action路徑索引文件中
這樣再打開不存在的action時,就會跳轉到error.jsp了
4-6 Struts後綴
修改訪問url時的action,比如http://127.0.0.1:8080/helloStruts/helloworldAction.action,想將action改爲do或html之類的(將動態action頁面僞裝成靜態html頁面)
只需要在struts.xml配置文件中,添加參數:<constant name="struts.action.extension" value="html" ></constant>
如果不想要後綴,即訪問http://127.0.0.1:8080/helloStruts/helloworldAction
只需要將<constant name="struts.action.extension" value="" ></constant>中的value置爲空即可
如果不設置這個參數,直接訪問.action是沒有問題的
在struts.properties中配置
在web.xml中配置
4-7 在struts2中接收參數
4-7-1使用Action的屬性接收
在jsp頁面中設置form表格:
配置處理action:
具體類處理事件:在Action類中聲明form中的名稱爲name值的兩個成員變量,並實現相應的get/set方法
4-7-2 使用DomainModel接收
先聲明對應的實體類對象,也實現get/set方法
然後在Action中聲明這個對象,在通過對象引用訪問成員變量
最後修改表格中的傳入參數,將參數與實體類名稱綁定,form表格中的user即和Action類中聲明的User對象user一致
4-7-3 使用ModelDriven來接收
ForExample:
只需要在Action類中集成接口,並且重寫getModel方法,最後將對象實例化即可
傳入多個值:
比如接收中的bookList
先在User中聲明bookList對象
在Action中做相應處理
傳入一個數組形式的值:
此時bookList不再只簡單是String類型了,改成user集合了
只需修改對應的form表格中
對應Action中的
4-9處理結果類型概述
在struts定義的映射中,<resutl name="success">/success.jsp</rsult>,其中result元素中的name就是result元素的邏輯視圖名稱
如果省略成<result>/success.jsp</result>,即使省略了name屬性,系統也將採用默認的name屬性值,默認的name值是success
路徑前方的斜線代表的是項目的根目錄,如果不帶斜線,就會索引到相應struts.xml文件夾對應下的jsp文件
com.opensymphone.xwork2.Action
SUCCESS:正確執行,返回相應的視圖
NONE:表示Action正確執行,但並不返回任何視圖
ERROR:表示Action執行失敗,返回到錯誤處理的視圖
LOGIN:Action因爲用戶沒有登錄的原因沒有正確執行,將返回該登錄視圖,要求用戶進行登錄
INPUT:Action的執行,需要從前端界面獲取參數,INput就是代表這個參數輸入的界面,一般在應用中,會對這些參數進行驗證,如果驗證沒有通過,將自動返回該視圖
4-10 驗證INPUT的代碼演示
首先在映射文件中定義result爲input的處理
在form中添加name爲age的變量
最後在aciton中添加對應的攔截處理錯誤
4-11 處理結果類型
處理結果是通過在struts.xml使用<result/>標籤配置文件
根據文件的不同,可分爲2種結果
1:局部結果,將<result>作爲<action>的子元素
2:將<result>作爲<global-result>元素的子元素
OGNL:Object Graphy Navigation language
在對應的映射文件中定義
在對應的class文件中定義