`
yahaitt
  • 浏览: 760841 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

struts与spring如何整合

阅读更多
一、struts与spring如何整合
线索从web.xml看起

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>app name</display-name>

    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>

    <listener>
        <listener-class>com.ramix.common.util.InitPlatformLoader</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/*.spring.xml
        </param-value>
    </context-param>

    <!-- Spring的过滤器 -->
    <filter>
        <filter-name>OpenSessionFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!-- 编码转换过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>com.ramix.common.webapp.filter.EncodingFilter</filter-class>
    </filter>
    <!--sitemesh过滤器-->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
        <init-param>
            <param-name>configFile</param-name>
            <param-value>/WEB-INF/classes/sitemesh.xml</param-value>
        </init-param>
    </filter>
    <!--session-->
    <filter-mapping>
        <filter-name>OpenSessionFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <!--encode-->
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <!--sitemesh过滤-->
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    <!-- struts 的配置 -->
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>
                /WEB-INF/struts/struts-config.xml,
                /WEB-INF/struts/action/fileupload-action-config.xml,
                /WEB-INF/struts/action/demo-action-config.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!--showpic-->
    <servlet>
        <servlet-name>showphoto</servlet-name>
        <servlet-class>com.ramix.demo.webapp.servlet.ShowParentPicServlet</servlet-class>
        <init-param>
            <param-name>noimage</param-name>
            <param-value>/images/noimage.gif</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>showphoto</servlet-name>
        <url-pattern>/showphoto</url-pattern>
    </servlet-mapping>
    <!--cxf-->
    <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>

    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/page/common/e404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/WEB-INF/page/common/e500.jsp</location>
    </error-page>
</web-app>

这里我们要关注的是两个地方的配置文件
1、/WEB-INF/spring/*.spring.xml
2、/WEB-INF/struts/struts-config.xml,/WEB-INF/struts/action/fileupload-action-config.xml,/WEB-INF/struts/action/demo-action-config.xml

{1}中放置的配置文件是关于service层的配置
如:demo.spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
	"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
	<bean id="parentManager" parent="baseTxService">
		<property name="target">
			<bean class="com.ramix.demo.service.impl.ParentManagerImpl" autowire="byName">
				<property name="childMgr" ref="childManager"/>
			</bean>
		</property>
	</bean>

	<bean id="childManager" parent="baseTxService">
		<property name="target">
			<bean class="com.ramix.demo.service.impl.ChildManagerImpl" autowire="byName"/>
		</property>
	</bean>

	<bean id="jdbcManager" parent="baseTxService">
		<property name="target">
			<bean class="com.ramix.demo.service.impl.JdbcManagerImpl" autowire="byName" parent="jdbcDao"/>
		</property>
	</bean>

</beans>

{2}中放置的都是struts的配置文件
如:/WEB-INF/sturts/action/demo-action-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
	"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
	<action-mappings>
		<action path="/demo/list"
				type="com.ramix.demo.webapp.action.DemoListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/list.jsp"/>
		</action>
		<action path="/demo/create" forward="/WEB-INF/page/demo/create.jsp"/>
		<action path="/demo/save"
				type="com.ramix.demo.webapp.action.DemoSaveAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/demo/list.do"/>
		</action>
		<action path="/demo/client"
				type="com.ramix.demo.webapp.action.DemoClientAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/client.jsp"/>
		</action>
		<action path="/demo/mail" forward="/WEB-INF/page/demo/sendmail.jsp"/>
		<action path="/demo/send"
				type="com.ramix.demo.webapp.action.DemoSendAction"
				parameter="method"
				scope="request"
				name="globalForm"/>

		<action path="/demo/child/create"
				type="com.ramix.demo.webapp.action.DemoChildCreateAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/child_create.jsp"/>
		</action>
		<action path="/demo/child/save"
				type="com.ramix.demo.webapp.action.DemoChildSaveAction"
				parameter="method"
				scope="request"
				name="globalForm"/>
		<action path="/demo/child/list"
				type="com.ramix.demo.webapp.action.DemoChildListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/child_list.jsp"/>
		</action>
		<action path="/demo/cahce_list" forward="/WEB-INF/page/demo/cache.jsp"/>
		<action path="/demo/child/list/ajax" forward="/WEB-INF/page/demo/child_list_ajax.jsp"/>
		<action path="/demo/ajax/child/list"
				type="com.ramix.demo.webapp.action.DemoAjaxChildListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="view" path="/WEB-INF/page/demo/ajax_list.jsp"/>
		</action>
		<action path="/demo/test"
				type="com.ramix.demo.webapp.action.DemoListAction"
				parameter="method"
				scope="request"
				name="globalForm">
			<forward name="test" path="/WEB-INF/page/demo/test.jsp"/>
		</action>
		
	</action-mappings>
</struts-config>

而衔接struts与spring的地方是在struts-config.xml中体现
/WEB-INF/struts/struts-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
    "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
    <form-beans>
        <form-bean name="globalForm" type="org.apache.struts.action.DynaActionForm"/>
    </form-beans>

    <global-forwards>
        <forward name="globalError" path="/WEB-INF/page/common/error.jsp"/>
        <forward name="globalSuccess" path="/WEB-INF/page/common/success.jsp"/>
    </global-forwards>

	<!-- 
		利用了 <controller> 标记来用 DelegatingRequestProcessor 覆盖默认的 Struts RequestProcessor。
		下一步是在 Spring 配置文件中注册该动作
		
		DelegatingRequestProcessor自动地配置属性。这种设计使 Struts 动作并不知道它正被 Spring 管理,并且使您能够利用 Sping 的动作管理框架的所有优点。
	
		在请求转发给action之前,转发给Spring的Bean
	 -->
    <controller>
        <set-property property="processorClass"
                      value="org.springframework.web.struts.DelegatingRequestProcessor"/>
    </controller>

	<!-- 
	装载环境:需要使用 Spring 的 ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring 应用程序环境
	 -->
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation"
                      value="/WEB-INF/struts/spring/demo-action.spring.xml"/>
    </plug-in>
</struts-config>

要知道Struts转发的一个重要类是RequestProcessor,而现在通过对controller的设置将转发类被org.springframework.web.struts.DelegatingRequestProcessor替换,
而org.springframework.web.struts.DelegatingRequestProcessor只是封装了RequestProcessor,这样struts的转发就由spring来处理了。

问题:这里的plug-in标签的作用是什么?可以不写plugin-in这个标签吗?
1、其实plug-in只是为了装载Struts的ActionServlet用的,如果在web.xml的context-param中已经指定了这个Struts的ActionServlet配置文件,那么此时可以不写plug-in。
2、如果在web.xml的context-param中并没有指定这个Struts的ActionServlet配置文件,那么必须加上plug-in
3、plug-in中contextConfigLocation属性的作用是什么?可以不要这个属性吗?
如果用了plug-in,那么contextConfigLocation属性的作用是指定Struts的ActionServlet配置文件所在的位置;
如果去掉了contextConfigLocation属性,那么Struts的ActionServlet配置文件将被指定为/WEB-INF/{app}-servlet.xml文件,
({app}指的是web.xml中servlet-name的值,此处为"action"
<!-- struts 的配置 -->
	    <servlet>
	        <servlet-name>action</servlet-name>
	        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	        <init-param>
	            <param-name>config</param-name>
	            <param-value>
	                /WEB-INF/struts/struts-config.xml,
	                /WEB-INF/struts/action/fileupload-action-config.xml,
	                /WEB-INF/struts/action/demo-action-config.xml
	            </param-value>
	        </init-param>
	        <load-on-startup>1</load-on-startup>
	    </servlet>
	    <servlet-mapping>
	        <servlet-name>action</servlet-name>
	        <url-pattern>*.do</url-pattern>
	    </servlet-mapping>

)
所以,这是就必须在/WEB-INF/下存在action-servlet.xml文件。

现在默认的/WEB-INF/action-servlet.xml文件或由plug-in的contextConfigLocation属性指定的/WEB-INF/struts/spring/demo-action.spring.xml文件内容应该结合
web.xml的struts配置中指定的config文件内容可以这样写:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean name="/demo/list" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoListAction" autowire="byName">
                <property name="mgr" ref="parentManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/save" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoSaveAction" autowire="byName">
                <property name="mgr" ref="parentManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/client" class="com.ramix.demo.webapp.action.DemoClientAction">
        <property name="dws" ref="demoClient"/>
    </bean>
    <bean name="/demo/send" class="com.ramix.demo.webapp.action.DemoSendAction">
        <property name="mgr" ref="mailSendManager"/>
    </bean>

    <bean name="/demo/child/create" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoChildCreateAction" autowire="byName">
                <property name="mgr" ref="parentManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/child/save" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoChildSaveAction" autowire="byName">
                <property name="PMgr" ref="parentManager"/>
                <property name="CMgr" ref="childManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/child/list" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoChildListAction" autowire="byName">
                <property name="mgr" ref="childManager"/>
            </bean>
        </property>
    </bean>
	
	<bean name="/demo/ajax/child/list" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoAjaxChildListAction" autowire="byName">
                <property name="mgr" ref="jdbcManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/test" parent="baseTxService">
    	<property name="target">
    		<bean class="com.ramix.demo.webapp.action.Test" autowire="byName">
    		</bean>
    	</property>
    </bean>
</beans>

其实这样配置的目的也就是为了利用spring的依赖注入,能够使得Struts的servletAction自如的使用service层的bean。

这里需要关注的一点是:
请看/WEB-INF/struts/action/demo-action-config.xml中的
<action path="/demo/test"
		type="com.ramix.demo.webapp.action.DemoListAction"
		parameter="method"
		scope="request"
		name="globalForm">
	<forward name="test" path="/WEB-INF/page/demo/test.jsp"/>
</action>

和/WEB-INF/struts/spring/demo-action.spring.xml中的
<bean name="/demo/test" parent="baseTxService">
	<property name="target">
		<bean class="com.ramix.demo.webapp.action.Test" autowire="byName">
		</bean>
	</property>
</bean>


当url中执行..../demo/test.do时,将会是个什么样的过程?
首先会到/WEB-INF/struts/spring/demo-action.spring.xml中去找name为"/demo/test"的bean,
1、找到了,则执行target属性中指定的bean(此bean就是ServletAction类):com.ramix.demo.webapp.action.Test的execute方法,并通过autowire="byName"对该类的set方法进行依赖注入。
2、没找到,才会去/WEB-INF/struts/action/demo-action-config.xml中去找/demo/test.do,
并执行type属性中指定的ServletAction:com.ramix.demo.webapp.action.DemoListAction的execute方法

提问:servletAction中必须要写execute方法吗?
如果真的写了execute方法,那么就失去了parameter="method"的意义,如果这样做的话,那势必每个功能(通过页面操作增删改查)都需要写一个action类,这样会导致action类数量的急剧膨胀。
其实,struts的DispatchAction的execute方法被执行时,他的机制是去获得method参数,如果该参数有值,那么会去执行这个元素对应的方法。比如url是这样的.../demo/test.do?method=test
就会去执行对应的servletAction类中的test方法;如果method参数没有值,则会去执行unspecified方法。
这样我们可以通过在servletAction中多写几个方法就能很好的解决这个action类急剧膨胀的问题,从管理上看还能更加的简介。
所以如果重写了execute方法,那么就失去了这些功能。

现在可以看看com.ramix.demo.webapp.action.Test类可以怎么写了:

package com.ramix.demo.webapp.action;

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

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.ramix.common.webapp.action.BaseAction;

public class Test extends BaseAction {
	@Override
	public ActionForward unspecified(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		request.setAttribute("test", "test");
		return mapping.findForward("test");
	}

	public ActionForward test(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		request.setAttribute("test", request.getParameter("test"));
		return mapping.findForward("test");
	}
}


unspecified是不带method参数是执行的方法
test是method参数值为test是执行的方法

当然如果应用很简单的,你并不需要parameter="method"的话,你非要写上execute方法也没有关系,就像下面代码这样:

package com.ramix.demo.webapp.action;

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

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.ramix.common.webapp.action.BaseAction;

public class Test extends BaseAction {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println("ok");
		System.out.println("ok1");
		return null;
	}
}



说明:这里的BaseAction只是对org.springframework.web.struts.DispatchActionSupport做了封装,代码如下:

package com.ramix.common.webapp.action;

import com.ramix.common.util.RequestParamUtil;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.struts.DispatchActionSupport;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * 基础的Action,提供一些action中最基本的方法
 *
 * @author: Feng
 * @since: 2007-11-30
 */
public class BaseAction extends DispatchActionSupport {
    // 用来输出log。
    protected final Logger log = Logger.getLogger(this.getClass());

    // 默认分页个数
    protected static final int DEF_PAGE_SIZE = 10;

    // 默认错误页
    protected static final String DEF_VIEW_PAGE = "view";

    // 默认错误页
    protected static final String DEF_ERROR_PAGE = "globalError";

    // 默认成功页
    protected static final String DEF_SUCCESS_PAGE = "globalSuccess";

    // 令牌名称
    protected static final String TOKEN_KEY = "RIMAX_TOKEN";

    /**
     * 用来得到spring注入的bean。
     *
     * @param beanName 在spring配置文件中定义的bean的名字。
     * @return 从ApplicationContext中得到的bean对象。
     */
    protected Object getBean(String beanName) {
        ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());
        return ctx.getBean(beanName);
    }

    /**
     * 从request取得目标页码,没有设置,默认显示第一页
     *
     * @param request HttpServletRequest
     * @return 目标页码
     */
    protected int getPageNum(HttpServletRequest request) {
        return RequestParamUtil.getIntParam(request, "pageNum", 1);
    }

    /**
     * 从request取得目标页码,没有设置,默认显示第一页
     *
     * @param request HttpServletRequest
     * @return 目标页码
     */
    protected int getPageSize(HttpServletRequest request) {
        return RequestParamUtil.getIntParam(request, "pageSize", DEF_PAGE_SIZE);
    }

    /**
     * 转向错误页面
     *
     * @param mapping ActionMapping
     * @param request HttpServletRequest
     * @param message 显示信息
     * @param url     目标地址
     * @return ActionForward
     */
    protected ActionForward toGobalError(ActionMapping mapping, HttpServletRequest request, String message, String url) {
        request.setAttribute("url", url);
        request.setAttribute("message", message);
        return mapping.findForward(DEF_ERROR_PAGE);
    }

    /**
     * 转向全局成功页面
     *
     * @param mapping ActionMapping
     * @param request HttpServletRequest
     * @param message 显示信息
     * @param url     目标地址
     * @return ActionForward
     */
    protected ActionForward toGobalSuccess(ActionMapping mapping, HttpServletRequest request, String message, String url) {
        request.setAttribute("url", url);
        request.setAttribute("message", message);
        return mapping.findForward(DEF_SUCCESS_PAGE);
    }

    /**
     * 验证当前提交的令牌,并不重置令牌
     *
     * @param request HttpServletRequest
     * @return 令牌是否有效
     */
    protected boolean validCurToken(HttpServletRequest request) {
        HttpSession session = request.getSession();
        if (session == null) {
            return false;
        }
        Map map = (Map) session.getAttribute(TOKEN_KEY);
        if (map == null) {
            return true;
        }
        String strToken = request.getParameter(TOKEN_KEY);
        if (strToken == null) {
            return false;
        }
        return map.containsKey(strToken);
    }

    /**
     * 删除当前令牌
     *
     * @param request HttpServletRequest
     */
    protected void removeCurToken(HttpServletRequest request) {
        HttpSession session = request.getSession();
        if (session == null) {
            return;
        }
        Map map = (Map) session.getAttribute(TOKEN_KEY);
        if (map == null) {
            return;
        }
        String strToken = request.getParameter(TOKEN_KEY);
        if (strToken == null) {
            return;
        }
        map.remove(strToken);
    }
}

分享到:
评论

相关推荐

    ssh整和技术struts与hibernate整合,struts与spring整合,hibernate与spring整合,struts,hibernate,sp

    Struts技术资料 hibernate技术资料 spring技术资料 ssh整合技术(struts与hibernate整合,struts与spring整合,hibernate与spring整合,struts,hibernate,spring整合)

    struts 与spring整合关键点

    以上就是Struts与Spring整合的关键点,整合这两个框架可以使应用程序更易于测试和维护,同时充分利用Spring的强大功能,如依赖注入和事务管理,提高开发效率和应用质量。在实际项目中,需要根据具体需求选择合适的...

    EJB3与Struts与Spring整合开发(SSE)

    在"EJB3与Struts与Spring整合开发(SSE)"的场景中,开发者可能将EJB3作为业务逻辑层,处理复杂的业务操作;Struts作为前端控制器,负责用户交互和请求转发;而Spring则作为整个应用的“胶水”,实现各层间的协调和...

    struts与spring的整合

    将Struts与Spring整合可以充分利用两者的优点,实现更高效、更灵活的开发。 **Struts框架详解** Struts是Apache软件基金会的一个开源项目,基于MVC设计模式,主要解决了JSP模型2架构中的控制器问题。它通过...

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用

    在整合过程中,开发者需要注意配置文件的正确设置,包括Struts2的struts.xml、Hibernate的hibernate.cfg.xml以及Spring的applicationContext.xml等。还需要确保各框架之间的依赖注入正确无误,例如,Spring需要知道...

    Eclipse Struts、Spring整合

    **Eclipse Struts与Spring整合详解** 在Java Web开发领域,Struts和Spring都是非常重要的框架,它们分别在MVC模式和依赖注入方面扮演着关键角色。Struts作为一个经典的MVC框架,帮助开发者构建可维护的、结构清晰的...

    struts和spring整合(两种实现方法)

    用DelegatingRequestProcessor和DelegatingActionProxy两种方法实现struts和spring的整合,不同的地方就在struts-config.xml文件中,当前文件中DelegatingRequestProcessor是注释的。

    struts,mybatis,spring整合jar包

    4. **Struts与Spring整合**:在Struts的配置文件中,设置Action类由Spring管理,通过`&lt;interceptor-ref&gt;`引用Spring的ModelDriven拦截器,实现模型驱动。 5. **MyBatis与Spring整合**:使用Spring的...

    SSH_Struts Hibernate Spring整合

    5. **Struts与Spring整合**: 使用Spring的Struts插件,将Action实例化的工作交给Spring,通过`org.springframework.web.struts.DelegatingActionProxy`实现。 通过SSH整合,开发者可以更专注于业务逻辑的实现,而不...

    struts和spring整合的2种方式

    在实际应用中,随着Struts2的出现和Spring Boot的流行,这种Struts1与Spring的整合方式逐渐被新的框架组合取代,如Spring MVC或Spring Boot的WebFlux。然而,对于学习和理解框架整合以及依赖注入的概念,这些基础...

    struts和spring的三种整合方法

    虽然题目中没有提及,但在实际开发中,Spring MVC往往被看作是Struts与Spring整合的最佳实践。Spring MVC是Spring框架的一部分,它提供了一套完整的MVC实现,相比于Struts,Spring MVC更加轻量级,与Spring的集成...

    struts+spring+hibernate整合

    通过以上步骤,一个基本的Struts、Spring和Hibernate整合的应用就搭建完成了。这个整合的关键在于Struts处理HTTP请求,Spring管理业务对象和依赖,而Hibernate则处理数据库操作。这样的架构可以实现松耦合,便于代码...

    SSH整合 struts+hibernate+spring

    - **Struts与Spring整合的注意事项**: - 避免直接在Action类中访问Spring上下文,以免破坏Spring的封装性。 - 对Struts的定制可以通过自定义Action代理或者拦截器来实现。 通过以上几个方面的介绍,可以看出SSH...

    struts1 spring ibatis整合项目源码

    struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码

    SSH整合源码(Struts+Spring+Hibernate整合用户注册例子)

    Struts和Spring之间通过ActionServlet和Spring的DispatcherServlet协同工作,而Spring与Hibernate之间的整合通常通过SessionFactoryBean和HibernateTemplate完成。 8. **用户注册流程**:用户提交注册信息后,...

    struts+spring+hibernate 整合实例

    1. **Struts与Spring整合**:主要通过Struts2-Spring-plugin实现,配置Struts2的核心配置文件(struts.xml)以指定Spring作为Action的创建者。同时,Action类需要继承SpringActionSupport,并通过`@Component`、`@...

    Struts+Spring+Hibernate(整合)

    Struts 与Spring整合时,可以通过Spring的Action代理,实现Action的依赖注入,进一步提高代码的可测试性和解耦。 2. **Spring框架**:Spring 提供了一个容器,用于管理应用对象的生命周期和依赖关系。它允许通过XML...

    struts hibernate spring 整合 PUB

    struts struts hibernate spring 整合 PUBhibernstruts hibernate spring 整合 PUBate spring 整合 PUB

Global site tag (gtag.js) - Google Analytics