分享
 
 
 

webwork学习笔记

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

webwork学习笔记

------------------------------

作者: kingfish(vc--@sohu.com)

关键字: webwork1.4, tomcat5

--------------------------------------

本人最近学习webwork,发现资料很少(如果您有,请发一份给我,先谢啦),

由于是开源项目,就粗略的看了看源码. 以下是我看后整理的一份笔记,

比较简单, 希望能给用得到的网友带来一点帮助.

水平有限,错误难免,请见谅+指正!

环境说明:

使用Tomcat5.0+webwork1.4

将下载的webwork中的webwork.war在tomcat的webapps下解开为webwork目录.

一. 一个servlet :webwork.dispatcher.ServletDispatcher

1.简介

webwork1.4所有自带例子中的action都提交到此servlet进行处理,重要性当然不言而喻.

打开webwork\WEB-INF下web.xml,可以看到以下配置

...

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>webwork.dispatcher.ServletDispatcher</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

...

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.action</url-pattern>

</servlet-mapping>

...

2 功能:

1. 处理action请求

2. 查找相应action类,产生实例.

3. 执行doValidation()校验输入参数;

4. 如果3校验结果为合法, 执行doExecute();

5. 根据执行结果字符串("success","input","error")查找views配置转到相应view.

二. 动手写一个简单例子

1. HelloAction.java 源代码

import webwork.action.ActionSupport;

import webwork.action.Action;

public class HelloAction

extends ActionSupport {

private String name ;

public HelloAction() {

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return this.name;

}

public void doValidation() {

else if(name==null||name.length()<1){

addError("Name","can't be null or empty!");

}

}

//如果不做其它处理,也可以不override此方法.缺省返回success

public String doExecute() {

return SUCCESS;

}

}

编译完的class文件拷入webwork\WEB-INF\classes下.

2.配置

有两种配置方法可选:

(1) 配置views.properties(在webwork\WEB-INF\classes下)

hello.action=HelloAction

hello.input=helloinput.jsp

hello.success=hellosuccess.jsp

hello.error=helloerror.jsp

(2) 配置actions.xml(在webwork\WEB-INF\classes下)

在原有基础上增加下面一个action

<action name="HelloAction" alias="hello">

<view name="success">hellosuccess.jsp</view>

<view name="error">helloerror.jsp</view>

<view name="input">helloinput.jsp</view>

</action>

3.相关jsp文件

建立以下四个jsp文件,存放目录为:webwork下.

(1)index.jsp

<html>

<head>

<title>test webwork</title>

</head>

<body>

<A href="helloinput.jsp">example</a>

</body>

</html>

(2)helloinput.jsp

<html>

<head>

<title>test webwork</title>

</head>

<body>

<form action="hello.action" method="post">

<input type="text" name="name" value=""/>

<input type="submit" value="Submit"/>

</form>

</body>

</html>

(3)hellosuccess.jsp

<HTML>

<HEAD>

<TITLE>Test</TITLE>

</HEAD>

<BODY>

Hello world!

</BODY>

</HTML>

(4)helloerror.jsp

同上,将字符串改掉即可.

本例子中只是配置中用到,运行过程未用此页面.

4.运行

(1)启动Tomcat

(2)IE中输入:http://localhost:8080/webwork/index.jsp

(3)不输入任何字符,提交,页面仍然在helloinput.jsp

输入字符后提交,页面转至hellosuccess.jsp

5.流程说明

(1) 启动Tomcat后, 初始化servlet(ServletDispatcher)

(2) 在输入页面(helloinput.jsp), 输入字符提交(提交到hello.action)

(3) 根据web.xml中配置,此请求由ServletDispather处理.

(4) servlet根据actionName("hello")查找配置(配置内容:hello.action=HelloAction)

(5) 产生HelloAction实例

(6) servlet调用HelloAction的doValidation()校验输入参数.

(7) 校验通过, servlet调用HelloAction的doExecute(),返回成功("success").

(8) 根据views配置查找到:hello.success=hellosuccess.jsp (actionaliasName.viewName=pagename)

(9) servlet中forward到hellosuccess.jsp

(10)输出hello world!, 完成.

如果不输入直接提交,以下几步略有不同

(7) 校验未通过,产生错误信息. 其它方法中检测到有错误信息,默认返回"input"

(8) 根据views配置查找到:hello.input=helloinput.jsp

(9) servlet中forward到helloinput.jsp

(10)完成.

6.补充

HelloAction的调用步骤其实是:

ServletDispatcher->GenericDispatcher->调用executeaction()->ActionSupport的execute()->调用HelloAction的相应方法.

5中的说明只是为了简单而这样描述的.

如果你对这些有兴趣,可以看看ServletDispatcher,GenericDispatcher,ActionSupport,Action等源码.

三. webwork自带例子Bank app的简单介绍

1.环境

http://localhost:8080/webwork 中JSP下面的Bank app

相关class:webapps\webwork\WEB-INF\lib\webwork-examples.jar中的webwork.examples.bank.Transfer

相关jsp: webapps\webwork\examples\bank\index.jsp,transfer.jsp,confirm.jsp

相关配置: webapps\webwork\-WEB-INF\classes\views.properties

# Bank example (Struts example adaptation)

bank.transfer.action=bank.Transfer (即webwork.examples.bank.Transfer)

bank.transfer.input=transfer.jsp

bank.transfer.success=confirm.jsp

bank.transfer.error=transfer.jsp

由于webwork.properties配有

webwork.action.packages=webwork.examples, webwork.examples.vxml

因此上面配置bank.transfer.action=bank.Transfer省略了webwork.examples.

2.index.jsp

<jsp:forward page="bank.transfer!default.action"/>

相当与

<form action="bank.transfer!default.action" method="post">

<input type="submit" />

</form>

自动提交.

(1)提交到servlet, servlet处理bank.transfer!default.action(构成:actionAliasName+!commandName+.action)

由于action中有command(command为:default), 通过reflect查找doCommand即(doDefault),

执行doDefault()返回"input"

(2)input对应的view为transfer.jsp,转到此页面.

(3)输入参数后提交,执行bank.transfer.action, 其它流程与上面第二部分第5结类似.

===================================================================================

kingfish 2004.3

如转帖请保持文档完整.

欢迎交流!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有