webwork学习笔记 ------------------------------ 作者: kingfish([email protected]) 关键字: webwork1.4, tomcat5 -------------------------------------- 本人最近学习webwork,发现资料很少(如果您有,请发一份给我,先谢啦), 由于是开源项目,就粗略的看了看源码. 以下是我看后整理的一份笔记, 比较简单, 希望能给用得到的网友带来一点帮助. 
水平有限,错误难免,请见谅+指正! 
环境说明:   使用Tomcat5.0+webwork1.4   将下载的webwork中的webwork.war在tomcat的webapps下解开为webwork目录. 
一. 一个servlet :webwork.dispatcher.ServletDispatcher       1.简介    webwork1.4所有自带例子中的action都提交到此servlet进行处理,重要性当然不言而喻.    打开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. 查找相应action类,产生实例.         3. 执行doValidation()校验输入参数;         4. 如果3校验结果为合法, 执行doExecute();          5. 根据执行结果字符串("success","input","error")查找views配置转到相应view. 
二.  动手写一个简单例子 
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下) 在原有基础上增加下面一个action    <action name="HelloAction" alias="hello">       <view name="success">hellosuccess.jsp</view>       <view name="error">helloerror.jsp</view>       <view name="input">helloinput.jsp</view>    </action> 
3.相关jsp文件  建立以下四个jsp文件,存放目录为:webwork下. (1)index.jsp  <html>   <head>     <title>test webwork</title>   </head>   <body>     <A href="helloinput.jsp">example</a>   </body> </html> (2)helloinput.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   同上,将字符串改掉即可.   本例子中只是配置中用到,运行过程未用此页面. 
4.运行   (1)启动Tomcat   (2)IE中输入:http://localhost:8080/webwork/index.jsp   (3)不输入任何字符,提交,页面仍然在helloinput.jsp      输入字符后提交,页面转至hellosuccess.jsp 
5.流程说明   (1) 启动Tomcat后, 初始化servlet(ServletDispatcher)   (2) 在输入页面(helloinput.jsp), 输入字符提交(提交到hello.action)   (3) 根据web.xml中配置,此请求由ServletDispather处理.   (4) servlet根据actionName("hello")查找配置(配置内容:hello.action=HelloAction)   (5) 产生HelloAction实例   (6) servlet调用HelloAction的doValidation()校验输入参数.   (7) 校验通过, servlet调用HelloAction的doExecute(),返回成功("success").   (8) 根据views配置查找到:hello.success=hellosuccess.jsp (actionaliasName.viewName=pagename)   (9) servlet中forward到hellosuccess.jsp   (10)输出hello world!, 完成. 
  如果不输入直接提交,以下几步略有不同   (7) 校验未通过,产生错误信息. 其它方法中检测到有错误信息,默认返回"input"   (8) 根据views配置查找到:hello.input=helloinput.jsp   (9) servlet中forward到helloinput.jsp   (10)完成. 
6.补充   HelloAction的调用步骤其实是:   ServletDispatcher->GenericDispatcher->调用executeaction()->ActionSupport的execute()->调用HelloAction的相应方法.   5中的说明只是为了简单而这样描述的.   如果你对这些有兴趣,可以看看ServletDispatcher,GenericDispatcher,ActionSupport,Action等源码. 
三. webwork自带例子Bank app的简单介绍    1.环境     http://localhost:8080/webwork 中JSP下面的Bank app     相关class:webapps\webwork\WEB-INF\lib\webwork-examples.jar中的webwork.examples.bank.Transfer     相关jsp:  webapps\webwork\examples\bank\index.jsp,transfer.jsp,confirm.jsp     相关配置: 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"/>    相当与   <form action="bank.transfer!default.action" method="post">     <input type="submit" />   </form>   自动提交.    (1)提交到servlet, servlet处理bank.transfer!default.action(构成:actionAliasName+!commandName+.action)        由于action中有command(command为:default), 通过reflect查找doCommand即(doDefault),       执行doDefault()返回"input"    (2)input对应的view为transfer.jsp,转到此页面.    (3)输入参数后提交,执行bank.transfer.action, 其它流程与上面第二部分第5结类似. 
  
=================================================================================== kingfish 2004.3 如转帖请保持文档完整. 
欢迎交流! 
 
 
  |