现在的位置: 首页 > 综合 > 正文

Struts+Spring整合方式

2012年10月11日 ⁄ 综合 ⁄ 共 4486字 ⁄ 字号 评论关闭

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");
}

}

 

 

 

 

 

抱歉!评论已关闭.