实例说明如何集成Spring和Struts(二)

2014-11-23 23:56:51 · 作者: · 浏览: 1
ionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.DynaActionForm;

import org.springframework.context.ApplicationContext;

import org.springframework.web.struts.ActionSupport;

import com. infotek.Creditcard.beans.Creditcard;

import com. infotek.Creditcard.business.CreditcardService;

public class SearchSubmit extends ActionSupport { |(1)

public ActionForward execute(ActionMapping mapping,ActionForm form,

HttpServletRequest request,HttpServletResponse response)

throws IOException, ServletException {

DynaActionForm searchForm = (DynaActionForm) form;

String isbn = (String) searchForm.get("cardno");

//the old fashion way

//CreditcardService creditcardService = new CreditcardServiceImpl();

ApplicationContext ctx = getWebApplicationContext(); |(2)

CreditcardService creditcardService =

(CreditcardService ) ctx.getBean("creditcardService"); |(3)

CreditCard creditard = CreditCardService.read(cardno.trim());

if (null == creditard) {

ActionErrors errors = new ActionErrors();

errors.add(ActionErrors.GLOBAL_ERROR,new ActionError ("message.notfound"));

saveErrors(request, errors);

return mapping.findForward("failure") ;

}

request.setAttribute("creditcard", creditcard);

return mapping.findForward("success");

}

}


在(1)中,我们通过延伸Spring ActionSupport 类而不是Struts Action 类创建了一个action;在(2)中,我们使用getWebApplicationContext()方法获得一个 ApplicationContext;为了获得商务服务, 在(3)中,我们使用ApplicationContext去查找Spring bean;这个技术非常容易理解,不幸的是它把Struts的action和Spring framework绑定了,如果你想替换Spring你不得不重写代码,而且Struts的action不在Spring的控制之下, 遗憾的是这种方法无法获得Spring AOP的好处。

5.结论

本文我们尝试使用Spring的ActionSupport,ContextLoaderPlugIn去集成Struts,这是一种最高效的和最简单的方式,另外还可用Spring中的代理子类去代理Struts中的RequestProcessor和代理Struts的actions