[注:这篇文章只是作者在学习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)至下一个页面。
分享到:
相关推荐
### WebWork框架下的“Hello World”示例解析 #### 标题解读:“Hello World the WebWork way” - **核心概念**:本标题旨在通过一个简单的“Hello World”示例介绍如何在WebWork框架中实现基本的功能。对于初学者...
本文将详细介绍如何使用WebWork来实现一个基础的"HelloWorld"示例,这对于初学者来说是一个很好的起点。 首先,你需要准备一个运行环境,比如已经安装并配置好的Tomcat服务器。接着,你需要从网上下载WebWork的最新...
本示例是一个基于WebWork2.26的“HelloWorld”程序,非常适合初学者了解WebWork的基本用法和工作原理。 首先,我们需要理解WebWork的核心概念: 1. **Action**:Action是WebWork的核心组件,它代表了业务逻辑。在...
"webwork之HelloWorld篇"是入门WebWork框架的一个基本教程,通常包括创建一个简单的Web应用程序并展示“Hello, World!”的输出。 在Eclipse中创建一个Hello Web工程,首先你需要安装必要的插件,如JSTL和MyEclipse...
这个“WebWork入门例子 HelloWorld”是为初学者准备的一个简单教程,旨在帮助他们快速理解WebWork框架的基本概念和工作原理。 WebWork的核心特性包括动作映射、数据绑定、拦截器、异常处理和强大的视图渲染。它通过...
webwork in action_第1部分-WebWork简介_第2章-WebWork方式的Hello World
"webwork_helloworld"项目是为初学者准备的一个基础示例,旨在帮助理解WebWork框架的基本工作原理和用法。在这个项目中,你可能会遇到一些问题,这些问题可能是配置错误、代码不正确或运行时环境设置不当导致的。 ...
NULL 博文链接:https://goowolf.iteye.com/blog/507075
- **第一个WebWork应用**:通过一个简单的“Hello World”示例,读者可以快速上手WebWork框架的基本用法,了解其工作流程和基本概念。 - **核心概念**:本书第二部分深入探讨了WebWork的核心概念,如动作、拦截器、...
《WebWork in Action》是一本专注于介绍WebWork框架的书籍,源代码的提供是为了让读者更深入地理解和实践书中的示例。WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建动态Web应用程序。它强调了代码...
webwork in action 第一部分:概貌 第二部分:核心内容 第三部分:内容的显示 第四部分:高级话题
- **项目搭建**:通过一个简单的“Hello World”示例介绍如何搭建WebWork环境,包括配置文件设置、依赖管理等。 - **动作编写**:展示如何编写动作类以及如何定义动作的行为逻辑。 - **视图展示**:介绍如何将动作的...
《Webwork.in.Action》是一本深入探讨Webwork框架的书籍,中文版的出现使得国内开发者能够更方便地学习和理解这一强大的Java web开发框架。Webwork是由一系列组件组成的MVC(Model-View-Controller)框架,它在Java...
webwork in action 中文版
webwork in action 中文版