Struts+WebWork簡(jiǎn)單示例
用Struts開(kāi)發(fā)都知道關(guān)于下載的Struts目錄下都apps目錄,這些都是例子,作為新手肯定把blank工程下的lib COPY 到自己工程的lib下。但初次接觸到Webwork的目錄,你也可能受到Struts目錄結(jié)構(gòu)的影響了。
直接找到(webwork2.2.4)lwebapps下,感覺(jué)目錄結(jié)構(gòu)比2.1.7要好很多(作為一個(gè)Struts人員來(lái)說(shuō)).發(fā)現(xiàn)了blank工程,到webapps下一看,怎么沒(méi)有l(wèi)ib。
打開(kāi)blank/.classpath 打開(kāi),看到了具體的lib包,發(fā)現(xiàn)了原來(lái)lib都在webworks/lib下。終于看到了一個(gè)default的目錄,一高興,全部拷貝到自己lib下,不要以為這樣就結(jié)束了。還要把webwork/下的webwork.jar拷貝到自己工程的lib下,具體原因?yàn)槭裁捶珠_(kāi),有興趣的還是去官方網(wǎng)站看看項(xiàng)目介紹把。
總結(jié):配置環(huán)境來(lái)說(shuō)不要以為是Struts老手就忽視察看Webwork文檔的環(huán)境搭配。往往這比較容易吃虧,當(dāng)自己做了一個(gè)小DEMO的時(shí)候才發(fā)現(xiàn),lib下竟然少包。。還是從文檔***頁(yè)慢慢來(lái)的好。
DEMO開(kāi)始
做小的Struts+WebWork德DEMO當(dāng)然要從輸入到輸出結(jié)果比較好了。具體功能如下:就是一個(gè)值從一個(gè)頁(yè)面?zhèn)鞯搅硪粋€(gè)頁(yè)面。
***步
老生常談的web.xml
xml 代碼
- ﹤filter﹥
- ﹤filter-name﹥webwork﹤/filter-name﹥
- ﹤filter-class﹥
- com.opensymphony.webwork.dispatcher.FilterDispatcher
- ﹤/filter-class﹥
- ﹤/filter﹥
- ﹤filter-mapping﹥
- ﹤filter-name﹥webwork﹤/filter-name﹥
- ﹤url-pattern﹥/*﹤/url-pattern﹥
- ﹤/filter-mapping﹥
- ﹤listener﹥
- ﹤listener-class﹥
- org.springframework.web.context.ContextLoaderListener
- ﹤/listener-class﹥
- ﹤/listener﹥
按照Struts思維,應(yīng)該配置一個(gè)Servlet,但是看到WEBWORK2.2.4是filter取代了Servlet。這個(gè)是因?yàn)橐С諥JAX,在2.1中還是Servelt。***的webwork ioc推薦的是spring 。所以Struts+WebWork中有了spring監(jiān)聽(tīng)器的配置。
第二步
index.jsp
java 代碼
憑著Struts經(jīng)驗(yàn)想迅速體驗(yàn)下WW的標(biāo)簽。
ActionForm。
Webwork是怎樣處理的呢,往下看。
第三步:
配置類(lèi)似于struts-config.xml的文件。終于在ww的例子中WEB-INF/classes/目錄下,找到了兩個(gè)配置文件webwork.property和xwork.xml。有兩個(gè)竟然。還是先看看xwork.xml把。一看如下:
xml 代碼
- ﹤xwork﹥
- ﹤include file="webwork-default.xml"/﹥
- ﹤package name="default" extends="webwork-default"﹥
- ﹤default-action-ref name="home" /﹥
- ﹤action name="home"
- class="com.opensymphony.webwork.example.HomeAction"﹥
- ﹤result﹥/WEB-INF/pages/home.jspresult﹥
- action﹥
- ﹤/package﹥
- ﹤/xwork﹥
其實(shí)作為Struts+WebWork簡(jiǎn)單例子可以只要考慮
根據(jù)自己的程序xwork.xml如下:
xml 代碼
- ﹤action name="test" class="
- com.yuanfeng.web.action.Testaction"﹥
- ﹤result name="success"﹥/WEB-INF/pages/result.jsp
- ﹤/result﹥
- ﹤action﹥﹤/action﹥
要放到web-inf/classes下,其實(shí)就是必須放在classpath下。第四步:
來(lái)看看Testaction這個(gè)類(lèi)
java 代碼
- public class Testaction extends ActionSupport{
- UserInfo userInfo;
- public String execute() throws Exception {
- System.out.println("UserInfo = "+userInfo.getUsername());
- Map session = ActionContext.getContext().getSession();
- session.put("user", userInfo);
- return SUCCESS;
- }
- public UserInfo getUserInfo() {
- return userInfo;
- }
- public void setUserInfo(UserInfo userInfo) {
- this.userInfo = userInfo;
- }
- }
UserInfo它其實(shí)就是包含用戶(hù)信息的一個(gè)set/get方法的類(lèi),并沒(méi)有像ActionForm依賴(lài)Struts。
這樣處理的好處還是很多的。起碼不用兩個(gè)類(lèi)似的對(duì)象互相轉(zhuǎn)換了(bean To Form or From To bean)。
再看看execute方法。
OH YEAR終于沒(méi)有那惡心的四大參數(shù)了,但怎么獲取這些參數(shù)呢。
通過(guò)ActionContext類(lèi)來(lái)獲得。
PS:如果你少lib/下少包,現(xiàn)在倒入會(huì)有災(zāi)難性后果,classes被clear,你的配置文件都消失了。!
郁悶吧。還是把它們放到src下保險(xiǎn),Struts+WebWork簡(jiǎn)單Demo運(yùn)行成功,得到了username。
【編輯推薦】