A helloWorld in webWork[旧作迁移]

[注:这篇文章只是作者在学习webwork时的一点感触,由于作者也是初学者,若有不妥之处还请见谅!若有兴趣,希望可以与您一起讨论学习经验。]

在开始介绍webwork 之前,有必要先了解一下它的历史
WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目,如下示意图所示:
|-----WebWork2 }web
WebWork1-------|
|-----XWork 1 }NonWeb

Xwork简洁、灵活功能强大,它是一霰曜嫉?/span >Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。

WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等。

下面以webWork tutorial 开始介绍

首先要有你的web容器,可以下载一个tomcat然后部署一下你的应用,具体做法已经在前面的文章里面有介绍。

三个不可缺少的文件:“WEB-INF/web.xml”“WEB-INF/classes/xwork.xml”“WEB-INF/classes/validators.xml”。

下面介绍Actions机制
Create a JSP page that will call the action;
Create the action class;
Create a JSP page that will process the result;
Register the action in xwork.xml.

以“HelloWorld”为例:

web.xml:

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>My WebWork Application</display-name>
<servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>/WEB-INF/lib/webwork-2.1.jar</taglib-location>
</taglib>
</web-app>

这个文件注册了一个ServletDispatcher,它与*.action映射

xwork.xml:
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">

<xwork>
<!-- Include webwork defaults (from WebWork-2.1 JAR). -->
<include file="webwork-default.xml" />

<!-- Configuration for the default package. -->
<package name="default" extends="webwork-default">
<!-- Default interceptor stack. -->
<default-interceptor-ref name="defaultStack" />

<!-- Action: Lesson 03: HelloWebWorldAction. -->
<action name="helloWebWorld" class="lesson03.HelloWebWorldAction">
<result name="success" type="dispatcher">ex01-success.jsp</result>
</action>
</package>
</xwork>

这个文件是告诉webwork有这样一个action,名字叫做“helloWebWorld” ,而这样一个action会由“lesson03.HelloWebWorldAction”这样一个类去实现。在这样的action作用下,会得到什么样的结果呢? <result name="success" type="dispatcher">ex01-success.jsp</result> 成功后的结果会对应到ex01-success.jsp这样一个.jsp文件里面去。

ex01-success.jsp:
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 1</title>
</head>
<body>

<ww:property value="hello" />

</body>
</html>
这样我们就可以明白,当我们在浏览器地址栏上,点击某个action地址的时候,浏览器将会发送这个URL给helloWebWorld.action ,这时servelt容器会触发WebWork's ServletDispatcher,并在xwork.xml文件中寻找action,对照映射将这样的一个action name找到对应到action:lesson03.HelloWebWorldAction 这时一个新的action实例被创建,并执行execute() 这个方法。
HelloWebWorldAction.java:
package lesson03;

import com.opensymphony.xwork.ActionSupport;

public class HelloWebWorldAction extends ActionSupport {
String hello;
public String getHello() {
return hello;
}
public String execute() throws Exception {
hello = "Hello, WebWorld!";
return SUCCESS;
}
}
当执行execute()后,返回的结果是SUCCESS这个值的VALUE是 success,这个时候ServletDispatcher获得了从execute()返回的值,并在xwork.xml文件中寻找拥有这个名字的结果,如果找到了,就执行其后相应的“ex01-success.jsp”
运行这样的一个APP。你将会在浏览器中看到"Hello ,WebWorld".
解释一下,"Hello WebWorld"之所以会出现的原因,是因为标签"<ww:property value="hello" />" ,这个标签在action类中寻找可以被执行的.在这个APP中,实际上,标签寻找的是它的父类的方法"getHello()" ,因为它被子类复写,所以执行子类的这个方法。又因为"HelloWebWorldAction"这个方法被执行,而在这个方法中hello被赋值为“Hello, WebWorld”所以getHello() 将返回“Hello, WebWorld”,并在 ex01-success.jsp 文档中被显示出来。
附带原文的依据话"Actions are the basic "unit-of-work" in WebWork, they define, well, actions. An action will usually be a request, (and usually a button click, or form submit). "
我们可以总结一下,整个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)至下一个页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值