实例说明如何集成Spring和StrutsJava认证考试

文章作者 100test 发表时间 2009:04:10 00:45:51
来源 100Test.Com百考试题网


  本文想通过一个简单的实例阐述如何集成Spring和Struts。
  1.Struts和Spring
  Struts 代表了MVC第二类架构的实现,在Struts中最重要的组件是ActionServlet,Action和 ActionForm 子类,ActionServlet 代表controller,他基于配置文件接受请求和把这些请求转发到相应的ActionForm和Action子类。 ActionForm把用户输入的数据传送到Action,Action调用商务层组件完成必要的操作,最后提交到view。ActionServlet 使用一个配置文件(struts-config.xml)加载Action子类的定义用以接受用户请求,基于请求URL, controller 找到一个action定义去接受这个请求,Struts构件处理用户请求, 检查配置文件, 完成相应的动作。
  Spring是一种轻量级的容器,它使得使用一个外部XML配置文件非常容易绑定对象,每个对象能够通过列出JavaBean 属性得到一个依赖对象的指针,通过绑定XML配置文件使剩下的工作更加简单。依赖注入(DI)是非常强大的功能,Spring支持可插拔的事务管理器,提供事物管理方式更多的选择. 它集成了持久性的架构同时也提供了一个统一的exception 分类,Spring也提供面向方面(AOP)编程的简单机制。
  2.Struts和Spring的集成
  将Struts应用集成到Spring框架可以采用多种方法,首先Spring明显地被设计用于解决JEE的现实问题,如复杂性,性能低下,可测试性及其他;第二,Spring框架包括一个AOP实现让你可以使用面向方面的程序设计技术.第三, Spring 框架可以能够非常容易地管理和协调Struts.和Struts类似,Spring也包含MVC 实现,两个架构都有优缺点,Struts是MVC最重要的架构,很多开发团队学会了依靠Struts在规定时限内开发出高质量的软件,因此开发团队宁愿集成Spring的功能也不愿意转到Spring MVC.好消息是Spring的结构允许你集成Struts Web 框架、基于Spring的业务层和持久层,我们的方法是应用Spring中的ActionSupport类去集成Struts。
  3.加载应用的context
  首先我们需要使用Spring中的ContextLoaderPlugin为Struts ActionServlet去装载Spring应用的上下文,简单在struts-config.xml 文件中增加plug-in,如下(1)所示:
  ﹤ ?xml version="1.0" encoding="ISO-8859-1" ?﹥
  ﹤ !DOCTYPE struts-config PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
  "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"﹥
  ﹤ struts-config﹥
  ﹤ form-beans﹥
  ﹤ form-bean name="searchForm"
  type="org.apache.struts.validator.DynaValidatorForm"﹥
  ﹤ form-property name="cardno" type="java.lang.String"/﹥
  ﹤ /form-bean﹥
  ﹤ /form-beans﹥
  ﹤ global-forwards type="org.apache.struts.action.ActionForward"﹥
  ﹤ forward name="welcome" path="/welcome.do"/﹥
  ﹤ forward name="searchEntry" path="/searchEntry.do"/﹥
  ﹤ forward name="searchSubmit" path="/searchSubmit.do"/﹥
  ﹤ /global-forwards﹥
  ﹤ action-mappings﹥
  ﹤ action path="/welcome" forward="/WEB-INF/pages/welcome.htm"/﹥
  ﹤ action path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/﹥
  ﹤ action path="/searchSubmit"
  type=" com.infotek.Creditcard.actions.SearchSubmit"
  input="/searchEntry.do"
  validate="true"
  name="searchForm"﹥
  ﹤ forward name="success" path="/WEB-INF/pages/detail.jsp"/﹥
  ﹤ forward name="failure" path="/WEB-INF/pages/search.jsp"/﹥
  ﹤ /action﹥
  ﹤ /action-mappings﹥
  ﹤ message-resources parameter="ApplicationResources"/﹥
  ﹤ plug-in className="org.apache.struts.validator.ValidatorPlugIn"﹥
  ﹤ set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/﹥
  ﹤ /plug-in﹥
  ﹤ plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"﹥ (1)
  ﹤ set-property property="contextConfigLocation" value="/WEB-INF/beans.xml"/﹥
  ﹤ /plug-in﹥
  ﹤ /struts-config﹥
  4.使用Spring的ActionSupport类
  要用Spring去集成Struts,创建一个Spring 上下文是必须要做的。 org.springframework.web.struts.ActionSupport 类提供一个 getWebApplicationContext() 方法非常容易地获得Spring上下文,全部你需要去做的是从Spring的ActionSupport 代替Struts 中的Action类去延伸你的action,如下所示:
  package com.infotek.Creditcard.actions.
  import java.io.IOException.
  import javax.servlet.ServletException.
  import javax.servlet.http.HttpServletRequest.
  import javax.servlet.http.HttpServletResponse.
  import org.apache.struts.action.ActionError.
  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.

相关文章


JAVA资格认:java正则表达式匹配斜杠Java认证考试
利用apache的FileUpload组件实现文件上传Java认证考试
JSP动态网站环境搭建应用中详细步骤介绍Java认证考试
实例说明如何集成Spring和StrutsJava认证考试
JAVA资格认证:HibernateTemplate类使用Java认证考试
JAVA资格认证:hibernate的性能优化Java认证考试
java认证辅导:Java新手进阶(细说引用类型)Java认证考试
在JDK5.0中使用灵活的线程锁定机制Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛