- 浏览: 227000 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
thebye85:
引用 另外一个需要注意的问题,就是SessionMap和隐藏对 ...
WebWork深度探索之Session -
lanxiaoshuang:
写的真好
说的都是概念——有关编程范式 -
lhz:
grep unique wc你需要的只是这么几个小工具而已
努力做个Pragmatic Programmer
时间过得很快,《WebWork In Action》第三章的翻译工作也接近尾声了。这一章的标题是Setting up WebWork,主要讲述了与WebWork紧密相关的配置以及如何运用这些配置让我们的应用程序组织得更为模块化,让我们在设计上可以更加灵活机动。
在这一章中,我了解到了很多之前并不熟悉的配置,而这些配置所带来的影响,我不得不为之赞叹。以action为例,通常我们会根据逻辑来划分action,譬如Login、Register、Search和Logout等等,这些从逻辑语义上独立的部分都应该分别作为一个action,这一点是大家都认可的。在以上这些action的周边仍然会有一些其他附属功能,譬如在Login之前需要做的准备工作——PreLogin;在Search之后需要作进一步搜索的SearchMore。在面对这样的功能时候,你或许会将它们独立出来,作为一个新的action,同时也有可能想着将这些功能放到主逻辑功能当中去。如果你选择了后者,然后兴冲冲地打开IDE想往里面加方法的时候,或许你会犯愁了:方法加了进去,该在哪里调用呢?因为在应用程序运行的时候,WebWork框架只会调用继承的execute方法,那么自己加进去的方法呢?难道真的要在execute中调用?这不是又跟其他功能扯上关系了嘛?不要着急,且听我慢慢说来。
其实,以上说了那么多,只是想为大家勾勒一个应用场景而已。撇开那些复杂的场景不谈,需要解决的问题实际就是:如何让框架调用execute以外的方法。了解WebWork的您应该都十分清楚:我们通常所写的action都会extend了ActionSupport类并且需要提供一个override的execute方法,然后在收到请求之后,WebWork框架会将请求分派给不同的action,由action的execute方法来处理这个请求。这就是框架所带来的好处:更加有序地组织代码;同时这也是一个限制。框架都会在限制与功能之间寻找一个平衡点,一个好的框架则会将这对矛盾处理得很好:有一定程度的限制,又不失灵活和强大功能,而WebWork就是这样一个框架。正当你为无法调用execute以外的方法而懊恼的时候,你会惊喜地发现WebWork提供了一种灵活的方式,让你只需修改一下配置文件就可以调用action中execute以外的方法,这样就不需要为一些主逻辑的周边功能而创建新的action类了,让你在设计的时候有更多的选择。要实现框架调用action中execute以外的方法,只需要设置好action节点的method属性即可。如以下例子所示:
以上例子中名为PreLogin的action节点配置就会调用Login action中的preLogin方法,而不是常见的execute方法了。这里还有一个十分灵活的地方需要注意的,如果preLogin方法找不到的话,WebWork并不会马上抛出Exception,而是进而查找doPreLogin方法(注意大小写)。这样做的原因是为了避免方法名和Java的关键字冲突,譬如你想使用default这样的方法名,那么你在配置文件仍然可以写上method="default",然后在Java代码中,你就不能用default做方法名了,因为default是Java的关键字。但是这并不意味着就要把配置文件中method的value给改掉,你只要把方法名换上doDefault就行了。从这里可以看出WebWork考虑入微的一面,当然,我不赞成使用这种方式,毕竟这是以损失效率为代价的。
除了以上方式之外,WebWork还提供了另外一种更为简单的方式调用action中非execute方法:使用actionName!method.action样式的URL。而这种方式并不需要在xwork.xml中增加新的action节点,它将会使用actionName已经定义好的配置。还是以上的例子,如果我们使用Login!preLogin.action这样的URL就会调用Login action中的preLogin方法,也将使用名为Login那个action节点中的配置,同时PreLogin这个节点就可以省略了。这样的方式的好处就是使得xwork.xml配置文件更加简短,不过,两个方法共享一个action配置也给这种方式平添了许多限制,毕竟两个方法返回的结果码不一定都是success和input,即使返回的结果码相同,那么结果码所对应的location呢?完全相同的配置需求确实还是比较少见的。不管怎样,多一个选择总比没有选择要好。
以上只是讲述了WebWork在配置灵活多变的一面,但管中窥豹,WebWork的灵活性已经可见一斑。说完管中窥豹这个成语,另外一个成语在我的脑海中浮现——庖丁解牛。呵呵,真的很期待“以无厚入有间,恢恢乎其于游刃必有余”那种境界。
在这一章中,我了解到了很多之前并不熟悉的配置,而这些配置所带来的影响,我不得不为之赞叹。以action为例,通常我们会根据逻辑来划分action,譬如Login、Register、Search和Logout等等,这些从逻辑语义上独立的部分都应该分别作为一个action,这一点是大家都认可的。在以上这些action的周边仍然会有一些其他附属功能,譬如在Login之前需要做的准备工作——PreLogin;在Search之后需要作进一步搜索的SearchMore。在面对这样的功能时候,你或许会将它们独立出来,作为一个新的action,同时也有可能想着将这些功能放到主逻辑功能当中去。如果你选择了后者,然后兴冲冲地打开IDE想往里面加方法的时候,或许你会犯愁了:方法加了进去,该在哪里调用呢?因为在应用程序运行的时候,WebWork框架只会调用继承的execute方法,那么自己加进去的方法呢?难道真的要在execute中调用?这不是又跟其他功能扯上关系了嘛?不要着急,且听我慢慢说来。
其实,以上说了那么多,只是想为大家勾勒一个应用场景而已。撇开那些复杂的场景不谈,需要解决的问题实际就是:如何让框架调用execute以外的方法。了解WebWork的您应该都十分清楚:我们通常所写的action都会extend了ActionSupport类并且需要提供一个override的execute方法,然后在收到请求之后,WebWork框架会将请求分派给不同的action,由action的execute方法来处理这个请求。这就是框架所带来的好处:更加有序地组织代码;同时这也是一个限制。框架都会在限制与功能之间寻找一个平衡点,一个好的框架则会将这对矛盾处理得很好:有一定程度的限制,又不失灵活和强大功能,而WebWork就是这样一个框架。正当你为无法调用execute以外的方法而懊恼的时候,你会惊喜地发现WebWork提供了一种灵活的方式,让你只需修改一下配置文件就可以调用action中execute以外的方法,这样就不需要为一些主逻辑的周边功能而创建新的action类了,让你在设计的时候有更多的选择。要实现框架调用action中execute以外的方法,只需要设置好action节点的method属性即可。如以下例子所示:
<action name="Login" class="com.fantasysoft.Login">
<result name="success">userProfile.jsp</result>
<result name="input">login.jsp</result>
</action>
<action name="PreLogin" class="com.fantasysoft.Login" method="preLogin">
<result name="success">login.jsp</result>
<result name="error">error.jsp</result>
</action>
<result name="success">userProfile.jsp</result>
<result name="input">login.jsp</result>
</action>
<action name="PreLogin" class="com.fantasysoft.Login" method="preLogin">
<result name="success">login.jsp</result>
<result name="error">error.jsp</result>
</action>
以上例子中名为PreLogin的action节点配置就会调用Login action中的preLogin方法,而不是常见的execute方法了。这里还有一个十分灵活的地方需要注意的,如果preLogin方法找不到的话,WebWork并不会马上抛出Exception,而是进而查找doPreLogin方法(注意大小写)。这样做的原因是为了避免方法名和Java的关键字冲突,譬如你想使用default这样的方法名,那么你在配置文件仍然可以写上method="default",然后在Java代码中,你就不能用default做方法名了,因为default是Java的关键字。但是这并不意味着就要把配置文件中method的value给改掉,你只要把方法名换上doDefault就行了。从这里可以看出WebWork考虑入微的一面,当然,我不赞成使用这种方式,毕竟这是以损失效率为代价的。
除了以上方式之外,WebWork还提供了另外一种更为简单的方式调用action中非execute方法:使用actionName!method.action样式的URL。而这种方式并不需要在xwork.xml中增加新的action节点,它将会使用actionName已经定义好的配置。还是以上的例子,如果我们使用Login!preLogin.action这样的URL就会调用Login action中的preLogin方法,也将使用名为Login那个action节点中的配置,同时PreLogin这个节点就可以省略了。这样的方式的好处就是使得xwork.xml配置文件更加简短,不过,两个方法共享一个action配置也给这种方式平添了许多限制,毕竟两个方法返回的结果码不一定都是success和input,即使返回的结果码相同,那么结果码所对应的location呢?完全相同的配置需求确实还是比较少见的。不管怎样,多一个选择总比没有选择要好。
以上只是讲述了WebWork在配置灵活多变的一面,但管中窥豹,WebWork的灵活性已经可见一斑。说完管中窥豹这个成语,另外一个成语在我的脑海中浮现——庖丁解牛。呵呵,真的很期待“以无厚入有间,恢恢乎其于游刃必有余”那种境界。
发表评论
-
在String的面前丢脸
2004-06-18 00:39 1262重返C++的世 ... -
Summary of function parameter
2004-07-14 02:33 1141对C++这位入 ... -
此Vector非彼Vector
2004-08-05 15:51 1046在学习STL的过程中,我发现了一个熟悉的面孔— ... -
模板——泛型和STL的基础
2004-08-07 01:01 1325所谓泛型,从字面上可以猜想,就是泛化的类型(型 ... -
让人头痛的Vector(提问篇)
2004-08-07 16:55 1228在写完了此Vector非彼Vector这篇随笔 ... -
我该怎样shuffle呢
2004-08-10 01:47 1179在STL的Algorithm中有着这样的一种算 ... -
WebWork初体验
2004-08-11 17:43 1290在这篇ASP.NET ... -
WebWork深度探索之盲人摸象
2004-08-12 23:54 1127昨天尝试着利用WebWork做了一个小功能[1 ... -
WebWork深度探索之号外
2004-08-14 09:03 1039昨天开始对WebWork进行了一些初步的探索[ ... -
WebWork深度探索之标签库
2004-08-15 00:28 1530由于WebWork本身提供了一套自定义的标签库 ... -
什么是Law of Demeter
2004-08-15 14:22 1231今天一如昨日,继续对WebWork进行小打小闹 ... -
所谓的Dumb Question
2004-08-15 17:16 1033为了能够更 ... -
WebWork深度探索之标签库(续)
2004-08-16 15:58 1128昨日对WebWork的标签库进行了小小的研究[ ... -
WebWork深入探索之初见端倪
2004-08-19 16:35 893使用WebWork进 ... -
建网站的小Tips
2004-08-20 23:58 1034这几天都在忙着做一个小网站,从网页美工到后台处 ... -
URL与RequestDispatcher
2004-08-21 23:58 1002今天照例继续自己的网站建设之旅,原本以为可以大 ... -
WebWork深度探索之Pitfall
2004-08-25 14:31 957在使用WebWork进行开发的过程中,她的种种 ... -
WebWork深度探索之Session
2004-08-26 15:38 1523昨天上午刚 ... -
搞笑的textarea标签
2004-08-31 18:17 1582很久没有用 ... -
两天四疑问
2004-09-03 10:56 9939月份的前两天,我仍然做着网站开发的工作。在开 ...
相关推荐
- **UI组件**:第十一章关注于如何使用WebWork提供的UI组件来简化前端开发过程,提高用户体验。 #### 五、高级主题 - **类型转换**:第十二章介绍了WebWork中的类型转换机制,帮助开发者处理表单提交的不同数据...
测试时关注点在于Action是否能正确处理请求参数,并返回预期的结果。测试方法包括: - 使用JUnit编写测试用例。 - 模拟请求参数。 - 验证Action返回的结果。 #### 七、ResultType与表达式语言 **ResultType** 定义...
具体而言,我们将重点关注如何配置这些框架以实现良好的集成效果,并特别关注在Oracle数据库环境下的应用。 #### 一、Spring框架介绍与配置 **Spring框架**是Java平台上最受欢迎的企业级应用开发框架之一,它提供...
第四讲.rar"暗示了这是一个关于将WebWork、Spring和Hibernate这三大框架整合应用于网络书城开发的教程资源。在这个第四讲中,我们预计会深入探讨如何在实际项目中将这三个强大的框架协同工作,以构建高效、可维护的...
**WebWork 2**则主要关注于HTTP请求和响应的处理,通过**ServletDispatcher**将HTTP请求转换为具体的Action操作,同时支持多种视图表示形式,如JSP、Velocity、FreeMarker等。 #### 二、WebWork安装与HelloWorld...
3. AOP(面向切面编程):通过WebWork2的AOP支持,实现横切关注点,如事务管理。 4. 插件系统:WebWork2有丰富的插件库,如国际化插件、报表插件等,可以快速扩展功能。 六、学习资源 “webwork2中文参考手册”作为...
【Spring】是Java企业级应用的开源框架,它的核心特性可以用来管理对象的生命周期和配置,同时Spring还提供了一个AOP(面向切面编程)框架,用于处理如日志、事务管理等跨切面关注点。Spring的IoC(Inversion of ...
【标题】"Hibernate+WebWork+Spring+Oracle框架(1)"揭示了这是一个关于整合四大技术的教程或项目实例,主要关注如何在Java Web开发环境中集成这些组件。这个框架组合通常用于构建企业级应用,提供数据持久化、业务...
而面向切面编程则为代码的组织和模块化提供了新的视角,可以更好地处理系统中的横切关注点,如日志、事务管理等。 接下来是Hibernate,它是一个强大的对象关系映射(Object-Relational Mapping,ORM)框架,能够将...
Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。 Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己...
5. 用户体验需求:关注界面设计、交互流程,提供良好的用户体验。 三、编写需求规格说明书 1. 文档结构:包括封面、目录、引言、需求概述、详细需求、验收标准等部分。 2. 需求描述:使用简洁、明确的语言,避免...
Struts2相比于Struts1,进行了许多革新,比如它是在成熟的WebWork框架基础上发展起来的,继承了WebWork的稳定性和性能,并融合了Struts1和WebWork的优势。因此,使用Struts2意味着你采用了最新的JavaWeb开发技术,...
报告提到了四个关键的Web开发框架:JavaServer Faces (JSF)、Struts 2、Shale和WebWork。 首先,JSF作为一种Java标准框架,为Web应用程序提供了组件化的开发方式,简化了用户界面的构建,通过MVC设计模式提高了代码...
#### 四、WebWork和Struts2对比 相比于WebWork,Struts2在以下几个方面有所增强: - **架构优化**:采用了更加灵活的拦截器模型。 - **扩展性更强**:支持更多的插件和自定义组件。 - **社区支持**:拥有更大的...
- **说明**:定义内置拦截器,用于实现横切关注点如验证、事务管理等。 - **org.apache.struts2.util** - **说明**:提供一系列工具类,帮助简化开发过程。 - **org.apache.struts2.validators** - **说明**:...
MVC设计模式将应用分为三个核心组件:模型(Model)、视图(View)和控制器(Controller),这种设计有助于分离关注点,使得应用易于维护和扩展。 模型(Model)负责数据的封装和处理,通常由普通的Java实体类来...
Struts2 是基于 webwork 技术的框架,是 sun 和 webwork 公司联手开发的一个功能非常齐全的框架。Struts2 和 Struts1 没有任何关系,是一个全新的框架。 三、Spring Spring 是一个集成了许多第三方框架的大杂烩,...
- **WebWork** 的设计相对简单,主要关注于业务逻辑的处理; - **Struts2** 则更加强调组件化和模块化的设计思想,提供了更多的内置功能和扩展性。 随着时间的发展,**Struts2** 成为了更加成熟和广泛采用的选择。...
- **面向切面编程(AOP)支持**:使得开发者可以在不修改业务逻辑代码的情况下添加横切关注点(例如日志记录、安全控制等)。 - **JDBC 抽象框架**:简化了对数据库的操作,提供了异常处理和资源管理机制。 - **抽象...