时间过得很快,《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属性即可。如以下例子所示:

<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>

以上例子中名为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的灵活性已经可见一斑。说完管中窥豹这个成语,另外一个成语在我的脑海中浮现——庖丁解牛。呵呵,真的很期待“以无厚入有间,恢恢乎其于游刃必有余”那种境界。

关注WebWork(四)相关推荐

  1. 一线技术人应该关注的四种思维能力

    引言 作为长期奋战在一线的技术人,我深刻体会到如下几个思维能力对技术人成长的重要性,熟练运用这几种思维可以帮助我们快速的进入到新的领域,在分析.定位和解决问题上有很大帮助. 抽象思维:帮助我们快速抽取 ...

  2. 跨境电商亚马逊卖家最需要关注的四个维度的数据

    对大多数跨境电商卖家而言,在经济平台政策趋严.销售额没达到预期,甚至是出现账号被关等情况后,跨境电商卖家需要关注四个维度的数据,及时调整其运营动作将影响成败.第一个产品表现. 首先,无论是做什么产品, ...

  3. 在需求评审,测试需要关注的四类问题

    参加需求评审时,我们一般通过业务场景.系统交互.功能点.项目,以上四个维度来进行问题的提出. 第一.业务场景中的用户故事方法论 通过业务场景中的用户故事方法论,即站在用户的角度去考虑用户会遇到的各种情 ...

  4. 关注zigbee(四)--无线收发

    对于使用者来说,最基本的就是先搞清楚无线收发. 无线收发有两种方式: 1.调用最基本的底层收发函数,即读写寄存器收发,不经过协议栈.这种收发方式最直接,但是没有安全和可靠性保障,不利于组网. 2.利用 ...

  5. 奔四的技术人,内心都有哪些波澜?

    曾几何时,作为二十多岁的技术人,我也常常关注关于三十多岁技术人的话题,而恍惚间,我不再关注这个话题了,而是关注关于四十多岁技术人的话题,这是因为自己,正在奔四的路上了嘛.知乎上蛮多关于四十岁后失业的话 ...

  6. 云原生 - Istio可观察性之监控(四)

    作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...

  7. 前端开发有哪些技术栈要掌握_为什么要掌握前端开发的这四个主要概念

    前端开发有哪些技术栈要掌握 After working as a front-end developer for three years, I have been able to summarize ...

  8. arcgisengine计算线要素总长度_掌握K线并不难!新手请牢记K线四要素:开盘价、收盘价、最低价、最高价,看不懂别炒股...

    (本文由公众号越声攻略(yslc688)整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负.) 所有关于炒股的技术和理论都是以价.量.时.空四大要素为主线的,而其中的"价&q ...

  9. 【CS论坛】维护网络安全的四块基石

    本文讲的是 [CS论坛]维护网络安全的四块基石,最近被入侵的大企业有个长长的名单:塔吉特.家得宝.史泰博(Staples).迈克尔斯(Michaels,美国工艺品零售商).凯马特(Kmart,美国超市 ...

最新文章

  1. 中国AI专利申请量超美国,百度居国内首位
  2. 泛域名PHP,泛域名实现无限二级域名功能
  3. 【Codeforces Round #299 (Div. 2) B】Tavas and SaDDas
  4. 在一个.net sln中包含多个project,project引用同一个dll导致的错误
  5. windows server2008无法将本地文件复制到远程计算机,windows2008/2012无法从本地复制文件到远程服务器处理方法...
  6. python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程
  7. 确保线程安全下使用Queue的Enqueue和Dequeue
  8. Eclipse下导入外部jar包的3种方式
  9. java 日期类代码_java 日期时间处理类
  10. 系统架构设计师 - 第三方认证服务
  11. MySql Workbench如何设置主键自增长
  12. ArcGIS API for Silverlight开发入门准备
  13. python求解LeetCode问题之trapping rain water
  14. 最小堆实现优先队列:Python实现
  15. 如何将优酷独享视频kux格式转换成mp4视频
  16. excel vb连接mysql数据库教程视频教程_VB6.0与Access数据库关联、VB6.0与Excel数据导入导出案例...
  17. KGB知识图谱,利用科技解决传统知识图谱问题
  18. python头像转卡通_用python将你的头像“卡通化”
  19. 关于uc/os-ii在c51上的移植总结
  20. phpexcel中文手册(转)

热门文章

  1. python输出日志文件_python将print输出的信息保留到日志文件中
  2. JavaScript开发优化技巧
  3. 2021-03-20 GPS抽稀之道格拉斯-普克(Douglas-Peuker)算法
  4. opengl中gpu与cpu交互_OpenGL 环境配置与教程推荐
  5. linux单cpu进程能并行吗,linux,cpu_如何知道运行多少个进程最有效率?,linux,cpu,并行,parallel-execution - phpStudy...
  6. matlab读取格式重复,matlab - 为什么Xlsread以字符串形式读取(日期时间) - 堆栈内存溢出...
  7. Windows 用来定位 DLL 的搜索路径
  8. 【自动驾驶】5. ROS和DDS的区别总结
  9. SCRUM敏捷开发官方权威指南
  10. jvm理论-字节码指令