用Web程序从Struts向Stripes框架的移植
百度广告
在决定移植一个应用程序前,应该首先问一下"为何不使用现在的框架?"在我看来,Struts是一种稳定的具有良好文档的框架,并且有一大批开发者社区成员,但是其配置很麻烦,而且其表单、行为、应用程序流和校验的分离有时会带来很多麻烦。这种情形在我的Struts应用程序不断变大时越发糟糕。最后,纯粹从一种维护的角度,我决定把它移植到一种新的框架。
开始,我认为没有一种框架(Java ServerFaces,Tapestry,WebWorks,Spring MVC)值得从Struts迁移向其迁移。例如JSF这样的框架看上去极不友好。其它的,例如Tapestry和WebWorks,涉及到整页整页的看上去令人麻烦的国际化系统。而从配置角度来看,Spring MVC看上去并不比Struts好多少。我选择的框架应该仅需适当的学习时间,还要与移植效益相称;而且,它还一定要使我编码、排错与维护更为容易。
二、发现Stripes框架
另外吸引我的是Stripes文档。象框架本身一样,文档也是干净、清洁而简练。其标签库文档和API都具有良好的归档,而且该框架的每一种特征几乎都有相应的示例源码。这些优秀的文档再加上我的现有Struts知识使我坚信,我可以快速地掌握这种Stripes框架。
值得注意的是,Stripes还包括另外一些使其成为一种良好的AJAX平台的特征,例如它提供了一种流式方案,该方案允许对AJAX实现进行改进的错误处理。然而,对于我来说,最终的决定因素还是我能够清楚地看到它会使我的生活更容易些。我估计,在我的应用程序的行为/配置/校验部分,我只需使用约一半的代码就够了。更少的代码意味着了更少的错误、更快的开发时间和更容易的。
三、移植过程
(一) JavaServer Pages
Stripes依赖于JSTL实现JSP视图中的逻辑。我在我的应用程序中混合使用了Struts逻辑标签和JSTL。通过把我的所有逻辑标签移植到JSTL,我能够利用JSTL的优越的if/else和case语句的能力处理,它们可能是很原始的或者根本不存在于Struts逻辑taglib中。
(二) 国际化
我的移植的最有意义的部分是去掉了我的Struts Action表单,这是在Action类中进行的,要求大量的XML标记和冗长的转换,如下例所示:
type="org.apache.struts.validator.DynaValidatorForm">
ActionMapping mapping, ActionForm form,
throws Exception {Employee employee=new Employee();
employee.setFirstname(eaf.getString("firstname"));
employee.setPhone (eaf.getString("phone"));
employee.setEmployeeid ((Integer)eaf.get("employeeid"));
employee.setBirthdate(MyUtils.convertStringToDate(eaf.getString("birthdate")));
EmployeeDAOService.updateEmployee(employee);
}
public class UpdateEmployeeActionBean implements ActionBean {
private Employee employee;
return context;
public void setContext(ActionBeanContext context) {
}
this.employee = employee;
public Employee getEmployee() {
}
EmployeeDAOService.updateEmployee(employee);
}} |||
在大多数情况中,我能够嵌入我的域对象的一个副本作为我的Stripes ActionBean类的一个属性并且仅包括涉及把该对象移入/移出我的持久层的代码部分。我把所有表单处理都交给了Struts Action来实现,包括初始化配置、把表单强制转换成适当的类以及从域对象中来回转换数据(约30%的代码是在大多数Action类中实现的)。在Stripes中并不需要这样。
简言之,把域对象作为你的ActionBean类的一个属性嵌入,为该类提供了getter和setter方法。总之,所有有趣的地方(包括列表)都在HTML视图的表单中体现出来。
所有我对表单的操作也都可以通过查询串参数方式来实现。我仅把这些参数作为我的ActionBean的一个属性,而如果它们是请求的一部分的话,可以把它们自动地复制到相应的域中。
(四) 校验
(五) 应用程序流程
为此,Stripes共提供了三种不同方式以便把请求映射到行为层:
尽管与Struts配置相比,前两种方法似乎有点"硬编码"特征,但是useBean标签提供了大量的灵活性。借助于该标签,JSP可以存取多个ActionBean或类以得到其所需要的内容。
四、结论
编辑推荐:
温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)
点击加载更多评论>>