快速创建web app
-使用webwork, jsp, 和velocity创建一个登录页面
原文链接:http://www.javaworld.com/javaworld/jw-03-2003/jw-0307-opensourceprofile.html?
前言
webwork是一个开源的web应用程序架构,它可以简化web应用的部署。我在这篇文章中将会向大家介绍webwork的知识,其中会结合webwork创建一个“登录页面”。附带的还会介绍其他两个不同的技术,jsp和velocity。
作者 erik swenson
译者注:文中括号中的注释有些是我自己的理解,有些是因为翻译过程中直译过来觉得不太妥帖所以把原文也写了下来方便读者自己理解。有翻译的不对的地方或有什么技术上的问题可以发邮件给我,希望我的工作能够带给你帮助:)mail:wafd2003@yahoo.com.cn
web应用程序的设计和部署非常麻烦而起耗费时间。不过,现在你可以通过使用一个“架构”来处理公共的web应用部署任务以达到简化开发过程的目的。有很多的开源架构都可以做到这一点甚至能向你提供比更多的功能。其中最好的大概要数webwork了,它是来自opensymphony 组织的一个开源项目。
webwork最大的好处是他的简单易用。webwork只有很少的api,开发人员可以很快的掌握它们。它提供了一个扩展性极好的集合,其中包括几种十分好用的页面显示技术比如jsp,velocity,xslt和jasperreports。webwork 项目有一群活跃的支持者他们中有开发人员,设计人员还有直接的用户。
注意:这篇文章所讲的是基于webwork 1.3.0发布版。要想运行本文提供的例子,你需要在你的应用服务器创建一个webapp目录(如果是weblogic直接使用defaultapp目录就可以了)然后把例子代码拷贝到这个目录下,再把运行程序所需要的.jar文件拷贝到web-inf/lib目录下。你可以从本文提供的资源链接中找到webwork的下载地址。
动作(actions)
webwork 中一个最重要的特性是action接口。webwork 的“动作”(actions)通过页面(或视图)与业务逻辑之间提供的映射关系来控制web应用程序的流程。在webwork中,forms(相当于html中的form)被提交给一个action uri(相当于html中form的action) ;uri会映射一个相应的action;然后action会执行;接下来用户会链接到相应的页面。
下面的类,loginaction是一个webwork 动作(action)的例子,它处理web应用程序的登录窗体(form)。loginaction 继承了actionsupport,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()方法返回一个string,如果所有的处理都没有问题的话通常这个string是一个常量“success”,或者,如果处理过程出现问题的话这个string就是一个常量input使用户返回到input页面(就是你进入的那个页面)。在dovalidation()方法中的adderror方法是在出现问题的时候向用户显示错误并返回的input页面。
页面映射(view mapping)
webwork 的动作(actions)映射到页面(views)有两个途径:一个是通过action.xml文件另一个是通过views.properties文件。每一个动作(actions)应该有一个input页面(views)何以个success页面(views)。下面的action.xml文件定义了两个动作(actions),loginjsp和loginvelocity。两个动作(actions)使用同一个类loginaction并且如果loginaction返回seccess就把用户指向到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>
页面(views)
尽管webwork提供了对多种不同的显示技术的支持,但是多数情况下使用的是jsp和velocity。下面是两种显示页面的例子一个使用jsp另一个使用了velocity。每个页面都包含一个form,这个form中包含username和password字段,它们被提交给一个webwork的action.
login.jsp页面使用webwork标记库来创建和描述两个字段,通过一个错误(errors)集合来迭代。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中,$ 符号代表一个引用;!标记代表如果引用是null就什么也不显示;#标记代表一个命令。在下面的例子中,$!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 的更多的知识和下载webwork 的最新版本。下载webwork 之后再到jakarta 站点查找velocity的内容,velocity是一个简单,快速的开源的模板引擎,他可以作为你的web页面中处jsp之外另一个很好的选择。
关于作者
erik swenson是open source software solutions开源组织的顾问和创始人。swenson 专注与使用开源软件和组件来进行java的部署。此外,他还开发了japeredit和openreports开源软件。
资源
下载本文的例子代码:
http://www.javaworld.com/javaworld/jw-03-2003/opensource/jw-0307-opensourceprofile.zip
从opensymphony站点下载 webwork :
http://www.opensymphony.com/webwork/
velocity 是 apache jakarta 项目的一部分你可以从这里下载:
http://jakarta.apache.org/velocity/index.html
"开始使用 velocity模板引擎," geir magnusson jr. (javaworld, december 2001):
http://www.javaworld.com/javaworld/jw-12-2001/jw-1228-velocity.html
其他开源的web应用架构包括:maverick:
http://mav.sourceforge.net
struts:
http://jakarta.apache.org/struts/index.html
jasperreports 主页:
http://jasperreports.sourceforge.net
"使用jasperreports简单的实现报表功能," erik swenson (javaworld, september 2002):
http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html
查阅有关erik swenson的更多的开源羡慕:
http://www.javaworld.com/columns/jw-opensource-index.shtml
访问javaworld有关部署工具的讨论主题:
http://www.javaworld.com/channel_content/jw-tools-index.shtml
访问javaworld有关jsp的讨论主题::
http://www.javaworld.com/channel_content/jw-jsp-index.shtml
到 javaworld 论坛中讨论:
http://forums.devworld.com/webx?13@@.ee6b802
订阅javaworld's 每周的免费邮件信息:
http://www.javaworld.com/subscribe
你将在 idg.net看到更多的有关it技术的文章。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器