一个使用snap的Web应用
用WebWork, JSP, 和 Velocity建立一个登录页面
概述
WebWork是一个开放源代码Web应用框架。目的在于简化Web应用开发。这一栏目介绍了WebWork,并且解释了使用WebWork和两个不同的视图技术,JavaServerPages(JSP)和Velocity,进行的登录网页的创建过程。
Web应用程序和开发是复杂和费时的。但是,你能使用一个框架处理普通的Web应用程序开发任务,从而简化该过程。几种开放源代码Web应用程序框架能做这个而且做得更多。最好的一个是WebWork,一个来自于开放源代码项目的OpenSymphony组的Web应用程序框架。
WebWork最大的优势是它的简单和灵活。WebWork有一个小型的API。该API允许开发者立即启动和运行。WebWork提供许多属性和灵活的综合性能,包括:使用不同的视图技术,如JavaServerPages(JSP)、Velocity、可扩展性单语言转换说明(XSLT)、和JasperReports,的功能。
注意:本文是在WebWork 1.3.0发布的备选本2的基础之上的。为了运行提供的例子,你需要建立一个文件夹在你的应用程序服务器的webapps目录下,将例子复制到新文件夹中,并且从WebWork分布上复制需要的jar文件到WEB-INF/lib目录下。从Resources下载WebWork和本文所需的源代码。
Action
在WebWork中最重要的特征之一就是Action接口。WebWork Action提供在页面(或者视图)和企业逻辑之间的映射,从而控制一个Web应用程序的流程。在WebWork中,表单提交到一个Action URI(同一资源标记符);URI映射到一个相应的Action;执行该Action;这样用户前进到了恰当的视图。
接下来的类,LoginAction,是一个在基于Web的应用程序中处理登录表单的WebWork Action的例子。LoginAction由扩展ActionSupport而来,一个提供错误处理、视图映射和许多其它的有用的功能的基类:
import webwork.action.*;
public class LoginAction extends ActionSupport
{
private String userName;
private String password;
public String getPassword()
{
return password;
}
public String getUserName()
{
return userName;
}
public void setPassword(String password)
{
this.password = password;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String doExecute()
{
return SUCCESS;
}
public void doValidation()
{
if (userName == null || userName.length() < 1) addError("UserName", "Please enter username.");
if (password == null || password.length() < 1) addError("Password", "Please enter password.");
}
}
LoginAction包含两个JavaBean属性,password 和username. WebWork将从这些属性中取出数据,将你所需要的数据放进到你的视图中;并可以自动的解释任何参数,送到Action中设置属性值。
LoginAction使用两个来自ActionSupport的函数:doValidation()和doExecute()。doValidation()函数验证参数的合法性,并且由doExecute()函数带动用户向前到恰当的视图。doExecute()函数返回一个字符串,如果处理成功的话,该字符串为常量SUCCESS;有问题的话,该字符串为常量INPUT,将用户送回到INPUT视图,并且在LoginAction中的doValidation()函数调用addError,表示出现了一个非法参数问题并将用户返回到INPUT视图。
视图映射
WebWork ACION用两种方法映射到视图:通过一个Action.xml文件或者一个views.properties文件。每个ACION应该有一个INPUT视图和一个SUCCESS视图。接下来的Action.xml文件定义了两个actions:loginJSP和loginVelocity。两个动作都使用LoginAction类,如果LoginAction返回SUCCESS的话,则带用户前进到success.html。如果LoginAction返回INPUT,动作带用户前进到相应的INPUT视图,该动作要么是login.jsp,要么是login.vm:
<actions>
<action name="LoginAction" alias="loginJSP">
<view name="input">login.jsp</view>
<view name="success">success.html</view>
</action>
<action name="LoginAction" alias="loginVelocity">
<view name="input">login.vm</view>
<view name="success">success.html</view>
</action>
</actions>
视图
WebWork为许多不同视图技术提供支持,最通用的使JSP和Velocity。下面的页是两个登录页例子——一个用JSP创建,另一个用Velocity创建。每页包含一个带有提交给一个WebWork动作的用户名和密码字段的表单。
login.jsp页使用WebWork标记库,创建和迭代了两个字段,并且通过收集错误重复迭代。webwork:textfield和webwork:password标记创建了文本和密码域,并且webwork:iterator标记重复迭代任何从LoginAction返回的错误。webwork:property标记设置了username、password和errors属性:
<%@ taglib uri="webwork" prefix="webwork" %>
<html>
<head>
<title>WebWork JSP Example</title>
</head>
<body>
<form action="loginJSP.action" method="post">
<webwork:property>
<webwork:textfield label="'Name'" name="'userName'"/>
<webwork:password label="'Password'" name="'password'"/>
</webwork:property>
<input type="submit" value="Submit"/>
</form>
<webwork:iterator value="errors">
<br><webwork:property/>
</webwork:iterator>
</body>
</html>
login.vm页使用Velocity临时语言增加域并且迭代所有错误。在Velocity中,$符号表示一个引用;!符号告诉Velocity如果引用为空的话,什么都不显示;#符号表示一个指令。在接下来的例子中,$!userName和$!password访问LoginAction的userName和password属性;# foreach指令通过errors属性循环:
<html>
<head>
<title>WebWork Velocity Example</title>
</head>
<body>
<form action="loginVelocity.action" method="post">
<input type="text" name="userName" value="$!userName"/>
<input type="text" name="password" value="$!password"/>
<input type="submit" value="Submit"/>
</form>
#foreach ($error in $errors)
<br>$error
#end
</body>
</html>
马上行动
WebWork是一个简单的、灵活的、强大的开放源代码Web应用程序框架。本文介绍了基本的WebWork功能。访问OpenSympony站点了解更多的指示,并且下载更新的WebWork版本。当你下载完了以后,进入到Jakarta站点看一看Velocity,一个简单的、快速开放源代码临时引擎,它可是你的网页中JSP的备选项。
关于作者
Erik Swenson是Open Source Software Solutions的顾问和创始人。他精通使用开放源代码软件和组件进行Java开发,而且,他开发了JasperEdit和OpenReports开放源代码项目。