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>
* <action path="/login" type="com.ericsson.cgc.common.portal.web.action.BaseActionProxy"/></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>
* <bean name="com.ericsson.cgc.common.portal.web.action.BaseActionProxy" class="myapp.MyAction">
* <property name="...">...</property>
* </bean></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是Java开发中的三大框架,它们各自负责不同的职责,组合起来可以构建出高效、松耦合的企业级应用。SSH整合是指将这三个框架进行集成,以实现MVC(模型-视图-控制器)架构的完整解决方案。 ...
总的来说,"struts2+spring+mybatis+easyui"的实现是一个标准的Java Web项目结构,它利用Maven进行构建管理,通过整合四个组件,实现了后端的业务逻辑处理、数据访问和前端的用户界面展示。这种架构在实际开发中具有...
"中文Struts+Spring+Hibernate整合开发迅雷"这个主题,主要涵盖的是如何将这三个框架进行集成,以实现更强大的功能。 1. **Struts**:这是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于处理...
此外,Spring MVC是Spring提供的Web MVC框架,可以替代Struts,提供更灵活的Web开发解决方案。 **Hibernate框架** Hibernate是一个持久层框架,它通过ORM机制将Java对象与数据库表进行映射,使得开发者可以像操作...
在SSH整合项目中,通常会将Struts 2的Action作为Spring的Bean管理,由Spring负责Action的实例化和依赖注入。同时,Hibernate的SessionFactory和Session对象也会在Spring中配置,使得业务层可以方便地进行数据库操作...
Struts、Hibernate和Spring是Java EE开发中常用的三个开源框架,它们可以被整合在一起,形成一个强大的企业级应用开发解决方案,通常称为SSH(Struts、Spring、Hibernate)框架集成。这个"Struts2.2.3+hiberante3.2+...
Spring整合Struts Spring与Struts的整合主要涉及以下几个方面: ##### 3.1 三个小窍门 为了有效地整合Spring和Struts,可以采用以下三个技巧: 1. **使用Spring的ActionSupport**:Spring提供了ActionSupport类...
Struts、Hibernate和Spring的整合使用,形成了SSH框架,它提供了强大的功能和灵活性,可以实现复杂的业务逻辑。例如,Spring的AOP可以用于日志记录、权限控制等跨切面需求,进一步提升系统的可维护性和安全性。 7. ...
标题中的"struts+spring+mybatis源代码例子"意味着这是一个实际的项目示例,包含了这三个框架的集成使用,可以帮助开发者理解和学习如何在实际项目中整合这些技术。通过分析和研究这个源代码,开发者可以深入理解...
Struts、Spring和iBatis是Java开发中常用的三大开源框架,它们各自负责应用程序的不同层面,共同构建了一个灵活且强大的企业级应用开发解决方案。这里,我们深入探讨这三个框架以及它们如何协同工作。 **Struts框架...
Struts、Spring 和 Hibernate 是Java开发中非常著名的三个开源框架,它们组合在一起形成的SSH(Struts、Spring、Hibernate)框架,是企业级Web应用开发的常用解决方案。SSH框架的整合可以实现模型-视图-控制器(MVC...
Struts 是一个用于构建 MVC(模型-视图-控制器)架构的框架,Spring 提供了一个全面的依赖注入(DI)和面向切面编程(AOP)解决方案,而 Hibernate 则是一个对象关系映射(ORM)工具,它简化了数据库与Java对象之间...
Struts+Spring+Hibernate 整合是开发Java Web应用程序的一种常见模式,也称为SSH框架。这个框架组合提供了从前端到后端的完整解决方案,适用于构建三层架构的应用程序。以下是关于这个话题的详细说明: 1. **Struts...
4. **Struts+Hibernate+Spring整合**: 这三者结合可以构建出强大的Java Web应用。Struts作为前端控制器,负责用户交互和请求转发;Hibernate处理数据持久化,提供对象化的数据库操作;Spring则作为整个应用的胶水...
Struts、Hibernate和Spring是Java领域中非常著名的三大开源框架,它们各自负责Web应用的不同层面:Struts专注于表现层...通过深入学习这些文档,可以有效地掌握Struts+Hibernate+Spring整合开发,并应用于实际项目中。
在SSM框架中,MyBatis通常与Spring整合,利用Spring的DI特性来管理SqlSessionFactory和SqlSession,使得事务管理和对象生命周期管理更加便捷。 在提供的压缩包中,可能包含以下内容: 1. **源代码**:包括Spring...
总的来说,Struts+Spring+Hibernate的整合为Java Web开发提供了一种强大的解决方案,能够有效地组织和管理应用的各个层面,提高开发效率,同时保持代码的清晰和可维护性。对于初学者而言,深入理解这三个框架以及...
"Struts+Spring+Hibernate人力资源管理系统"是一个理想的学习实例,它整合了三个强大的Java技术框架,旨在提供全面、稳定且易于维护的人事管理解决方案。 Struts、Spring和Hibernate,这三者构成了企业级Java应用...