思想:将获取业务逻辑组件的方式放在父类中实现,而其余的Action则从父类中获取。
采用这个策略的优势:
- 可在不同整合策略中自由切换
- 避免重复创建DelegatingActionProxy实例
- 使业务Action避免代码污染
下面举个例子来诠译这种整合方式,首先是BaseAction的源代码:
- public class BaseAction extends ActionSupport
- {
- public Object getBean(String beanName)
- {
- return getWebApplicationContext().getBean(beanName);
- }
- }
该父类仅将ActionSupport的方法再次包装,但产生的优势非常明显,至少可以在实际业务Action中避免调用getWebApplicationContext方法。下面是业务Action的源代码:
ActionForm form, HttpServletRequest request,
HttpServletResponse response)throws Exception { LoginForm loginForm = (LoginForm)form; String username = loginForm.getUsername(); String pass = loginForm.getPass(); setVb(); //下面作服务器端的数据校验 String errMsg = ""; if (username == null || username.equals("")) { errMsg += "您的用户名丢失或没有输入,请重新输入"; } else if(pass == null || pass.equals("")) { errMsg += "您的密码丢失或没有输入,请重新输入"; } else { if (vb.valid(username,pass)) { return mapping.findForward("welcome"); } else { errMsg = "您的用户名和密码不匹配"; } } if (errMsg != null && !errMsg.equals("")) { request.setAttribute("err" , errMsg); return mapping.findForward("input"); } else { return mapping.findForward("welcome"); } } }
从代码中可看出,在实际的业务控制器Action中,完全从Spring的API中分离出来,从而可以避免代码污染。
另外,还有一个最大的好处:实际的业务Action并没有与任何的整合策略耦合。假如需要在不同的整合策略之间切换,其业务Action完全不需要改变。
假设需要将整合策略切换到得用Spring IOC特性,则只需将BaseAction改成如下形式:
下面的示例采用这种整合策略,而Spring管理Action则采用DelegatingRequestProcessor策略。其struts-config.xml和actionServlet的配置文件如下:
<message-resources parameter="mess"/> <!-- 装载验证的资源文件--> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> <set-property property="stopOnFirstError" value="true"/> </plug-in> <!-- 装载Spring配置文件,随同应用启动创建ApplicationContext实例--> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml"/> </plug-in> </struts-config>
action-servlet的配置文件如下:
本文介绍了一种将Struts与Spring框架整合的策略,通过将业务逻辑组件的获取方式放置于基类中,实现了业务Action与Spring API的解耦。此方法避免了代码重复和污染,并能轻松地在不同整合策略间切换。
766

被折叠的 条评论
为什么被折叠?



