在本篇将会通过一个简单却经典的HelloWorld程序手把手的教你如何编写(其实我更愿意称之为创建,因为有了这么强大的框架需要编写的代码已经很少很少)一个WebWork应用程序。即使你从没接触过WebWork甚至你从没用过任何其他框架,在本篇结束的时候你都能够轻松的通过WebWork建立简单的Web应用程序了。不过我们约定你必须懂一定的HTML和JAVA知识:)。Let's Go!
首先自然是下载WebWork的开发包,这个我就不专门做一节了。google一下,到WebWork官方站点下载最新的二进制版本,解压后你会找到范例、文档、一些jar、甚至是框架的源代码。现在先不要被这么多的东西吓倒,先不要管它们(虽然以后你会非常的需要它们),我们现在只要找出构建基本Web应用程序所需的内容,一些jar和配置文件。
一、搭建骨架 在WebWork的开发包中找到下面一些应用程序必须的文件,相信这个难不倒你:)
xwork.jar WebWork构建所依赖的XWork类库
common-logging.jar 通用的日志类库,WebWork用它为Log4J或者JDK提供透明的日志记录
oscore.jar OSCore,一个来自OpenSymphony公司的通用功能类库
velocity-dep.jar 依赖Velocity类库
ognl.jar 对象图导航语言(OGNL),WebWork中使用的表达式语言
xwork.xml WebWork配置文件,为你的Web应用程序定义action、result和interceptor
web.xml J2EE Web应用程序配置文件,为你的Web应用程序定义servlet、JSP标签库等内容 现在创建一个名为HelloWorld项目(用你喜欢和习惯的IDE),在项目下创建一个源代码文件夹如src,一个web文件夹如webApp,把web.xml放在WEB-INF目录下,而xwork.xml应该被放在WEB-INF\classes下,如果是在IDE环境下就放在源代码文件夹下编译后就会出现在WEB-INF\classes了。相关的*.jar自然是放在WEB-INF\lib下了。下面我们对几个配置文件进行基本的修改。
为了让WebWork正常工作,我们必须配置一个在
上一篇笔记中提到的前端控制器(Front Controller),使特定URL模式的请求都被提交给WebWork处理。这和Struts是相似的。来看代码吧(web.xml):
1 <web-app>
2
3 <servlet>
4 <servlet-name>webwork</servlet-name>
5 <servlet-class>
6 com.opensymphony.webwork.dispatcher.ServletDispatcher
7 </servlet-class>
8 </servlet>
9
10 <servlet-mapping>
11 <servlet-name>webwork</servlet-name>
12 <url-pattern>*.action</url-pattern>
13 </servlet-mapping>
14
15 </web-app> 为了使用WebWork的标签库,还需要给出一个告诉程序在哪里可以找到标签苦的配置,还是看代码吧(web.xml):
1 <web-app>
2
3 <taglib>
4 <taglib-uri>webwork</taglib-uri>
5 <taglib-location>
6 /WEB-INF/lib/webwork-2.1.7.jar
7 </taglib-location>
8 </taglib>
9
10 </web-app> 你是不是有点奇怪为什么taglib配置的是一个.jar而不是一个TLD文件,其实根据规范程序会自动到.jar中去找指定位置的TLD,我们暂且不管这个问题吧,先去看看WebWork自己的核心配置文件-xwork.xml吧。
说明一下,因为WebWork是基于XWork这个这个子项目的,所以这个文件叫做xwork,不要被它弄迷糊了。我们先来对xwork.xml做一个最基本的配置,以后熟悉了再往里面加入自己的东西就很轻松了。(xwork.xml)
1 <xwork>
2 <include file="webwork-default.xml">
3
4 <package name="default" extends="webwork-default">
5 <default-interceptor-ref name="completeStack"/>
6 </package>
7 </xwork>
我们暂时只用关注一个问题:xwork.xml中包含了一个名教webwork-default.xml的文件,这个文件已经包含在了webwork的.jar中了,它提供了让WebWork正常运行的标准配置,也提供了一些默认的处理方式。了解到这里已经足够了,我们继续往下走。
下面在xwork.xml同一个目录下创建一个webwork.properties配置文件,它定义了一些告诉webwork如何工作的信息,暂时不用关注它,在里面加入一行内容:(webwork.properties)
1 webwork.tag.altSyntax = true
到此,基本的骨架就搭成了,其实并不复杂。下面我们就开始进入真正与业务相关的内容吧。
二、你的第一个action 我们现在假设HelloWorld的需求是这样的:当用户访问一个URL的时候(如http://localhost/helloworld.action webwork默认的后缀是action,后面的笔记中你会了解到这个是可以修改的,比如换成现在比较流行的jspa),都会有一条HelloWorld问候语显示。从上面提到的webwork前端控制器的知识可以知道,URL请求会被映射到webwork中,所以我们要实现这个需求要做下面3件事情:
(1) 创建一个action类(用来实现业务逻辑,并准备返回)
(2) 创建一个result,这里是用JSP的形式,熟练后你可以灵活运用velocity、FreeMarker等
(3) 配置action与result 第一部创建action类:HelloWorld.java ,还是先看代码吧:
1 package example
2
3 import com.opensymphony.xwork.Action;
4
5 public class HelloWorld implements Action{
6 private String message;
7
8 public String execute(){
9 message = "Hello, World!\n";
10 message += "The time is:\n";
11 message += System.currentTimeMillis();
12 return SUCCESS;
13 }
14
15 public String getMessage(){
16 return message;
17 }
18 }
注意你所编写的action类都必须实现定义了execute()方法的Action接口,而execute()就是在执行这个action的时候被WebWork调用的。
在action中定义了message的getter方法,以便JSP标签取得message的值显示给客户端。
最后execute()方法返回了SUCCESS(其实就是一个值为“success”的字符串常量),并且所有的WebWork的action都必须返回一个result code(一个说明执行结果的字符串)。它告诉WebWork现在的执行结果和下一步应该对应到哪个result,虽然result code不一定必须对应一个result但是通常都是。既然业务已经处理完了,下面就来创建一个JSP页面显示HelloWorld问候语。
1 <%@ taglib prefix="ww" uri="webwork" %>
2 <html>
3 <head>
4 <title>Hello Page</title>
5 </head>
6 <body>
7 The message generated by my first action is:
8 <ww:property value="message"/>
9 </body>
10 </html>
11
用过页面标签的朋友肯定对这种代码很熟悉了,即使你没用过也没关系,下面简单介绍一下。第一行标签库定义将前缀ww和URI webwork(这个webwork就是前面在web.xml中定义的URI)之间建立了映射关系。前缀ww指明了所有WebWork标签在使用的时候以“ww:”开头。property标签包含了一个value属性值,通过设置value值,标签可以从action中获得对应表达式的内容。因为在action中创建一个名为getMessage()的方法,value值为message的property标签就会得到getMessage()方法调用后的值。把上面的代码保存为hello.jsp,放在webApp目录下。
配置你的action与result,已经创建了action类和视图,最后还需要将它们联系起来。你可以通过为action配置一个特别的URL,以及将SUCCESS这个result code映射到你刚才创建的JSP来完成这一步。当你配置一个WebWork action的时候,必须清楚下面3个方面:
(1) action类的全名,包含完整的包名
(2) 你打算将action存放于Web应用程序什么位置,即应用什么URL
(3) action可能返回所有结果码 1 <xwork>
2 <include file="webwork-default.xml">
3
4 <package name="default" extends="webwork-default">
5 <default-interceptor-ref name="completeStack"/>
6
7 <action name="helloWorld" class="example.HelloWorld">
8 <result name="success">hello.jsp</result>
9 </action>
10 </package>
11 </xwork>
到这个时候就已经差不多了,编译程序并发布在你喜欢的web容器中。启动服务器你就可以在浏览器中输入URL看看效果了,如http://localhost/helloWorld.action(如果端口为8080,还需要加上端口),这个时候你就会看到浏览器中显示了HelloWorld的信息。这并不是一个令人兴奋的网页,但是你至少开始使用WebWork了,这难道不令人激动吗?
当然毕竟上这是一个很简单的应用,实际的应用会比这复杂千倍万倍,你将会在后面的笔记中慢慢深入WebWork的殿堂,下一篇将会详细讲述WebWork中三最为重要的概念-action、result、interceptor并告诉你如何最好的使用它们。让我们一起期待吧!
posted on 2007-02-09 12:39
cresposhi 阅读(3261)
评论(17) 编辑 收藏