当前位置: 代码迷 >> Web前端 >> WebWork2 - HelloWorld
  详细解决方案

WebWork2 - HelloWorld

热度:909   发布时间:2012-11-01 11:11:33.0
WebWork2 --- HelloWorld
本周三利用空余的时间把医院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已经包含了错误信息了。
1 楼 bat_xie 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)

  相关解决方案