`
fei_6666
  • 浏览: 208420 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts + spring 的整合方案

阅读更多
struts + spring 的整合方案,在图书馆看书摘下来的



(1)利用spring 提供的ActionSupport

ActionSupport
DispatchActionSupport
LookupDispatchActionSupport
MappingDispathActionSupport

在Action类中,需要编写自己获取bean的代码

private ValidBean vb;
public ValidBean getVb()
{
    return (ValidBean) getWebApplicationContext().getBean("vb");
}




在Action类中,该Action类没有交给 IOC委托处理,只是把部分的私有成员交给spring处理
把代码与spring耦合起来,这个是最方便的方法,有利于理解,但是造成代码污染。
但对原来的代码污染最少。

(2)DelegatingActionProxy

主要涉及几个方面的修改

在struts的配置文件中

<form-beans>
  <form-bean name="loginForm" type="scut.LoginForm">
</form-beans>

<action-mappings>
  <action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" name="loginForm" scope="request" validate="true" input="/login.jsp">
  <forward name="input" path="/login.jsp"/>
  <forward name="welcome" path="/welcome.html" />
</action>
</action-mapping>
//所有的action都是指向同一个的处理代理类,看起来会比较让人迷惑

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
   <set-property property="contextConfigLocation"
     value="/WEB-INF/applicationContext.xml",
            /WEB-INF/action-serlet.xml"/>
</plug-in>
//以plug-in的形式引入spring框架,并且给出多个配置文件
//action-servlet.xml用来配置表现层的context 就是把Action作为一个bean处理
//applicationContext.xml 通常是配置其它的私有bean

action-servlet.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEWAN//EN"
  "http://www.springframework.org/dtd/spring-beans.dtd>
<beans>
<bean name="/login" class="scut.LoginAction" singleton="false">
   <property name="vb">
   <ref bean="vb">
   </property>
</bean>
</beans>

action-servlet.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEWAN//EN"
  "http://www.springframework.org/dtd/spring-beans.dtd>
<beans>
<bean id="vb" class="scut.ValidBeanImpl"/>
</bean>
</beans>

同时 Action类要有少量的修改
添加注入方法
private ValidBean vb
public void setVb(ValidBean vb)
{
this.vb=vb;
}
//这个是一种面向接口的编成,实现类是ValidBeanImpl的实例,注入到ValidBean vb中,由于
它实现了该接口,所以不会存在问题。

(3)使用DelegatingRequestProcessor

<action-mappings>
  <action path="/login" name="loginForm" scope="request" validate="true" input="/login.jsp">
  <forward name="input" path="/login.jsp"/>
  <forward name="welcome" path="/welcome.html" />
</action>
</action-mapping>
//所有的action都没有指定一个type的处理

<controller processorClass="org.springframwork.web.struts.DelegatingRequestProcessor"/>
//使用了DelegatingRequestProcessor来代替原来struts的RequestProcessor

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
   <set-property property="contextConfigLocation"
     value="/WEB-INF/applicationContext.xml",
            /WEB-INF/action-serlet.xml"/>
</plug-in>



package com.ericsson.bmf.portal.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.actions.MappingDispatchAction;
import org.apache.struts.config.ModuleConfig;
import org.springframework.beans.BeansException;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.struts.ContextLoaderPlugIn;
import org.springframework.web.struts.DelegatingActionUtils;

/**
* Reconstruct spring's <code>DelegatingActionProxy</code> to support MappingDispathAction. For example:
*
* <p>The proxy is defined in the Struts config file, specifying this
* class as action class. It will delegate to a Struts Action bean
* in the ContextLoaderPlugIn context.
*
* <pre>
* &lt;action path="/login" type="com.ericsson.cgc.common.portal.web.action.BaseActionProxy"/&gt;</pre>
*
* The name of the Action bean in the WebApplicationContext will be
* determined from the mapping path and module prefix. This can be
* customized by overriding the <code>determineActionBeanName</code> method.
*
* <p>Example:
* <ul>
* <li>mapping path "com.ericsson.cgc.common.portal.web.action.BaseActionProxy" -> bean name "com.ericsson.cgc.common.portal.web.action.BaseActionProxy"<br>
* <li>mapping path "com.ericsson.cgc.common.portal.web.action.BaseActionProxy", module prefix "/mymodule" ->
* bean name "/mymodule/com.ericsson.cgc.common.portal.web.action.BaseActionProxy"
* </ul>
*
* <p>A corresponding bean definition in the ContextLoaderPlugin
* context looks as follows, being able to fully leverage
* Spring's configuration facilities:
*
* <pre>
* &lt;bean name="com.ericsson.cgc.common.portal.web.action.BaseActionProxy" class="myapp.MyAction"&gt;
*   &lt;property name="..."&gt;...&lt;/property&gt;
* &lt;/bean&gt;</pre>
*
*
*
* @author ezenwan
*
*/

public class BaseActionProxy extends BaseAction {

    /**
     * Pass the execute call on to the Spring-managed delegate Action.
     * @see #getDelegateAction
     */
    public ActionForward execute(
            ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        BaseActionProxy delegateAction = (BaseActionProxy)getDelegateAction(mapping);
        return delegateAction.executeAction(mapping, form, request, response);
    }
    public ActionForward executeAction(
            ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        return super.execute(mapping, form, request, response);
    }

    /**
     * Return the delegate Action for the given mapping.
     * <p>The default implementation determines a bean name from the
     * given ActionMapping and looks up the corresponding bean in the
     * WebApplicationContext.
     * @param mapping the Struts ActionMapping
     * @return the delegate Action
     * @throws BeansException if thrown by WebApplicationContext methods
     * @see #determineActionBeanName
     */
    protected Action getDelegateAction(ActionMapping mapping) throws BeansException {
        WebApplicationContext wac = getWebApplicationContext(getServlet(), mapping.getModuleConfig());
        String beanName = determineActionBeanName(mapping);
        return (Action) wac.getBean(beanName, Action.class);
    }

    /**
     * Fetch ContextLoaderPlugIn's WebApplicationContext from the ServletContext,
     * falling back to the root WebApplicationContext. This context is supposed
     * to contain the Struts Action beans to delegate to.
     * @param actionServlet the associated ActionServlet
     * @param moduleConfig the associated ModuleConfig
     * @return the WebApplicationContext
     * @throws IllegalStateException if no WebApplicationContext could be found
     * @see DelegatingActionUtils#findRequiredWebApplicationContext
     * @see ContextLoaderPlugIn#SERVLET_CONTEXT_PREFIX
     */
    protected WebApplicationContext getWebApplicationContext(
            ActionServlet actionServlet, ModuleConfig moduleConfig) throws IllegalStateException {

        return DelegatingActionUtils.findRequiredWebApplicationContext(actionServlet, moduleConfig);
    }

    /**
     * Determine the name of the Action bean, to be looked up in
     * the WebApplicationContext.
     * <p>The default implementation takes the mapping type
     *
     * @param mapping the Struts ActionMapping
     * @return the name of the Action bean
 
     * @see org.apache.struts.action.ActionMapping#getType
     */
    protected String determineActionBeanName(ActionMapping mapping) {
        String type = mapping.getType();
        String beanName = type;
        return beanName;
    }

}

分享到:
评论

相关推荐

    Struts+hibernate+spring整合

    Struts、Hibernate和Spring是Java开发中的三大框架,它们各自负责不同的职责,组合起来可以构建出高效、松耦合的企业级应用。SSH整合是指将这三个框架进行集成,以实现MVC(模型-视图-控制器)架构的完整解决方案。 ...

    struts2+spring+mybatis+easyui的实现

    总的来说,"struts2+spring+mybatis+easyui"的实现是一个标准的Java Web项目结构,它利用Maven进行构建管理,通过整合四个组件,实现了后端的业务逻辑处理、数据访问和前端的用户界面展示。这种架构在实际开发中具有...

    中文Struts+Spring+Hibernate整合开发迅雷

    "中文Struts+Spring+Hibernate整合开发迅雷"这个主题,主要涵盖的是如何将这三个框架进行集成,以实现更强大的功能。 1. **Struts**:这是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于处理...

    Struts+Spring+Hibernate整合教程.pdf

    此外,Spring MVC是Spring提供的Web MVC框架,可以替代Struts,提供更灵活的Web开发解决方案。 **Hibernate框架** Hibernate是一个持久层框架,它通过ORM机制将Java对象与数据库表进行映射,使得开发者可以像操作...

    SSH(Struts+Spring+Hibernate)结合项目简单实例

    在SSH整合项目中,通常会将Struts 2的Action作为Spring的Bean管理,由Spring负责Action的实例化和依赖注入。同时,Hibernate的SessionFactory和Session对象也会在Spring中配置,使得业务层可以方便地进行数据库操作...

    Struts+Hibernate+Spring整合小项目

    Struts、Hibernate和Spring是Java EE开发中常用的三个开源框架,它们可以被整合在一起,形成一个强大的企业级应用开发解决方案,通常称为SSH(Struts、Spring、Hibernate)框架集成。这个"Struts2.2.3+hiberante3.2+...

    Struts+Spring+Hibernate框架搭建

    Spring整合Struts Spring与Struts的整合主要涉及以下几个方面: ##### 3.1 三个小窍门 为了有效地整合Spring和Struts,可以采用以下三个技巧: 1. **使用Spring的ActionSupport**:Spring提供了ActionSupport类...

    车辆管理系统(struts+hibernate+spring+oracle).rar

    Struts、Hibernate和Spring的整合使用,形成了SSH框架,它提供了强大的功能和灵活性,可以实现复杂的业务逻辑。例如,Spring的AOP可以用于日志记录、权限控制等跨切面需求,进一步提升系统的可维护性和安全性。 7. ...

    struts+spring+mybatis源代码例子

    标题中的"struts+spring+mybatis源代码例子"意味着这是一个实际的项目示例,包含了这三个框架的集成使用,可以帮助开发者理解和学习如何在实际项目中整合这些技术。通过分析和研究这个源代码,开发者可以深入理解...

    struts+spring+ibatis框架

    Struts、Spring和iBatis是Java开发中常用的三大开源框架,它们各自负责应用程序的不同层面,共同构建了一个灵活且强大的企业级应用开发解决方案。这里,我们深入探讨这三个框架以及它们如何协同工作。 **Struts框架...

    struts+spring+hibernate

    Struts、Spring 和 Hibernate 是Java开发中非常著名的三个开源框架,它们组合在一起形成的SSH(Struts、Spring、Hibernate)框架,是企业级Web应用开发的常用解决方案。SSH框架的整合可以实现模型-视图-控制器(MVC...

    struts+spring+hibernate 英文 API

    Struts 是一个用于构建 MVC(模型-视图-控制器)架构的框架,Spring 提供了一个全面的依赖注入(DI)和面向切面编程(AOP)解决方案,而 Hibernate 则是一个对象关系映射(ORM)工具,它简化了数据库与Java对象之间...

    Struts+Spring+Hibernate快速入门

    Struts+Spring+Hibernate 整合是开发Java Web应用程序的一种常见模式,也称为SSH框架。这个框架组合提供了从前端到后端的完整解决方案,适用于构建三层架构的应用程序。以下是关于这个话题的详细说明: 1. **Struts...

    JAVA WEB整合开发实例精通:Struts+Hibernate+Spring

    4. **Struts+Hibernate+Spring整合**: 这三者结合可以构建出强大的Java Web应用。Struts作为前端控制器,负责用户交互和请求转发;Hibernate处理数据持久化,提供对象化的数据库操作;Spring则作为整个应用的胶水...

    Struts+hibernate+Spring整合开发

    Struts、Hibernate和Spring是Java领域中非常著名的三大开源框架,它们各自负责Web应用的不同层面:Struts专注于表现层...通过深入学习这些文档,可以有效地掌握Struts+Hibernate+Spring整合开发,并应用于实际项目中。

    mybatis+struts+spring搭建好的框架

    在SSM框架中,MyBatis通常与Spring整合,利用Spring的DI特性来管理SqlSessionFactory和SqlSession,使得事务管理和对象生命周期管理更加便捷。 在提供的压缩包中,可能包含以下内容: 1. **源代码**:包括Spring...

    Struts+Spring+Hibernate整合注册登录

    总的来说,Struts+Spring+Hibernate的整合为Java Web开发提供了一种强大的解决方案,能够有效地组织和管理应用的各个层面,提高开发效率,同时保持代码的清晰和可维护性。对于初学者而言,深入理解这三个框架以及...

    struts+spring+hibernate人力资源管理系统

    "Struts+Spring+Hibernate人力资源管理系统"是一个理想的学习实例,它整合了三个强大的Java技术框架,旨在提供全面、稳定且易于维护的人事管理解决方案。 Struts、Spring和Hibernate,这三者构成了企业级Java应用...

Global site tag (gtag.js) - Google Analytics