Www.helper3.com
热门关键字: php net javascript java
Struts2基础 专题
专题目录
您的位置:java > Struts2基础专题 > Struts2+Spring集成实例
Struts2+Spring集成实例
作者:--    发布时间:2019-11-20 10:18:04
在本教程中,我们来学习struts2和spring的集成。


1. 工程结构

下面的图是本教程的项目文件夹结构。

2. spring监听器

配置spring监听器 “org.springframework.web.context.contextloaderlistener” 到 web.xml 文件中。

web.xml

<!doctype web-app public
 "-//sun microsystems, inc.//dtd web application 2.3//en"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>struts 2 web application</display-name>
  
  <filter>
	<filter-name>struts2</filter-name>
	<filter-class>
         org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter
        </filter-class>
  </filter>
  
  <filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <listener>
    <listener-class>
      org.springframework.web.context.contextloaderlistener
    </listener-class>
  </listener>
  
</web-app>

3. 注册spring bean

注册所有的spring beans 配置在 applicationcontext.xml 文件中, spring监听器会自动找到这个 xml 文件。

applicationcontext.xml

<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.5.xsd">
 
	<bean id="userbo" class="com.h3.user.bo.impl.userboimpl" />
	
	<bean id="userspringaction" class="com.h3.user.action.userspringaction">
		<property name="userbo" ref="userbo" />	
	</bean>
 
</beans>

userbo.java

package com.h3.user.bo;

public interface userbo{

	public void printuser();
	
}

userboimpl.java

package com.h3.user.bo.impl;

import com.h3.user.bo.userbo;

public class userboimpl implements userbo{

	public void printuser(){
		system.out.println("printuser() is executed...");
	}
	
}

userspringaction.java

package com.h3.user.action;

import com.h3.user.bo.userbo;

public class userspringaction{

	//di via spring
	userbo userbo;
	
	public userbo getuserbo() {
		return userbo;
	}

	public void setuserbo(userbo userbo) {
		this.userbo = userbo;
	}

	public string execute() throws exception {
		
		userbo.printuser();
		return "success";
		
	}
}

4. struts.xml

在此声明的所有关系。
<?xml version="1.0" encoding="utf-8" ?>
<!doctype struts public
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
 	<constant name="struts.devmode" value="true" />
 	
	<package name="default" namespace="/" extends="struts-default">
		
		<action name="useraction" 
			class="com.h3.user.action.useraction" >
			<result name="success">pages/user.jsp</result>
		</action>
		
		<action name="userspringaction" 
			class="userspringaction" >
			<result name="success">pages/user.jsp</result>
		</action>
		
	</package>
	
</struts>

5. 示例

现在,所有的struts2和spring的集成工作已经完成,现在看到下面的用例来访问 spring 的 “userbo” bean。
  • 用例 1 : 让 spring 充当 struts2的action类,并访问spring的bean。
  • 用例 2 : 在struts2的action类中访问spring的bean。

用例1

在这个例子中,userspringaction充当struts2的action类,也可以使用普通spring的方式注入spring的userbo。
//struts.xml
<action name="userspringaction" 
	class="userspringaction" >
	<result name="success">pages/user.jsp</result>
</action>

//applicationcontext.xml
<bean id="userspringaction" class="com.h3.user.action.userspringaction">
	<property name="userbo" ref="userbo" />	
</bean> 

要访问此操作,请使用网址: http://localhost:8080/struts2spring/userspringaction.action

用例 2

默认情况下,spring监听器启用 “通过匹配bean的名字自动装配“。 因此,它会通过setuserbo自动传递spring “userbo” bean 到useraction。请参阅下面的struts2动作:

spring的自动装配功能可以修改为 name(默认), typeauto 或 constructor可能需要参考 struts2的spring插件文档

useraction.java

package com.h3.user.action;

import com.h3.user.bo.userbo;
import com.opensymphony.xwork2.actionsupport;
 
public class useraction extends actionsupport{

	//di via spring
	userbo userbo;
	
	public userbo getuserbo() {
		return userbo;
	}

	public void setuserbo(userbo userbo) {
		this.userbo = userbo;
	}

	public string execute() throws exception {
		
		userbo.printuser();
		return success;
		
	}
}

要访问此操作,请使用网址: http://localhost:8080/struts2spring/useraction.action

webapplicationcontextutils
另外,也可以使用spring 通用 webapplicationcontextutils 类来直接获得spring的bean。
package com.h3.user.action;

import org.apache.struts2.servletactioncontext;
import org.springframework.web.context.webapplicationcontext;
import org.springframework.web.context.support.webapplicationcontextutils;

import com.h3.user.bo.userbo;
import com.opensymphony.xwork2.actionsupport;
 
public class useraction extends actionsupport{

	public string execute() throws exception {
		
		webapplicationcontext context =
			webapplicationcontextutils.getrequiredwebapplicationcontext(
                                    servletactioncontext.getservletcontext()
                        );
		
		userbo userbo1 = (userbo)context.getbean("userbo");
		userbo1.printuser();

		return success;
		
	}
}
这是一个又长又臭的文章(包教不包会),请下载完整的项目并按照源代码去一步步实现。

参考

  1. struts2 spring 插件文档
  2. struts + spring 集成实例

滚动到顶部 滚动到底部
网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
QQ群:570078429
网站备案号:
粤ICP备17073857号