struts与spring整合方式有三种:
方式一:通过Spring的ActionSupport类实现。
方式二:通过Sping的DelegatingRequestProcessor类覆盖struts的requestprocessor实现。
方式三:通过Sping的DelegatingActionProxy类实现,将struts action管理委托给spring框架。
相同点:以上三种方式都需要在struts的配置文件struts-config.xml中注册spring的ContextLoaderPlugIn插件。即:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
不同点:
方式一:使用Spring提供的ActionSupport类,只需要使用Action继承Spring的ActionSupport类,即可实现Spring与struts的整合,使用起来简单方便,但是struts的Action与Spring耦合在一起,并且Struts的Action不在spring的控制之中,这样如果更换别的IOC容器,或想使用Spring的AOP都是比较困难的,而且如果是多个动作放在一个Action中,则这种方式就无能为了了!
方式二:使用Spring的DelegatingRequestProcessor类,需要在Struts的配置文件中,使用DelegatingRequestProcessor代替Struts的RequestProcessor类,并在Spring的配置文件中动作映射对应的Bean,可以很方便的转换而不用修改代码,这种方式的缺点是依赖于Struts的RequestProcessor类。
方式三:使用Spring的DelegatingActionProxy类,需要在Struts的配置文件中,定义动作映射的type属性为DelegatingActionProxy而不是类的实际名称,并在Spring的配置文件中定义和Struts配置文件动作映射对应的Bean,这种方式和Struts耦合性最小。
注:三者中,使用Spring的DelegatingActionProxy类来整合Spring和Struts的方式最为强大和灵活。
方式三的实例
login.jsp
- 代码
- <%@ page language="java" pageEncoding="ISO-8859-1"%>
- <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
- <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
- <html>
- <head>
- <title>JSP for LoginForm form</title>
- </head>
- <body>
- <html:form action="/login">
- username : <html:text property="username"/><html:errors property="username"/><br/>
- password : <html:password property="password"/><html:errors property="password"/><br/>
- <html:submit/><html:cancel/>
- </html:form>
- </body>
- </html>
/StrutsLoginDemo/WebRoot/WEB-INF/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>
- <data-sources />
- <form-beans >
- <form-bean name="loginForm" type="com.qdu.sun.struts.form.LoginForm" />
- </form-beans>
- <global-exceptions />
- <global-forwards />
- <action-mappings >
- <action
- attribute="loginForm"
- input="/login.jsp"
- name="loginForm"
- path="/login"
- scope="request"
- type="org.springframework.web.struts.DelegatingActionProxy">
- <forward name="failed" path="/fail.jsp" />
- <forward name="success" path="/success.jsp" />
- </action>
- </action-mappings>
- <message-resources parameter="com.qdu.sun.struts.ApplicationResources" />
- <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
- </plug-in>
- </struts-config>
/StrutsLoginDemo/WebRoot/WEB-INF/applicationContext.xml
- 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
- <bean id="login" class="com.qdu.sun.struts.BO.LoginBO"/>
- <bean name="/login"
- class="com.qdu.sun.struts.action.LoginAction">
- <property name="loginBean">
- <ref bean="login"/>
- </property>
- </bean>
- </beans>
/StrutsLoginDemo/src/com/qdu/sun/struts/action/LoginAction.java
- 代码
- /*
- * Generated by MyEclipse Struts
- * Template path: templates/java/JavaClass.vtl
- */
- package com.qdu.sun.struts.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 com.qdu.sun.struts.BO.LoginBO;
- import com.qdu.sun.struts.form.LoginForm;
- /**
- * MyEclipse Struts
- * Creation date: 08-05-2008
- *
- * XDoclet definition:
- * @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true"
- * @struts.action-forward name="failed" path="/fail.jsp"
- * @struts.action-forward name="success" path="/success.jsp"
- */
- public class LoginAction extends Action {
- /*
- * Generated Methods
- */
- /**
- * Method execute
- * @param mapping
- * @param form
- * @param request
- * @param response
- * @return ActionForward
- */
- private LoginBO loginBean;
- public LoginBO getLoginBean() {
- return loginBean;
- }
- public void setLoginBean(LoginBO loginBean) {
- this.loginBean=loginBean;
- }
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
- LoginBO login=getLoginBean();
- if(login.validate(loginForm.getUsername(), loginForm.getPassword()))
- {
- request.setAttribute("username", loginForm.getUsername());
- return mapping.findForward("success");
- }
- else
- return mapping.findForward("failed");
- }
- }