论坛首页 入门技术论坛

WebWork2 --- HelloWorld

浏览 2143 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-12-01  
本周三利用空余的时间把医院HIV月报构建在了Struts2框架上,真的很简单,代码量比 Struts1.x 少了一半。

WebWork 创始人 Reckard Oberg 在构建 WebWork 原始版本的时候说:“框架的强大之处不在于它能让你做什么,而是你没必要做什么。”

Struts2 抛弃了原先 Struts 的原始框架,构建在 xwork 之上。Struts2继承了WebWork2 清爽的架构及代码编写风格。

下面就开始 WebWork2 之旅吧,感受一下代码编写是多么的简单和清晰。

从http://www.opensymphony.com/webwork下载最新的完整的开源包并解压。
新建 Web Project。
把 xwork.jar common-logging.jar oscore.jar velocity-dep.jar ognl.jar webwork-2.2.4.jar 复制到WEB-INF/lib目录下,修改web.xml文件内容如下:
xml 代码
 
  1. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  2. "http://java.sun.com/dtd/web-app_2_3.dtd">  
  3. <web-app>  
  4.     <filter>  
  5.         <filter-name>webwork</filter-name>  
  6.         <filter-class>  
  7.             com.opensymphony.webwork.dispatcher.FilterDispatcher  
  8.         </filter-class>  
  9.     </filter>  
  10.     <filter-mapping>  
  11.         <filter-name>webwork</filter-name>  
  12.         <url-pattern>/*</url-pattern>  
  13.     </filter-mapping>  
  14.     <taglib>  
  15.         <taglib-uri>webwork</taglib-uri>  
  16.         <taglib-location>  
  17.             /WEB-INF/lib/webwork-2.2.4.jar  
  18.         </taglib-location>  
  19.     </taglib>  
  20. </web-app>  


新建action: HelloWorld.java
实现 Action 接口,并且必须实现 execute() 方法
java 代码
 
  1. package org.vv.action;  
  2. import com.opensymphony.xwork.Action;  
  3. public class HelloWorld implements Action {  
  4.     private String message;  
  5.     private String name;  
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.     public void setName(String name) {  
  10.         this.name = name;  
  11.     }  
  12.     public String execute() throws Exception {  
  13.         if (name == null || "".equals(name) || "World".equals(name)) {  
  14.             message = "Blank names or names of 'World' are not allowed!";  
  15.             return INPUT;  
  16.         }  
  17.         message = "Hello, " + name + "!\n";  
  18.         message += "The time is:\n";  
  19.         message += System.currentTimeMillis();  
  20.         return SUCCESS;  
  21.     }  
  22.     public String getMessage() {  
  23.         return message;  
  24.     }  
  25. }  


在classes目录下新建xwork.xml文件,最终内容如下:
xml 代码
 
  1. <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"
  2. "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">  
  3. <xwork>  
  4.     <include file="webwork-default.xml" />  
  5.     <package name="default" extends="webwork-default">  
  6.         <default-interceptor-ref name="completeStack" />  
  7.         <action name="helloWorld" class="org.vv.action.HelloWorld">  
  8.             <result name="success">hello.jsp</result>  
  9.             <result name="input">name.jsp</result>  
  10.         </action>  
  11.     </package>  
  12. </xwork>  


新建 name.jsp 页面文件,内容如下:
jsp 代码
 
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%@ taglib prefix="ww" uri="webwork"%>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <head>  
  6.         <title></title>  
  7.     </head>  
  8.     <body>  
  9.         <ww:if test="message!=null">  
  10.             <font color="red"> <ww:property value="message" /> </font>  
  11.         </ww:if>  
  12.         Please enter your name:  
  13.         <form action="helloWorld.action">  
  14.             <input type="textfield" name="name"  
  15.                 value="<ww:property value="name"/>" />  
  16.             <input type="submit">  
  17.         </form>  
  18.     </body>  
  19. </html>  


新建 hello.jsp 页面文件,内容如下:
jsp 代码
 
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%@ taglib prefix="ww" uri="webwork"%>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <head>  
  6.         <title></title>  
  7.     </head>  
  8.     <body>  
  9.         The message generated by my first action is:  
  10.         <ww:property value="message" />  
  11.     </body>  
  12. </html>  

注意:<ww:property value="message" /> 中的 message 得到的是 HelloWorld 中getMessage()方法的返回值,而非 message 属性。

ok,5个短小的文件,构成了一个轻量级的应用。在实际应用中,一般是继承ActionSupport 类,通过addFieldError("name",String)来达到验证效果。
上面的代码只需修改两个地方。
HelloWorld.java类:
java 代码
 
  1. public class HelloWorld extends ActionSupport {  
  2.     ……  
  3.     public String execute(){  
  4.        if(……)  
  5.           addFieldError("name","Blank names or names of 'World' are not allowed!")  
  6.        ……  
  7.     }  
  8.     ……  
  9. }  

name.jsp更改:
jsp 代码
 
  1. <ww:if test="message!=null">  
  2.     <font color="red">  
  3.         <ww:property value="fieldErrors['name']" />  
  4.     </font>  
  5. </ww:if>  

----------------------------------------
和 Struts2 一样WebWork2 的 UI 标签库极大地简化了JSP页面,name.jsp最终更改为:
jsp 代码
 
  1. <ww:form action="helloWorld">  
  2.     <ww:textfield label="Please enter your name:" name="name" />  
  3.     <input type="submit" />  
  4. </ww:form>  

ww:textfield已经包含了错误信息了。
  • webwork2.rar (4 MB)
  • 描述: WebWork2 --- HelloWorld 参考《WebWork in Action》
  • 下载次数: 87
   发表时间:2007-12-18  
为什么我运行你的程序直接运行helloWorld.action
抛出如下的错误
007-12-18 14:56:06 com.opensymphony.webwork.dispatcher.DispatcherUtils serviceAction
严重: Could not execute action
java.lang.NullPointerException
at com.opensymphony.xwork.DefaultActionProxy.<init>(DefaultActionProxy.java:57)
at com.opensymphony.xwork.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:46)
at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:216)

0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics