- 浏览: 228660 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
thebye85:
引用 另外一个需要注意的问题,就是SessionMap和隐藏对 ...
WebWork深度探索之Session -
lanxiaoshuang:
写的真好
说的都是概念——有关编程范式 -
lhz:
grep unique wc你需要的只是这么几个小工具而已
努力做个Pragmatic Programmer
在这篇ASP.NET 中Session 实现原理浅析[2] 状态管理器Blog中,Flier老大向大家推荐了Java中几种Cache的实现,于是我就按图索骥,首先是找到OSCache的老家:OpenSymphony。哇,这里的资源真多啊,简直就是一个宝藏。为什么原来就没有发现呢?感谢Flier老大了!
在OpenSymphony的主页上,我看到了两个让我觉得很亲切的项目:WebWork和Quarts。WebWork作为一个实现了IOC的轻量级Web Application Framework一直备受开发者的青睐;而Quarts更是在异步信息处理上大展拳脚了。看到了老朋友,我就只好暂时将新欢OSCache摆一边,找出我很久没有联系的老猫(Tomcat)去跟WebWork聊嗑了。
做好了一切的准备工作之后[1],我尝试着做一个登陆注册的功能,以体验一下WebWork。跟其他的Web应用一样,我们首先要建立一个标准的WEB-INF目录(所谓标准就是目录下面包含lib和classes子目录以及Web.xml文件),接着在WEB-INF/lib下面放上WebWork所需要的.jar文件并在WEB-INF目录下建立Web.xml文件[2]。在完成了这些千篇一律的工作之后,我仔细的看了一下Web.xml中内容,它里面只定义了一个servlet:webwork,其对应的class为com.opensymphony.webwork.dispatcher.ServletDispatcher,然后由webwork这个servlet去处理所有.action的请求。看到这里,我暗自窃喜,这跟我熟悉的WAF框架是十分类似的,只不过MainServlet变成了ServletDispatcher,.do的请求变成了.action而已。
接下来,就是到classes目录下建立xwork.xml文件,这个文件跟WAF中的mappings.xml很相似,因为对.action的处理都是在这里被定义的,而WAF中关于.do的处理则定义在mapping.xml中。但是也有一些我并不清楚的东西,如package和Interceptor。在classes目录下还要建立一个validator.xml文件,但是这个并不是必需的。做好了这些准备工作之后,就真正开始WebWork的体验之旅了。
1、建立一个index.jsp(以下为主要部分):
<table cellspacing=0 width="100%">
<tr>
<td>Login ID:
<input type="text" name="loginId" width=100 />
Password:
<input type="password" name="loginPassword" width=100 />
<input type="submit" value="Login" />
</td>
<td align=right>
Hello, <ww:property value="loginId" />
</td>
</tr>
</table>
</form> <!----><ww:property value< span="">
需要注意的地方就是form的action属性的写法了;
2、在xwork.xml中增加相应的处理action的节点
<result name="error" type="dispatcher">index.jsp</result>
<result name="success" type="dispatcher">index.jsp</result>
</action>
这里需要注意的是action节点中name的值要与index.jsp中定义的action的名字要严格匹配,对于大小写是敏感的。在action节点中还包含了<result>节点,以说明处理action之后会可能出现的不同结果(name)和相应的处理方式(type)。譬如说,如果Login的这个action处理success了,则使用dispatcher将结果分(dispatch)到相应的页面。而在WAF框架中并没有这样的定义,因为在默认情况下如果不成功则会返回当前页面,不过可以定义FlowHandler,并拥有类似的功能且更加灵活;
3、实现类Login的代码:
import com.opensymphony.xwork.ActionSupport;
public class Login extends ActionSupport{
private String loginId;
private String loginPassword;
public String getLoginPassword() {
return loginPassword;
}
public void setLoginPassword(String loginPassword) {
this.loginPassword = loginPassword;
}
public String getLoginId() {
return loginId;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public String execute() throws Exception{
if (!checkUserId()) return ERROR; // checkUserId is the method that will be implemented
else return SUCCESS;
}
}
在代码中,你会发现有两个继承变量ERROR与SUCCESS。这两个变量是定义在Action这个接口的,而ActionSupport则实现了Action接口。在接口Action的代码中,我们可以看到ERROR = "error"、SUCCESS = "success"。我们可以发现这两个变量的值与xwork.xml中result子节点中的name的值是相匹配。除此之外,在代码中,我也找不到了原来在开发中经常要用到的一个API:getParameter。事实上,将表单中数据析取出来的工作是由webwork这个唯一定义的servlet去完成的,而这个类会调用Login类中set的方法将用户输入的数据赋给Login类的属性:loginId和loginPassword。在这里,我们也要跟前面index.jsp中的包含的标签联系起来。当数据被dispatch回index.jsp的时候,在index.jsp页面render的过程中是调用了get的方法去获取相应的数据的。
最后,我们可以总结一下,整个Web应用程序的处理流程了:
首先,当用户提交了表单(form)至Login.action后,由web.xml中定义的唯一的一个servlet:webwork去处理这个请求。webwork会以action的name:Login到xwork.xml中寻找相应的处理action的类,于是就找到了fantasysoft.webwork包中的Login类,由Login类中的execute方法来处理提交的form的数据了;
然后,根据execute方法的返回值,再到xwork.xml中对应的action节点中去找匹配的result子节点;
最后,根据result子节点的定义,将处理结果分发(dispatch)或者重定向(redirect)至下一个页面[3]。
<!----> [1] 准备工作可以参考 WebWork Getting Started;
[2] web.xml文件的具体内容,可以参考 WebWork Tutorial Lesson 2 ;
[3] 对于result的Type的更多介绍,可以参考 WebWork Tutorial Lesson 3
发表评论
-
在String的面前丢脸
2004-06-18 00:39 1269重返C++的世 ... -
Summary of function parameter
2004-07-14 02:33 1144对C++这位入 ... -
此Vector非彼Vector
2004-08-05 15:51 1052在学习STL的过程中,我发现了一个熟悉的面孔— ... -
模板——泛型和STL的基础
2004-08-07 01:01 1337所谓泛型,从字面上可以猜想,就是泛化的类型(型 ... -
让人头痛的Vector(提问篇)
2004-08-07 16:55 1234在写完了此Vector非彼Vector这篇随笔 ... -
我该怎样shuffle呢
2004-08-10 01:47 1205在STL的Algorithm中有着这样的一种算 ... -
WebWork深度探索之盲人摸象
2004-08-12 23:54 1148昨天尝试着利用WebWork做了一个小功能[1 ... -
WebWork深度探索之号外
2004-08-14 09:03 1054昨天开始对WebWork进行了一些初步的探索[ ... -
WebWork深度探索之标签库
2004-08-15 00:28 1535由于WebWork本身提供了一套自定义的标签库 ... -
什么是Law of Demeter
2004-08-15 14:22 1241今天一如昨日,继续对WebWork进行小打小闹 ... -
所谓的Dumb Question
2004-08-15 17:16 1040为了能够更 ... -
WebWork深度探索之标签库(续)
2004-08-16 15:58 1133昨日对WebWork的标签库进行了小小的研究[ ... -
WebWork深入探索之初见端倪
2004-08-19 16:35 922使用WebWork进 ... -
建网站的小Tips
2004-08-20 23:58 1040这几天都在忙着做一个小网站,从网页美工到后台处 ... -
URL与RequestDispatcher
2004-08-21 23:58 1007今天照例继续自己的网站建设之旅,原本以为可以大 ... -
WebWork深度探索之Pitfall
2004-08-25 14:31 978在使用WebWork进行开发的过程中,她的种种 ... -
WebWork深度探索之Session
2004-08-26 15:38 1528昨天上午刚 ... -
搞笑的textarea标签
2004-08-31 18:17 1586很久没有用 ... -
两天四疑问
2004-09-03 10:56 10029月份的前两天,我仍然做着网站开发的工作。在开 ... -
MFC全接触(二)
2004-09-05 23:56 1314上一次和MFC邂逅,我和她谈得很投机。[1]分 ...
相关推荐
webwork初体验,入门,很简单的例子,
WebWork是一个轻量级、基于MVC(Model-View-Controller)设计模式的框架,它在2000年代初非常流行,尤其在Java社区中。本书旨在帮助开发者理解和掌握WebWork框架的核心概念和技术,以便更高效地构建动态的、交互式的...
在Wicket问世之初,市场上已经存在多种成熟的Java Web框架,如Struts、WebWork等。对于Wicket是否属于“重新发明轮子”的讨论一直存在。然而,Wicket通过其独特的组件化设计和易于使用的特性,在众多框架中脱颖而出...