随笔 - 81  文章 - 1033  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

在浮躁的年代里,我们进取心太切,患得患失;虚荣心太强,战战兢兢。一心争强好胜,惟恐榜上无名。
I think I can fly , and flying like a bird !
程序员一名,已售出,缺货中!

我的邮件联系方式

用且仅用于MSN

博客点击率
free web counter
free web counter

常用链接

留言簿(36)

随笔档案

搜索

  •  

积分与排名

  • 积分 - 186167
  • 排名 - 309

最新评论

阅读排行榜

评论排行榜

    在本篇将会通过一个简单却经典的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)  编辑  收藏

FeedBack:
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld[未登录] 2007-02-09 12:58 小祝
先抢沙发,再看。。。  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 13:10 ⒍‰羽化絆徑
板凳我拿走了
哈哈  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 13:11 卖女孩的小火柴
我也抢个,忽忽~~再别让鱼哥抢前几名了  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 13:14 卖女孩的小火柴
虽然看不懂,还是支持一下~~
嘿咻~嘿咻~
给abc增加人气啊  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 13:29 小祝
一会有时间配的试哈,呵呵。  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 13:31 施伟
这个例子应该是差一个包的,呵呵。自己去研究吧,留点思考的余地给大家!  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 13:32 施伟
多谢大家的支持!HOHO~  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 13:42 睿不可当
不错,照着做一个先,等待三  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 14:40 梅颖
来晚了,罪过罪过  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 16:28 施伟
不晚不晚,呵呵  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 19:46 睿不可当
呵呵 ,跟着你学webwork
helloworld成功了.
期待三啊。。。。。。!!!  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 21:38 小祝
我配的试了下,成功了,结果如下:
The message generated by my first action is:
Hello, World! The time is: 1171027825781

其中遇到了几个问题。
1.差包webwork-2.1.7.jar(我先就放进来了)。
2.我用自动生成web项目的时候web.xml带有头信息
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"">http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
时会报错找不到<taglib>,去掉后面的信息后即可。
3.<include file="webwork-default.xml">这个地方后面差一个结束符应为
<include file="webwork-default.xml"/>  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-09 21:43 小祝
推荐:http://webwork.javascud.org/
有很多中文资料。  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-10 21:59 施伟
看来大家都很用功啊!勤奋的人总会成功!!!  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-02-11 03:09 sinoly
踏着56k的电话猫,我来了。。。
@卖女孩的小火柴
你说的话ms对我意见很大滴说?郁闷ing  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-03-02 11:58 施伟
好久没出第三辑,惭愧啊,忙不过来。。。
一定要加把劲,gogogo  回复  更多评论
  
# re: WebWork In Action学习笔记(二) WebWork方式的HelloWorld 2007-03-02 17:43 颖颖
那就再抽时间,抽抽抽,呵呵,抽光你的血  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: