关注WebWork(四)

时间过得很快,《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属性即可。如以下例子所示:
None.gif <action name="Login" class="com.fantasysoft.Login">
None.gif <result name="success">userProfile.jspresult>
None.gif <result name="input">login.jspresult>
None.gif action>
None.gif <action name="PreLogin" class="com.fantasysoft.Login" method="preLogin">
None.gif <result name="success">login.jspresult>
None.gif <result name="error">error.jspresult>
None.gif action>
None.gif

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16629/viewspace-78733/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16629/viewspace-78733/

飞思卡尔智能车竞赛是一项备受关注的科技赛事,旨在激发学生的创新和实践能力,尤其是在嵌入式系统、自动控制和机器人技术等关键领域。其中的“电磁组”要求参赛队伍设计并搭建一辆能够自主导航的智能车,通过电磁感应线圈感知赛道路径。本压缩包文件提供了一套完整的电磁组智能车程序,这是一套经过实战验证的代码,曾在校级比赛中获得第二名的优异成绩。 该程序的核心内容可能涉及以下关键知识点: 传感器处理:文件名“4sensor”表明车辆配备了个传感器,用于获取环境信息。这些传感器很可能是电磁感应传感器,用于探测赛道上的导电线圈。通过分析传感器信号的变化,车辆能够判断自身的行驶方向和位置。 数据采集与滤波:在实际运行中,传感器读数可能受到噪声干扰,因此需要进行数据滤波以提高精度。常见的滤波算法包括低通滤波、高斯滤波和滑动平均滤波等,以确保车辆对赛道的判断准确无误。 路径规划:车辆需要根据传感器输入实时规划行驶路径。这可能涉及PID(比例-积分-微分)控制、模糊逻辑控制或其他现代控制理论方法,从而确保车辆能够稳定且快速地沿赛道行驶。 电机控制:智能车的驱动通常依赖于直流电机或无刷电机,电机控制是关键环节。程序中可能包含电机速度和方向的调节算法,如PWM(脉宽调制)控制,以实现精准的运动控制。 嵌入式系统编程:飞思卡尔智能车的控制器可能基于飞思卡尔微处理器(例如MC9S12系列)。编程语言通常为C或C++,需要掌握微控制器的中断系统、定时器和串行通信等功能。 软件架构:智能车软件通常具有清晰的架构,包括任务调度、中断服务程序和主循环等。理解和优化这一架构对于提升整体性能至关重要。 调试与优化:程序能够在比赛中取得好成绩,说明经过了反复的调试和优化。这可能涉及代码效率提升、故障排查以及性能瓶颈的识别和解决。 团队协作与版本控制:在项目开发过程中,团队协作和版本控制工具(如Git)的应用不可或缺,能够保
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值