一、Struts的開發步驟:(手動)
1、 創建web工程,創建web.xml配置文件進行配置
2、 創建action實現類,推薦使用繼承ActionSupport類的方法,該類中的execute是默認的實現方法,也可以自定義其他方法,在訪問時進行動態調用。
3、 在struts.xml配置文件中對action進行配置,主要的配置項如下:
在該配置文件中的屬性基本是以鍵值對的形式存在的
(1) package
name屬性:其他包引用該包時的key
namespace屬性:會影響對該包下的action的方法路徑,通常設爲”/”
extends屬性:即該包繼承的包名,一般繼承”struts-default”
(2) action
該配置要放在package中,是要訪問的action的信息配置
Name屬性:這是action的名字,可以隨便起,但是要在url中要通過該名字進行訪問,所以以簡單爲主。
Class屬性:這是實現action實現類的存放路徑,一般爲工程中的包名.類名。
Method屬性:這是設置訪問action時要調用其實現類中的方法,默認都調用execute方法。
(3) result
該配置放在action中,表示的是action實現類的return路徑。
Name屬性:這是action實現類中return返回頁面的key,返回頁面的值在result標籤內部,即jsp頁面的路徑。
4、 創建視圖頁面,一般爲jsp頁面。
注意:在jsp頁面中定義表單要提交到某個action時,表單屬性的設置:
(1) action屬性:這是表單要訪問的action名字,當要訪問的action調用其實現類中的默認方法時,action的值爲“action名.action”,其中action名就是在struts配置文件中action中name屬性的值;如果要訪問的action調用的不是其實現類中的默認方法,則需要根據動態調用方法的通配符設置添加適當的方法名稱。
(2) method屬性:這個默認爲post,因爲如果是get的話,會將提交的內容,如用戶名和密碼顯示在瀏覽器的url中。
5、 訪問相應的action或jsp頁面進行測試。
二、接受用戶輸入的三種方式
1、 通過action屬性接受:如同獲取提交用戶名和密碼並在客戶端輸出
(1) 創建提交數據頁面(如登陸界面login.jsp)
(2) 創建action的實現類繼承ActionSpport父類
(3) 在該實現類中創建提交數據對應的屬性即相應的get和set方法,同時創建訪問action時的接受方法,在該方法中通過this.getUsenamer()獲取。
2、 通過領域對象接受
(1) 將接受的屬性用一個類封裝起來。提供所有屬性的get,set方法以及無參構造函數。
(2) 創建action實現類繼承ActionSpport父類,該類中添加被封裝的對象,並提供該對象的set和get方法。
(3) 在提交的表單元素中使用對象名.屬性名設置name的值。
(4) 在訪問的action方法中獲取該對象,就可以獲取到該對象的屬性值,即用戶提交的數據。
注意:在這種方法中可以使用hibernate事項將接受到的數據添加到數據庫中。
方法:將前面封裝的對象通過hibernate的配置文件映射到數據庫中,在action的實現類中創建一個添加接受到信息的方法,該方法的目的是通過hibernate向數據庫中添加獲取的數據,然後在訪問action時調用的方法中調用該方法,通過傳參數的方法實現添加數據。
3、 通過模型驅動接受
(1) 同樣將接受的屬性用一個類封裝起來。提供get和set方法以及無參構造函數。
(2) 創建action類,實現ModelDriven接口(泛型),並重寫裏面的getModel()方法。
(3) 在該類中實例化剛纔封裝的對象,在重寫的方法getModel()中返回該對象。
(4) 其他的操作跟通過領域接受的操作一樣,只是在提交的頁面表單元素使用屬性設置name的值
三、struts訪問servlet API的方法:
1、 通過第一種解耦的方式:
(1) 獲取上下文對象ActionContext
(2) 通過上下文對象ActionContext對象獲取httpservletrequest、httpsession、servletcontext(httpapplication)對象的封裝集合map
(3) 用三種對象的get方法就可以獲得相應的請求。
2、 通過第二種解耦的方式:
(1) 實現ApplicationAware、RequestAware、SessionAware接口,並重寫未實現的set方法。
(2) 可直接獲取封裝對象的Map集合
(3) 在重寫的方法中調用相應的Map集合。
3、 通過第一種耦合的方式:
(1)使用ServletActionContext類的靜態方法getRequest()方法獲取httpservletrequest對象
(2)使用獲取的request對象獲取httpsession對象
(3)使用ServletActionContext類的靜態方法getServletContext()方法獲取servletcontext對象,即application對象。
然後它們的使用方法就和servlet中的三種對象的使用方法是完全一樣的,即實現了耦合。
還有第二種和第三種耦合方式,因爲一般情況下推薦使用解耦的方式,所以就不多介紹另外兩種耦合方式,一旦使用到耦合方式,則第一種已經足夠了。