第一个例子: Welcome

入门,我们从简单的Welcome开始吧!需求如下:一个页面,有一个用户名输入框;输入自己的名字,例如Moxie,提交按钮返回一个欢迎的页面,并显示前面输入的用户名和一句欢迎信息,例如:Moxie, Welcome!页面操作流程图如下:

WelcomeAcion.java

welcomeResult.jsp

welcome.jsp

开发步骤如下:

1、  输入页面。Welcome.jsp是一个非常简单输入页面,代码如下:

< form name = "register" action = "welcome.action" method = "POST" >

Name: < input name = "username" > Please input your name.

</ form >

2、  WebWork的Action类。它实现了Action接口,获得welcome.jsp页面传入的数据即输入的用户名,根据这个用户名生成了一条欢迎信息,并在结果页面中打印出来。WelcomeAction.java代码如下:

public class WelcomeAction implements Action{

private String username;

private String welcomeMessage;

public String execute() throws Exception {

welcomeMessage = username +",Welcome!";

return SUCCESS;

}

public void setUsername(String username) {

this.username = username;

}

public String getWelcomeMessage() {

return welcomeMessage;

}

}

看了上面的代码,也许你都不敢相信这就是 Web 编程。没有调用任何一个 JavaServlet 的 API ,它是如何获得请求的数据并将执行结果暴露给输入页面的呢?它是通过值堆栈和表达式语言来实现(后面会有详细介绍)。我们先看看 Action 是如何获得请求的数据。输入框的名字“ username ”,即请求的参数的名字,它就是一个表达式语言。 WebWork 遇到这个表达式语言,就会执行相应的 setUsername 方法,而 username 参数的值就是执行这个方法的参数。这些是在 Action 执行 execute 方法之前完成,这样 Action 就可以获得请求的数据对象。类似的原理, WebWork 也是通过表达式语言将 getWelcomeMessage 方法暴露给结果页面。

3、  结果页面。welcomeResult.jsp页面,将通过表达式语言,取得Action执行之后暴露出来的数据对象。代码如下:

<%@ taglib prefix = "ww" uri = "/webwork" %>

< ww:property value = "%{welcomeMessage}" />

我们在结果页面中使用了 WebWork 标签库。我们用到的是 property 标签,它通过表达式语言,打印 Action 暴露出的数据对象。

4、  定义配置文件xwork.xml。代码如下:

< xwork >

< include file = "webwork-default.xml" />

< package name = "default" extends = "webwork-default" >

< action name = "welcome" class = "com.noname.web.action.WelcomeAction" >

< result name = "success" type = "dispatcher" > /welcomeResult.jsp </ result >

< interceptor-ref name = "params" />

</ action >

</package>

</xwork>

“ name ”参数用于请求的 URL 。例如: http://localhost/welcome.action ,这样通过请求的 url ,我们就可以在配置文件中找到对应的 action 。“ class ”即实现 Action 的类。一个 Action 中可以定义多个 Result 。 Result 的“ name ”对应 Action 方法返回的字符串。在我们的 WelcomeAction 方法中,执行成功之后返回字符串“ success ”。即我们在这个 Action 里定义的那个 result 。“ interceptor-ref ”定义这个 action 所使用到的拦截器。我们这里使用了 WebWork 提供的 params 拦截器,它能自动的帮我们将请求的参数组装成 Action 中需要的数据对象。通过这个拦截器,它会调用 Action 的 setUsername 方法,取得 username 参数的值,这样 Action 就可以获得用户输入的 username 数据。也许你会奇怪, params 这个拦截器是从哪里变出来的?这个 xwork.xml 文件包含了 WebWork 提供的默认配置文件 webwork-default.xml,可以在webwork-2.2.2.jar文件中找到。我们定义的这个package继承了它里面的package“webwork-default”,这样就可以共享“webwork-default”package里面定义的所有拦截器。

转载于:https://www.cnblogs.com/j3eee/archive/2009/09/08/1562594.html

webwork入门例子相关推荐

  1. Cassandra 单机入门例子——有索引

    入门例子: http://wiki.apache.org/cassandra/GettingStarted 添加环境变量并source生效,使得可以在任意位置执行cassandra/bin安装目录下的 ...

  2. spark streaming 入门例子

    spark streaming 入门例子: spark shell import org.apache.spark._ import org.apache.spark.streaming._sc.ge ...

  3. 图解VC++2012编译安装GDAL1.11.0和入门例子

    相关下载 http://pan.baidu.com/s/1o7OEMc6 gdal1.rar - 入门例子 GDAL书籍代码及数据.rar gdal1110.zip - 下载的源码 GDAL.rar ...

  4. Orleans入门例子

    Orleans是微软开源的分布式actor模型框架.actor模型的原理网络上有很多文章.有许多理论性的文章,深刻地我都不知道怎么应用.在这里我就不赘述了.既然是博客,就说说自己的理解. 对于编程来说 ...

  5. Orleans 初接触(一) 入门例子

    [返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.Orleans入门例子 这个例子是跟着<Orleans入门例子>(https://www.cnblogs. ...

  6. [深度学习-实践]CycleGAN的入门例子-Tensorflow2.1-keras

    系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之DCGAN基于CIFAR10数据集的例子 深度学习GAN(三)之DCGAN基于手写体Mnist数据集的例子 深度学习GAN(四)之c ...

  7. [深度学习-实践]GAN入门例子-利用Tensorflow Keras与数据集CIFAR10生成新图片

    系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之基于CIFAR10数据集的例子; 深度学习GAN(三)之基于手写体Mnist数据集的例子; 深度学习GAN(四)之PIX2PIX G ...

  8. Restlet入门例子 - RESTful web framwork for java

    RESTful系列文章索引 Restlet入门例子 - RESTful web framwork for java [原创]Jersey入门例子 官方网站介绍: http://www.restlet. ...

  9. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. ibatis-2.3.4.726.jar ojdbc14.jar 2.创建类com/ ...

最新文章

  1. CF294C Shaass and Lights(排列组合)
  2. Jenkins简介安装使用
  3. 为什么 Java 不支持运算符重载?
  4. RDMA技术详解(三):理解RDMA Scatter Gather List
  5. 评估指标_供应链改进常用评估指标
  6. 调用自定义函数search(int list[], int n),在数组中查找某个数
  7. 数据结构实验之查找五:平方之哈希表
  8. spring配置dataSource:DriverManagerDataSource
  9. C#开发命令执行驱动程序 之 控制标志的命令行参数
  10. 2018.09.07阿里巴巴笔试题
  11. (转载)python re模块详解 正则表达式
  12. ueditor插入自定义内容和样式
  13. 大数据技术原理与应用 第三版 林子雨 期末复习(一)大数据概述 第一章 P2
  14. Android熟悉使用PackageManager,ActivityManager,MemoryInfo,引入布局文件Include的使用,values的管理
  15. 软件测试周刊(第30期):专注 力量 敏捷 协作
  16. 使用a标签下载文件而不是直接打开
  17. 镭速(Raysync)文件传输对比Filezilla测试!
  18. LVGL笔记(1)-使用《avilib》库播放avi视频(lvgl在windows模拟运行)
  19. python使用pandas打不开excel文件
  20. PTA 数组 7-5 按字母顺序排列出场国家名称

热门文章

  1. Windows server 2008 网络负载均衡配置
  2. idea连接远程docker教程
  3. Android 开发 ADT 24.0.2 下载
  4. Spring系列学习之Spring Web Flow
  5. 【2023B题】人工智能对大学生学习影响的评价(思路、代码)
  6. 解决T2A W2A A2W的报错error C2065 lpw 未声明的标识符
  7. linux系统嵌入式编译环境,64位Ubuntu 16.04搭建嵌入式交叉编译环境arm-linux-gcc过程图解...
  8. 2BizBox 设置技巧 ----持续更新
  9. python爬取乘风破浪的姐姐弹幕--芒果TV爬虫
  10. 深入理解softmax