现在的位置: 首页 > 综合 > 正文

WebWork方式的HelloWorld

2014年11月11日 ⁄ 综合 ⁄ 共 4604字 ⁄ 字号 评论关闭

一、搭建骨架

    在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了,这难道不令人激动吗?

抱歉!评论已关闭.