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.
WebWork学习第二步:动手写一个简单例子
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< SPAN>view>
- <view name="error">helloerror.jsp< SPAN>view>
- <view name="input">helloinput.jsp< SPAN>view>
- < SPAN>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)hellosuccess.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学习第三步: webwork自带例子Bank app的简单介绍
1.环境
http://localhost:8080/webwork 中JSP下面的Bank app
相关class:webapps\webwork\WEB-INF\lib\webwork-examples.jar中的webwork.examples.bank.Transfe
相关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>
WebWork学习第四步:自动提交.
(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结类似.
【编辑推荐】