UML软件工程组织

webwork+jstl开发页面
转自:javaresearch
    近期研究了一下webwork和jstl,发现二者组合开发页面流真是很简单的。因为没有找到类似的文章,我就抛砖引玉了。

    通常我们只提webwork,实际上使用的时候,我们会用到两个项目webwork和xwork。webwork的功能如下:
    1.提供页面展现的标签
    2.负责拦截向后台发送的action请求,
    3.将前台的form请求转化为本地的上下文,并将本地返回的上下文设置到request/servlet上下文中
    4.将action请求派发给xwork定义的action或action方法。
    5.返回应答信息
    xwork的功能:
    1.拦截器功能,webwork传递过来的请求和上下文转化为action的属性或特定的model对象(类似struts的actionform),并将model数据或action属性设置到本地上下文中
    2.执行action,完成业务逻辑。

    webwok这种划分,使得web开发和后台应用的开发可以完全分开,后台可以进行独立的测试,action完全脱离web环境。

举一个做login的例子:

页面login.html:
<form method="post" action="login.action">
<p align="center">用户名:<input type="text" name="model.account" />
<br>
<p align="center">密  码 :<input type="password" name="model.password" />
</form>
开发action:
public class LoginAction implements Action, ModelDriven {
    private final static String LOGIN_FAIL = "loginfail";
    User loginInfo = new User();
    public String execute() throws Exception {
         if(validate(loginInfo)){
//将当前登录的用户名保存到Session
            ActionContext ctx = ActionContext.getContext();
            Map session = ctx.getSession();
            session.put("login_user_account", loginInfo.getAccount());
            return SUCCESS;
        } else {
            loginInfo.setErrorMsg("Username/Password Error!");
            return LOGIN_FAIL;
        }
    }
    public String reLogin() throws Exception {
        return LOGIN_FAIL;
    }


    public Object getModel() {
        return loginInfo;
    }
}
配置文件xwork.xml
<package name="login" extends="webwork-default">
    <action name="login" class="com.nwsh.login.action.LoginAction">
      <result name="success" type="dispatcher">
        <param name="location">/index.htm</param>
      </result>
      <result name="loginfail" type="dispatcher">
        <param name="location">/login.htm</param>
      </result>
      <interceptor-ref name="params" />
      <interceptor-ref name="model-driven"/>
    </action>
</package>

    对于本页面,简单到登陆页面可以使用html,对于由信息显示的页面可以配合jstl来开发Jsp(2.0).页面也十分简单,举个显示用户信息的例子:
<input type="text" name="userInfo.account" value="${userInfo.account}">
<input type="text" name="userInfo.name" value="${userInfo.name}">

    在jsp2.0中,可以直接使用EL语言,这样你就可以使用${userInfo.name},来表示action的model-userInfo包含的信息,注意:这里需要使用一个拦截器,将model属性设置到request/serlvet的上下文中。

 

 

版权所有:UML软件工程组织