webwork入门例子
第一个例子: 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入门例子相关推荐
- Cassandra 单机入门例子——有索引
入门例子: http://wiki.apache.org/cassandra/GettingStarted 添加环境变量并source生效,使得可以在任意位置执行cassandra/bin安装目录下的 ...
- spark streaming 入门例子
spark streaming 入门例子: spark shell import org.apache.spark._ import org.apache.spark.streaming._sc.ge ...
- 图解VC++2012编译安装GDAL1.11.0和入门例子
相关下载 http://pan.baidu.com/s/1o7OEMc6 gdal1.rar - 入门例子 GDAL书籍代码及数据.rar gdal1110.zip - 下载的源码 GDAL.rar ...
- Orleans入门例子
Orleans是微软开源的分布式actor模型框架.actor模型的原理网络上有很多文章.有许多理论性的文章,深刻地我都不知道怎么应用.在这里我就不赘述了.既然是博客,就说说自己的理解. 对于编程来说 ...
- Orleans 初接触(一) 入门例子
[返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.Orleans入门例子 这个例子是跟着<Orleans入门例子>(https://www.cnblogs. ...
- [深度学习-实践]CycleGAN的入门例子-Tensorflow2.1-keras
系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之DCGAN基于CIFAR10数据集的例子 深度学习GAN(三)之DCGAN基于手写体Mnist数据集的例子 深度学习GAN(四)之c ...
- [深度学习-实践]GAN入门例子-利用Tensorflow Keras与数据集CIFAR10生成新图片
系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之基于CIFAR10数据集的例子; 深度学习GAN(三)之基于手写体Mnist数据集的例子; 深度学习GAN(四)之PIX2PIX G ...
- Restlet入门例子 - RESTful web framwork for java
RESTful系列文章索引 Restlet入门例子 - RESTful web framwork for java [原创]Jersey入门例子 官方网站介绍: http://www.restlet. ...
- 一个简单的iBatis入门例子
一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. ibatis-2.3.4.726.jar ojdbc14.jar 2.创建类com/ ...
最新文章
- CF294C Shaass and Lights(排列组合)
- Jenkins简介安装使用
- 为什么 Java 不支持运算符重载?
- RDMA技术详解(三):理解RDMA Scatter Gather List
- 评估指标_供应链改进常用评估指标
- 调用自定义函数search(int list[], int n),在数组中查找某个数
- 数据结构实验之查找五:平方之哈希表
- spring配置dataSource:DriverManagerDataSource
- C#开发命令执行驱动程序 之 控制标志的命令行参数
- 2018.09.07阿里巴巴笔试题
- (转载)python re模块详解 正则表达式
- ueditor插入自定义内容和样式
- 大数据技术原理与应用 第三版 林子雨 期末复习(一)大数据概述 第一章 P2
- Android熟悉使用PackageManager,ActivityManager,MemoryInfo,引入布局文件Include的使用,values的管理
- 软件测试周刊(第30期):专注 力量 敏捷 协作
- 使用a标签下载文件而不是直接打开
- 镭速(Raysync)文件传输对比Filezilla测试!
- LVGL笔记(1)-使用《avilib》库播放avi视频(lvgl在windows模拟运行)
- python使用pandas打不开excel文件
- PTA 数组 7-5 按字母顺序排列出场国家名称
热门文章
- Windows server 2008 网络负载均衡配置
- idea连接远程docker教程
- Android 开发 ADT 24.0.2 下载
- Spring系列学习之Spring Web Flow
- 【2023B题】人工智能对大学生学习影响的评价(思路、代码)
- 解决T2A W2A A2W的报错error C2065 lpw 未声明的标识符
- linux系统嵌入式编译环境,64位Ubuntu 16.04搭建嵌入式交叉编译环境arm-linux-gcc过程图解...
- 2BizBox 设置技巧 ----持续更新
- python爬取乘风破浪的姐姐弹幕--芒果TV爬虫
- 深入理解softmax