快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

百盛娱乐电子游戏官网:深入探讨Spring与Struts 的集成方案



Spring是一个轻量级(大年夜小和系统开支的角度)的IoC和AOP容器.它力求简化J2EE开拓即J2EE without EJB.而且作为赞助企业级开拓的核心支柱,Spring为模型层(OR持久层:Hibernate、JDO、iBatis等)办事层(EJB、JNDI、WebService)以及体现层(Struts、JSF、Velocity)都供给了优越的支持和集成规划. 造访Spring官方站

Jakarta-Struts是Apache软件组织供给的一个开源项目.它为Java Web利用供给了基于Model-View-Controller的MVC框架,尤着实用于开拓大年夜型可扩展的Web利用.只管基于Java的MVC框架层出不穷,事实上Spring的MVC模型也供给了驱动利百盛娱乐电子游戏官网用系统Web层的能力,但Jakarta-Struts仍旧是所有这些框架中的佼佼者.

下面,将若何整合这两个J2EE领域的经典项目给出两套详尽的集成规划.

1.首先我们来看一个Spring-Struts整合利用下的节制器Action类源代码.

public class CourceAction extends Action { private CourceService courceService; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Set allCources = courceService.getAllCources(); //..........the other statements request.setAttribute("cources", allCources); return mapping.findForward("jspView"); } }

阐发:CourceService为一个营业实现的接口,此接口声清楚明了一系列的营业处置惩罚措施.该措施的实现设置设置设备摆设摆设为Spring高低问的一个Bean.由此看来,我们大年夜家都可能会孕育发生一个疑问:Struts action若何取得一个包孕在Spring高低文中的Bean呢?为了回答这个问题,Spring供给了两种与Struts集成的要领:

(1).从一个知晓Spring高低文的基类派生我们自己的Struts Action类.然后,在派生类中就可以应用super.XX()措施来得到一个对Spring受控Bean的引用.

(2).将哀求委托给作为Spring Bean治理的Struts Action来处置惩罚.百盛娱乐电子游戏官网

2.注册Spring插件:为了使Struts Action能够造访由Spring治理的Bean,我们就必须要注册一个知道Spring利用高低文的Struts插件.可以在struts-config.xml中经由过程如下的要领来完成注册.

ContextLoadPlugin()认真装载一个Spring利用高低文.(详细的说:是一个WebApplicationContext).value属性值为要加载的设置设置设备摆设摆设Spring受控Bean的xml文件的URI.

3.完成第一种集成规划:实现一个知晓Spring的Action基类.

这种集成规划是从一个公共的能够造访Spring利用高低文的基类中派生所有的Struts Action,但值得荣耀的是:我们不用自己去编写这个知晓Spring利用高低文的基类,由于Spring已经供给了org.springframework.web.struts.ActionSupport:一个org.apache.struts.action.Action的抽象实现.它重载了setServlet()措施以从ContextLoaderPlugin中获取WebapplicationContext.是以,任何时刻我们只必要调用super.getBean()措施即可得到一Spring高低文中的一个Bean的引用.

我们再来看一段Action源代码:

public class CourceAction extends ActionSupport

{

public ActionForward execute(

ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)

throws Exception

{ //取得Spring高低文 ApplicationContext context = super.getWebApplicationContext();

//取得CourceService Bean CourseService courseService = (CourseService) context.getBean("courseService");

Set allCources = courceService.getAllCources();

request.setAttribute("cources", allCources);

//..........the other statements. return mapping.findForward("jspView"); }}

阐发:这个Action类由ActionSupport派生,当CourceAction必要一个Spring受控Bean时:它首先调用基类的getWebApplicationContext()措施以取得一个Spring利用高低文的引用;接着它调用getBean()措施来获取由Spring治理的courceService Bean的一个引用.

小结

至此,我们已经用第一种规划完满的完成了Spring与Struts的集成事情.这种集成要领的好处在于直不雅简洁轻易上手.除了必要从ActionSupport中派生,以及必要从利用高低文中获取Bean之外,其他都与在非Spring的Struts中编写和设置设置设备摆设摆设Action的措施相似.但这种集成规划也有晦气的一壁.最为显明的是:我们的Action类将直接应用Spring供给的特定类,这样会使我们的Struts Action(即节制层)的代码与Spring慎密耦合在一路.这是我们不甘愿宁肯看到的.别的,Action类也认真查找由Spring治理的Bean,这违抗了反向节制(IoC)的原则.

4.实现第二种集成规划:代理和委托Action.

这种集成规划要求我们编写一个Struts Action,但它只不过是一个包孕在Spring利用高低文中的真正Struts Action的一个代理.该代理Action从Struts插件ContextLoaderPlugIn中获图利用高低文,从中查找真正的Struts Action,然后将处置惩罚委托给真正的Struts Action.这个措施的幽雅之处在于:只有代理action才会包孕Spring特定的处置惩罚.真正的Action可以作为org.apache.struts.Action的子类来编写.

下面我们来看一段在之中集成要领下的Struts Action源代码:

public class CourceAction extends Action { private CourceService courceService; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Set allCources = courceService.getAllCources(); request.setAttribute("cources", allCources); //..........the other statements. return mapping.findForward("jspView"); } /* 注入CourceService */ public void setCourceService(CourceService courceService) { this.courceService = courceService; }}

阐发:大年夜家可以看到,在这种要领之下,我们的Struts Action类和Spring是低耦合的,它仅仅依附了Spring供给的反向节制(IoC)机制把CourceSer百盛娱乐电子游戏官网vice注入到了我们的Action中.到此,大年夜家肯定会有一个疑问:那便是Spring到底是若何供给IoC反向节制的呢?回答这个问题,我们必要完成两个步骤的设置设置设备摆设摆设:

(1).在struts-config.xml中注册Struts Action.但要留意的是我们在这里注册的是代理Action.幸运的是,我们不必亲身编写这个类.由于Spring已经经由过程org.springframework.web.struts.DelegatingActionProxy供给了这个代理的Action.详细的设置设置设备摆设摆设措施如下:

(2)将真正的Struts Action作为一个Spring Bean并在Spring高低文设置设置设备摆设摆设文件中作为一个Bean注册之.并将Action所要引用的courceService注入给它.

留意:name属性的值是异常紧张的,它必须和struts-config.xml中的path属性完全同等.这是由于DelegatingActionProxy会应用path属性值在Spring高低文中查找真正的Action.应用DelegatingActionProxy的好处在于我们可以不应用任何Spring特定的类来编百盛娱乐电子游戏官网写Struts Action.同时,Struts动作能够使用IoC取得和他相助的工具.独一不够之处便是不太直不雅,设置设置设备摆设摆设相对繁杂.为了使action委托显得更为直不雅一些,我们可对这种集成规划做进一步的改进:应用哀求委托.

5.应用哀求委托.

为了使action委托看上去更为直不雅一些,Spring供给了DelegatingRequestProcessor,另一种专门用于Spring的哀求处置惩罚器.必要在struts-config.xml中做如下设置设置设备摆设摆设:

这样,DelegatingRequestProcessor将奉告Struts自动将动作哀求委托给Spring高低文中的Action来处置惩罚.这使得我们可以在struts-config.xml顶用struts action的真正类型来声明它们.例如:

当吸收到一个针对/l百盛娱乐电子游戏官网istCourses的哀求时,DelegatingRequestProcessor会自动从Spring高低文设置设置设备摆设摆设文件中查找一个名为/listCourses的Bean(实为一个Struts Action)类.

http://www.javass.cn/javapeixunssh/index.html

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: