WebWork/JSP/Velocity建立登录页面 |
作者:Erik Swenson,陈姣姣 翻译 发文时间:2003.06.26 20:32:48 |
![]() |
概述 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> <B>马上行动</b> |
WebWork是一个简单的、灵活的、强大的开放源代码Web应用程序框架。本文介绍了基本的WebWork功能。访问OpenSympony站点了解更多的指示,并且下载更新的WebWork版本。当你下载完了以后,进入到Jakarta站点看一看Velocity,一个简单的、快速开放源代码临时引擎,它可是你的网页中JSP的备选项。
【关于作者】
Erik Swenson是Open Source Software Solutions的顾问和创始人。他精通使用开放源代码软件和组件进行Java开发,而且,他开发了JasperEdit和OpenReports开放源代码项目。