java

位置:IT落伍者 >> java >> 浏览文章

实例说明如何集成Spring和Struts


发布日期:2018年03月31日
 
实例说明如何集成Spring和Struts

本文想通过一个简单的实例阐述如何集成Spring和Struts

Struts和Spring

Struts 代表了MVC第二类架构的实现在Struts中最重要的组件是ActionServletAction和 ActionForm 子类ActionServlet 代表controller他基于配置文件接受请求和 把这些请求转发到相应的ActionForm和Action子类 ActionForm把用户输入的数据传送到ActionAction调用商务层组件完成必要的操作最后提交到viewActionServlet使用一个配置文件(strutsconfigxml)加载Action子类的定义用以接受用户请求基于请求URL controller 找到一个action定义去接受这个请求Struts构件处理用户请求 检查配置文件 完成相应的动作

Spring是一种轻量级的容器它使得使用一个外部XML配置文件非常容易绑定对象每个对象能够通过列出JavaBean属性得到一个依赖 对象的指针通过绑定XML配置文件使剩下的工作更加简单依赖注入(DI)是非常强大的功能Spring支持可插拔的事务管理器提供事物管理方式更 多的选择 它集成了持久性的架构同时也提供了一个统一的exception 分类Spring也提供面向方面(AOP)编程的简单机制

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

加载应用的context

首先我们需要使用Spring中的ContextLoaderPlugin为Struts ActionServlet去装载Spring应用的上下文简单在strutsconfigxml 文件中增加plugin如下()所示

﹤ ?xml version= encoding=ISO ?﹥

﹤ !DOCTYPE strutsconfig PUBLIC

//Apache Software Foundation//DTD Struts Configuration //EN

config__dtd

﹤ strutsconfig﹥

﹤ formbeans﹥

﹤ formbean name=searchForm

type=orgapachestrutsvalidatorDynaValidatorForm

﹤ formproperty name=cardno type=javalangString/﹥

﹤ /formbean﹥

﹤ /formbeans﹥

﹤ globalforwards type=orgapachestrutsactionActionForward

﹤ forward name=welcome path=/welcomedo/﹥

﹤ forward name=searchEntry path=/searchEntrydo/﹥

﹤ forward name=searchSubmit path=/searchSubmitdo/﹥

﹤ /globalforwards﹥

﹤ actionmappings﹥

﹤ action path=/welcome forward=/WEBINF/pages//﹥

﹤ action path=/searchEntry forward=/WEBINF/pages/searchjsp/﹥

﹤ action path=/searchSubmit

type= tekCreditcardactionsSearchSubmit

input=/searchEntrydo

validate=true

name=searchForm

﹤ forward name=success path=/WEBINF/pages/detailjsp/﹥

﹤ forward name=failure path=/WEBINF/pages/searchjsp/﹥

﹤ /action﹥

﹤ /actionmappings﹥

﹤ messageresources parameter=ApplicationResources/﹥

﹤ plugin className=orgapachestrutsvalidatorValidatorPlugIn

﹤ setproperty property=pathnames value=/WEBINF/validatorrulesxml/WEBINF/validationxml/﹥

﹤ /plugin﹥

﹤ plugin className=orgspringframeworkwebstrutsContextLoaderPlugIn﹥ ()

﹤ setproperty property=contextConfigLocation value=/WEBINF/beansxml/﹥

﹤ /plugin﹥

﹤ /strutsconfig﹥

使用Spring的ActionSupport类

要用Spring去集成Struts创建一个Spring 上下文是必须要做的 orgspringframeworkwebstrutsActionSupport 类提供一个 getWebApplicationContext() 方法非常容易地获得Spring上下文全部你需要去做的是从Spring的ActionSupport 代替Struts 中的Action类去延伸你的action如下所示

package tekCreditcardactions;

import javaioIOException;

import javaxservletServletException;

import javaxservlethttpHttpServletRequest;

import javaxservlethttpHttpServletResponse;

import orgapachestrutsactionActionError;

import orgapachestrutsactionActionErrors;

import orgapachestrutsactionActionForm;

import orgapachestrutsactionActionForward;

import orgapachestrutsactionActionMapping;

import orgapachestrutsactionDynaActionForm;

import orgntextApplicationContext;

import orgspringframeworkwebstrutsActionSupport;

import com infotekCreditcardbeansCreditcard;

import com infotekCreditcardbusinessCreditcardService;

public class SearchSubmit extends ActionSupport { |()

public ActionForward execute(ActionMapping mappingActionForm form

HttpServletRequest requestHttpServletResponse response)

throws IOException ServletException {

DynaActionForm searchForm = (DynaActionForm) form;

String isbn = (String) searchFormget(cardno);

//the old fashion way

//CreditcardService creditcardService = new CreditcardServiceImpl();

ApplicationContext ctx = getWebApplicationContext(); |()

CreditcardService creditcardService =

(CreditcardService ) ctxgetBean(creditcardService); |()

CreditCard creditard = CreditCardServiceread(cardnotrim());

if (null == creditard) {

ActionErrors errors = new ActionErrors();

errorsadd(ActionErrorsGLOBAL_ERRORnew ActionError (messagenotfound));

saveErrors(request errors);

return mappingfindForward(failure) ;

}

requestsetAttribute(creditcard creditcard);

return mappingfindForward(success);

}

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

结论

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

上一篇:Hibernate+Spring搞定Clob、Blob的存取

下一篇:Struts1.x系列教程(10):Validator验证框架入门