学习笔记

Simple is beautiful.

导航

<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

公告

...

常用链接

留言簿(1)

随笔分类(2)

随笔档案(56)

Weblog

搜索

最新评论

评论排行榜

WebWork初体验

WebWork初体验

WebWork作为一个实现了IOC的轻量级Web Application work一直备受开发者的青睐。
跟其他的Web应用一样,我们首先要建立一个标准的WEB-INF目录(所谓标准就是目录下面包含lib和classes子目录以及Web.xml文件),接着在WEB-INF/lib下面放上WebWork所需要的.jar文件并在WEB-INF目录下建立Web.xml文件[2]。在完成了这些千篇一律的工作之后,我仔细的看了一下Web.xml中内容,它里面只定义了一个servlet:webwork,其对应的class为com.opensymphony.webwork.dispatcher.ServletDispatcher,然后由webwork这个servlet去处理所有.action的请求。看到这里,我暗自窃喜,这跟我熟悉的WAF框架是十分类似的,只不过MainServlet变成了ServletDispatcher,.do的请求变成了.action而已。
        接下来,就是到classes目录下建立xwork.xml文件,这个文件跟WAF中的mappings.xml很相似,因为对
.action的处理都是在这里被定义的,而WAF中关于.do的处理则定义在mapping.xml中。但是也有一些我并不清楚的东西,如package和Interceptor。在classes目录下还要建立一个validator.xml文件,但是这个并不是必需的。做好了这些准备工作之后,就真正开始WebWork的体验之旅了。
        1、建立一个index.jsp(以下为主要部分):
 <form action="Login.action" method="post">
  
<table cellspacing=0 width="100%">
    
<tr>
      
<td>Login ID:
        
<input type="text" name="loginId" width=100 />&nbsp;&nbsp;

          Password:
        
<input type="password" name="loginPassword" width=100 />&nbsp;&nbsp;
        
<input type="submit" ="Login" />
      
</td>
      
<td align=right>
         
Hello, <ww:property ="loginId" />

      
</td>
    
</tr>
  
</table>
</form>
< SPAN>

        需要注意的地方就是form的action属性的写法了;
        2、在xwork.xml中增加相应的处理action的节点

 <action name="Login" class="fantasysoft.webwork.Login">
   
<result name="error" type="dispatcher">index.jsp</result>
   
<result name="success" type="dispatcher">index.jsp</result>
</action>

        这里需要注意的是action节点中name的值要与index.jsp中定义的action的名字要严格匹配,对于大小

/SPAN>< SPAN>

写是敏感的。在action节点中还包含了节点,以说明处理action之后会可能出现的不同结果(name)和相应的处理方式(type)。譬如说,如果Login的这个action处理success了,则使用dispatcher将结果分(dispatch)到相应的页面。而在WAF框架中并没有这样的定义,因为在默认情况下如果不成功则会返回当前页面,不过可以定义FlowHandler,并拥有类似的功能且更加灵活;
        3、实现类Login的代码:

package fantasysoft.webwork;

import com.opensymphony.xwork.ActionSupport;

public class Login extends ActionSupport
{
    
private
 String loginId;
    
private
 String loginPassword;

    
public String getLoginPassword() 
{
        
return
 loginPassword;
    }

    
public void setLoginPassword(String loginPassword) {
        
this.loginPassword =
 loginPassword;
    }

    
public String getLoginId() {
        
return
 loginId;
    }

    
public void setLoginId(String loginId) {
        
this.loginId =
 loginId;
    }

    
public String execute() throws Exception{             
        
if (!checkUserId()return
 ERROR;  // checkUserId is the method that will be implemented
            
else return
 SUCCESS;
    }

}

        在代码中,你会发现有两个继承变量ERROR与SUCCESS。这两个变量是定义在Action这个接口的,而ActionSupport则实现了Action接口。在接口Action的代码中,我们可以看到ERROR = "error"、SUCCESS = "success"。我们可以发现这两个变量的值与xwork.xml中result子节点中的name的值是相匹配。除此之外,在代码中,我也找不到了原来在开发中经常要用到的一个API:getParameter。事实上,将表单中数据析取出来的工作是由webwork这个唯一定义的servlet去完成的,而这个类会调用Login类中set的方法将用户输入的数据赋给Login类的属性:loginId和loginPassword。在这里,我们也要跟前面index.jsp中的包含的标签联系起来。当数据被dispatch回index.jsp的时候,在index.jsp页面render的过程中是调用了get的方法去获取相应的数据的。
        最后,我们可以总结一下,整个Web应用程序的处理流程了:
        首先,当用户提交了表单(form)至Login.action后,由web.xml中定义的唯一的一个servlet:webwork去处理这个请求。webwork会以action的name:Login到xwork.xml中寻找相应的处理action的类,于是就找到了fantasysoft.webwork包中的Login类,由Login类中的execute方法来处理提交的form的数据了;
        然后,根据execute方法的返回值,再到xwork.xml中对应的action节点中去找匹配的result子节点;
        最后,根据result子节点的定义,将处理结果分发(dispatch)或者重定向(redirect)至下一个页面[3]

        

/SPAN>

posted on 2007-03-15 00:26 Ecko 阅读(165) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: