WebWork學(xué)習(xí)筆記
WebWork學(xué)習(xí)***步: 一個servlet :webwork.dispatcher.ServletDispatcher
1.簡介
webwork1.4所有自帶例子中的action都提交到此servlet進(jìn)行處理,重要性當(dāng)然不言而喻.
打開webwork\WEB-INF下web.xml,可以看到以下配置
- ...
 - <servlet>
 - <servlet-name>action</servlet-name>
 - <servlet-class>webwork.dispatcher.ServletDispatcher
 - </servlet-class>
 - <load-on-startup>1</load-on-startup>
 - </servlet>
 - ...
 - <servlet-mapping>
 - <servlet-name>action</servlet-name>
 - <url-pattern>*.action</url-pattern>
 - </servlet-mapping>
 - ...
 
2 功能: 1. 處理action請求
2. 查找相應(yīng)action類,產(chǎn)生實(shí)例.
3. 執(zhí)行doValidation()校驗輸入?yún)?shù);
4. 如果3校驗結(jié)果為合法, 執(zhí)行doExecute();
5. 根據(jù)執(zhí)行結(jié)果字符串("success","input","error")查找views配置轉(zhuǎn)到相應(yīng)view.
WebWork學(xué)習(xí)第二步:動手寫一個簡單例子
1. HelloAction.java 源代碼
- import webwork.action.ActionSupport;
 - import webwork.action.Action;
 - public class HelloAction
 - extends ActionSupport {
 - private String name ;
 - public HelloAction() {
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - public String getName() {
 - return this.name;
 - }
 - public void doValidation() {
 - else if(name==null||name.length()<1){
 - addError("Name","can't be null or empty!");
 - }
 - }
 - //如果不做其它處理,也可以不override此方法.
 - 缺省返回success
 - public String doExecute() {
 - return SUCCESS;
 - }
 - }
 
編譯完的class文件拷入webwork\WEB-INF\classes下.
2.配置
有兩種配置方法可選:
(1) 配置views.properties(在webwork\WEB-INF\classes下)
hello.action=HelloAction
hello.input=helloinput.jsp
hello.success=hellosuccess.jsp
hello.error=helloerror.jsp
(2) 配置actions.xml(在webwork\WEB-INF\classes下)
在原有基礎(chǔ)上增加下面一個action
- <action name="HelloAction" alias="hello">
 - <view name="success">hellosuccess.jsp< SPAN>view>
 - <view name="error">helloerror.jsp< SPAN>view>
 - <view name="input">helloinput.jsp< SPAN>view>
 - < SPAN>action>
 
3.相關(guān)jsp文件
建立以下四個jsp文件,存放目錄為:webwork下.
(1)index.jsp
- <html>
 - <head>
 - <title>test webwork</title>
 - </head>
 - <body>
 - <A href="helloinput.jsp">example</a>
 - </body>
 - </html>
 
(2)hellosuccess.jsp
- <html>
 - <head>
 - <title>test webwork</title>
 - </head>
 - <body>
 - <form action="hello.action" method="post">
 - <input type="text" name="name" value=""/>
 - <input type="submit" value="Submit"/>
 - </form>
 - </body>
 - </html>
 
(3)hellosuccess.jsp
- <HTML>
 - <HEAD>
 - <TITLE>Test</TITLE>
 - </HEAD>
 - <BODY>
 - Hello world!
 - </BODY>
 - </HTML>
 
(4)helloerror.jsp
同上,將字符串改掉即可.本例子中只是配置中用到,運(yùn)行過程未用此頁面.
4.運(yùn)行
(1)啟動Tomcat
(2)IE中輸入:http://localhost:8080/webwork/index.jsp
(3)不輸入任何字符,提交,頁面仍然在helloinput.jsp
輸入字符后提交,頁面轉(zhuǎn)至hellosuccess.jsp
5.流程說明
(1) 啟動Tomcat后, 初始化servlet(ServletDispatcher)
(2) 在輸入頁面(helloinput.jsp), 輸入字符提交(提交到hello.action)
(3) 根據(jù)web.xml中配置,此請求由ServletDispather處理.
(4) servlet根據(jù)actionName("hello")查找配置(配置內(nèi)容:hello.action=HelloAction)
(5) 產(chǎn)生HelloAction實(shí)例
(6) servlet調(diào)用HelloAction的doValidation()校驗輸入?yún)?shù).
(7) 校驗通過, servlet調(diào)用HelloAction的doExecute(),返回成功("success").
(8) 根據(jù)views配置查找到:
hello.success=hellosuccess.jsp (actionaliasName.viewName=pagename)
(9) servlet中forward到hellosuccess.jsp
(10)輸出hello world!, 完成.
如果不輸入直接提交,以下幾步略有不同
(7) 校驗未通過,產(chǎn)生錯誤信息. 其它方法中檢測到有錯誤信息,默認(rèn)返回"input"
(8) 根據(jù)views配置查找到:hello.input=helloinput.jsp
(9) servlet中forward到helloinput.jsp
(10)完成.
6.補(bǔ)充HelloAction的調(diào)用步驟其實(shí)是:
ServletDispatcher->GenericDispatcher->
調(diào)用executeaction()->ActionSupport的execute()->
調(diào)用HelloAction的相應(yīng)方法.
5中的說明只是為了簡單而這樣描述的.
如果你對這些有興趣,可以看看ServletDispatcher,GenericDispatcher,ActionSupport,Action等源碼.
WebWork學(xué)習(xí)第三步: webwork自帶例子Bank app的簡單介紹
1.環(huán)境
http://localhost:8080/webwork 中JSP下面的Bank app
相關(guān)class:webapps\webwork\WEB-INF\lib\webwork-examples.jar中的webwork.examples.bank.Transfe
相關(guān)jsp: webapps\webwork\examples\bank\index.jsp,transfer.jsp,confirm.jsp
相關(guān)配置: webapps\webwork\-WEB-INF\classes\views.properties
# Bank example (Struts example adaptation)
bank.transfer.action=bank.Transfer (即webwork.examples.bank.Transfer)
bank.transfer.input=transfer.jsp
bank.transfer.success=confirm.jsp
bank.transfer.error=transfer.jsp
由于webwork.properties配有
webwork.action.packages=webwork.examples, webwork.examples.vxml
因此上面配置bank.transfer.action=bank.Transfer省略了webwork.examples.
2.index.jsp
- <jsp:forward page="bank.transfer!default.action"/>
 
相當(dāng)與
- <form action="bank.transfer!default.
 - action" method="post">
 - <input type="submit" />
 - </form>
 
WebWork學(xué)習(xí)第四步:自動提交.
(1)提交到servlet, servlet處理bank.transfer!default.action(構(gòu)成:actionAliasName+!commandName+.action)
由于action中有command(command為:default), 通過reflect查找doCommand即(doDefault),
執(zhí)行doDefault()返回"input"
(2)input對應(yīng)的view為transfer.jsp,轉(zhuǎn)到此頁面.
(3)輸入?yún)?shù)后提交,執(zhí)行bank.transfer.action, 其它流程與上面第二部分第5結(jié)類似.
【編輯推薦】















 
 
 
 
 
 
 