1.Struts2的配置文件
節點package:與java類中的package關鍵字作用類似,用來與其他的action相互區分。
name:即可以有2個完全相同的action,只要他們的package的name不一樣。(必須指定)
extends:當前包所要繼承的父包,繼承之後,當前包擁有父包中所定義的任意類、攔截器等.(非必須,一般指定爲"struts-default").
namespace:配置訪問action的根路徑 (默認爲"",可以匹配任何根路徑訪問)
result:如果不包含name屬性,則會自動默認設置name="success";否則 name等於execute()方法的返回值.
1.可以有2個package-namespace和action-name 完全相同的actionA和B。訪問的時候,如果A寫在B的前面,則實際訪問的是ActionB.
2.如果package-name,package-namespace,action-name完全相同的話,struts將不知道該裝載哪一個action 報404錯誤。
注意:
1.struts2.1.8.1之前,如果安tomcat裝路徑中包含空格,在配置了struts.devMode爲true時,將會報錯嚴重: Exception starting filter struts2 java.lang.NullPointerException
2.struts2.2之後,需要引入javassist-3.11.0.GA.jar包
運行struts2所需jar包:
struts2-core-2.2.3.jar,xwork-core-2.2.3.jar,ognl-3.0.1.jar,javassist-3.11.0.GA.jar,freemarker-2.3.16.jar,commons-io-2.0.1.jar,commons-logging-1.1.1.jar,commons-fileupload-1.2.2.jar,commons-lang-2.5.jar
在eclips中配置jar包所對應的源碼,使得可以直接在eclipse中查看jar包的源碼
1.右鍵jar包->properties->選擇對應的源碼的路徑即可,如下圖
在eclipse中配置dtd文件的自動提示
1.進入Window->Preferences 如下圖
選擇"ADD"添加DTD文件。如下圖
location選擇本地存儲的dtd文件
key填寫xml中的dtd文件的uri地址
Struts2中的Action可以沒有對應的類,只指定一個name,Struts2會自己裝載一個類。
Struts2中的Action指定自定義的類可以有3種形態
1.普通類
2.實現Action接口
3.繼承ActionSupport父類
一般採用第三種寫法,因爲ActionSupport類提供了很多便利的方法可以供我們使用。
Action的方法調用
Action默認是調用execute方法,也可以明確指定action調用哪一個方法,具體有三種形式
1.通過配置action的屬性method來指定
上面將會調用action的add方法
但如果action中有很多方法的話,每個方法都需要配置一個action,這是非常麻煩的,所以一般不採用這種形式
2.通過DMI動態方法調用
action的配置不用改變,在前臺頁面調用時,寫成<a href="<%=context %>/user/userAdd!add">,也將會調用add方法。
3.通過通配符調用
{1}指代第1個*的內容,{2}指代第2個*的內容
即只要action的名字,方法和相應的jsp名字都按照一定的約定設置,只需配置這一個action,就能處理很多類似的action請求
請求:/actions/Teacher_add
對應的Action類:com.bjsxt.struts2.action.TeacherAction
對應的Action方法:add
對應的頁面:Teacher_add_success.jsp
Action的頁面參數獲取
Struts2的頁面參數獲取相對struts簡單的多了。不再需要另外定義form了。有以下幾種形式:
1.通過成員變量
只需在action中定義與頁面屬性一樣的變量名,並寫上對應的set/get方法,即可接收到頁面對應屬性傳遞過來的值
2.通過DomainModel
1)定義一個javaBean,裏面包含各個頁面屬性的set/get方法
2)在action裏定義該javaBean的成員變量,並寫上對應的set/get方法,即可直接通過類似user.getName()的方式,獲取頁面的值.注意這裏的javaBean成員變量只需聲明,不要new。
3.通過ModelDriven
1)定義一個javaBean,裏面包含各個頁面屬性的set/get方法
2)action實現ModelDriven接口,定義該javaBean的成員變量,必須new出來。然後寫上getModel方法