`
周一Monday
  • 浏览: 345978 次
  • 来自: 北京
社区版块
存档分类
最新评论

Spring之Spring2.5集成Struts2.2

阅读更多

1.搭建开发环境

 

Spring2.5需要的JAR文件:

spring-framework-2.5.6\dist\spring.jar

spring-framework-2.5.6\lib\jakarta-commons\commons-logging.jar

 

Struts2.2需要的JAR文件

struts-2.2.1.1\lib\commons-fileupload-1.2.1.jar

struts-2.2.1.1\lib\commons-io-1.3.2.jar

struts-2.2.1.1\lib\freemarker-2.3.16.jar

struts-2.2.1.1\lib\javassist-3.7.ga.jar

struts-2.2.1.1\lib\ognl-3.0.jar

struts-2.2.1.1\lib\struts2-core-2.2.1.1.jar

struts-2.2.1.1\lib\xwork-core-2.2.1.1.jar

 

struts-2.2.1.1\lib\struts2-spring-plugin-2.2.1.1.jar Spring整合Struts2需要的

 

在web.xml中做如下配:

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

	<!-- 配置Spring监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:beans.xml</param-value>
	</context-param>

	<!-- 配置Struts2 -->
	<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>
</web-app>

 

JSP页面如下:

 

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Source City</title>
</head>
<body>
	<s:form action="distanceAction" method="post">
		<table>
			<tr>
				<td>Source City</td>
				<td><s:textfield name="srcCity" /></td>
			</tr>
			<tr>
				<td>Destination City</td>
				<td><s:textfield name="destCity" /></td>
			</tr>
			<tr>
				<td>Distance</td>
				<td><font color="red">${distance }</font></td>
			</tr>
			<tr>
				<td colspan="2"><s:submit value="Find" /></td>
			</tr>
		</table>
	</s:form>
</body>
</html>

 

 

 

 

 

2.开发Service

 

a.Service接口

package com.apress.springrecipes.city;

public interface CityService {

	/**
	 * 计算两个城市的距离
	 * @param srcCity 出发地
	 * @param destCity 目的地
	 * @return 两个城市之间的距离
	 */
	public double findDistance(String srcCity,String destCity);
}

 

b.开发Service的实现类

package com.apress.springrecipes.city;

import java.util.Map;

public class CityServiceImpl implements CityService {

	private Map<String, Map<String, Double>> distanceMap;

	public void setDistanceMap(Map<String, Map<String, Double>> distanceMap) {
		this.distanceMap = distanceMap;
	}

	/**
	 * 计算两个城市的距离
	 * @param srcCity 出发地
	 * @param destCity 目的地
	 * @return 两个城市之间的距离
	 */
	@Override
	public double findDistance(String srcCity, String destCity) {
		Map<String, Double> destinationMap = distanceMap.get(srcCity);
		if (destinationMap == null) {
			throw new IllegalArgumentException("Source city not found");
		}
		Double distance = destinationMap.get(destCity);
		if (distance == null) {
			throw new IllegalArgumentException("Destination city not found");
		}
		return distance;
	}

}

 

在Spring的配置文件beans.xml中配置service

<?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.xsd">

	<bean id="cityService" class="com.apress.springrecipes.city.CityServiceImpl">
		<property name="distanceMap">
			<map>
				<entry key="New York">
					<map>
						<entry key="London" value="5574" />
						<entry key="BeiJing" value="10974" />
					</map>
				</entry>
			</map>
		</property>
	</bean>
</beans>

 

3.开发Action整合Spring

 

有两种方法:

 

第一种:

package com.apress.springrecipes.city.struts2;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.apress.springrecipes.city.CityService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DistanceAction extends ActionSupport {

	private static final long serialVersionUID = 6770573934287194873L;

	private String srcCity;
	private String destCity;

	public String getSrcCity() {
		return srcCity;
	}

	public void setSrcCity(String srcCity) {
		this.srcCity = srcCity;
	}

	public String getDestCity() {
		return destCity;
	}

	public void setDestCity(String destCity) {
		this.destCity = destCity;
	}

	@Override
	public String execute() throws Exception {
		//获取ServletContext对象
		ServletContext servletContext = ServletActionContext.getServletContext();
		/**
		 * 在Web容器中获取Spring容器
		 * 此方法需要一个ServletContext对象
		 */
		WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
		//取得Service对象
		CityService cityService = (CityService) ctx.getBean("cityService");
		//调用Service
		double distance = cityService.findDistance(srcCity, destCity);
		//存值
		ActionContext.getContext().put("distance", distance);
		return SUCCESS;
	}

}

 

struts.xml

<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.ui.theme" value="simple" />
	<package name="default" namespace="" extends="struts-default">
		<action name="distanceAction" class="com.apress.springrecipes.city.struts2.DistanceAction">
			<result name="success">/distance.jsp</result>
		</action>
	</package>
</struts>

 

这种方法Struts2并没有托管给Spring管理,只是在Action中通过Spring的容器获取Service而已。两者还是相对独立的。觉得还不算Struts与Spring集成吧,或者集成的不彻底吧。(哈,一家之言,欢迎拍转)。

 

第二种方法:

package com.apress.springrecipes.city.struts2;

import com.apress.springrecipes.city.CityService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DistanceAction2 extends ActionSupport {

	private static final long serialVersionUID = 6770573934287194873L;

	//注入Service
	private CityService cityService;

	public void setCityService(CityService cityService) {
		this.cityService = cityService;
	}

	private String srcCity;
	private String destCity;

	public String getSrcCity() {
		return srcCity;
	}

	public void setSrcCity(String srcCity) {
		this.srcCity = srcCity;
	}

	public String getDestCity() {
		return destCity;
	}

	public void setDestCity(String destCity) {
		this.destCity = destCity;
	}

	@Override
	public String execute() throws Exception {
		double distance = cityService.findDistance(srcCity, destCity);
		// 存值
		ActionContext.getContext().put("distance", distance);
		return SUCCESS;
	}

}

 

 struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.ui.theme" value="simple" />
	<package name="default" namespace="" extends="struts-default">
		<!-- 
			这里的class="distanceAction2"只是一个“伪类”
			真正的实现类在Spring的beans.xml中定义
		 -->
		<action name="distanceAction2" class="distanceAction2">
			<result name="success">/distance2.jsp</result>
		</action>
	</package>
</struts>

 

然后,beans.xml中要加入如下配置:

<!-- 第二种方法 -->
	<!-- 
		配置scope="prototype" (推荐) 或者 scope="request" 
		以保证每次请求都创建一个新的Action实例
	 -->
	<bean id="distanceAction2" class="com.apress.springrecipes.city.struts2.DistanceAction2" scope="prototype">
		<property name="cityService" ref="cityService" />
	</bean>

 这次Action的实例由Spring创建管理,而需要的Service组件,则需要提供Service的Setter方法来注入进去来得到Service,即:所有的组件都在Spring中注册了,通通交由Spring管理了。

分享到:
评论

相关推荐

    spring2.5+struts2.2+hibernate3.3登录实例

    标题中的"Spring2.5+Struts2.2+Hibernate3.3登录实例"是一个基于经典Java企业级开发框架的示例项目。SSH是三个开源框架的缩写,分别是Spring、Struts和Hibernate,它们在Java Web开发中扮演着重要的角色。 Spring是...

    最新Hibernate3[1].2_+_Spring_2.5_+_Struts_2.1_整合开发手册

    ### 最新Hibernate3.2+Spring2.5+Struts2.1整合开发手册 #### 概述 本文档旨在详细介绍如何使用最新的Hibernate 3.2、Spring 2.5和Struts 2.1进行整合开发。通过这种方式,开发者可以更好地理解这三种技术之间的...

    Struts2.5+ Spring5 + Hibernater5.2整合后项目(包含jar包和配置文件)

    Struts2.5、Spring5和Hibernate5.2是Java Web开发中三个非常重要的框架,它们的整合可以构建出高效、灵活的企业级应用。SSH整合指的是Struts2、Spring和Hibernate的集成,这三个框架分别负责MVC(模型-视图-控制器)...

    SSH之最新简单整合,Struts-2.5.10.1+Spring 4.3.8+Hibernate5.2.10

    本文将详细介绍SSH框架的最新整合——Struts 2.5.10.1、Spring 4.3.8和Hibernate 5.2.10的核心特性及其在实际项目中的应用。 首先,Struts 2.5.10.1是Struts 2框架的一个稳定版本,它提供了MVC设计模式的实现,帮助...

    SHH整合(mysql,struts2 2.2+spring2.5+hibernate3.0,log,jquery,标签等)DEMO

    1、SHH整合 详细清晰的标准配置,主流的应用配置,struts2.2+spring2.5+hibernate3.0 2、结合MYSQL轻量级数据库,有写好的库表sql 3、整合日志管理配置,及Spring代理日志管理的配置及应用 4、应用WEB前段主流技术,...

    Spring集成Struts与Hibernate入门详解

    Spring集成Struts与Hibernate入门详解 Spring框架是Java平台上一个开源的轻量级框架,它提供了许多功能强大且灵活的模块,以帮助开发者快速构建企业级应用程序。Struts是Apache软件基金会的一个开源项目,提供了一...

    struts2.2+spring3+hibernate3.6

    在实际开发中,开发者会将这三个框架的jar包整合到项目中,例如在描述中提到的"struts2+spring2.5+hibernate3.3",可能表示的是一个使用了Struts2.2、Spring3.0和Hibernate3.3的项目配置。文件名称列表中的"struts2+...

    Struts2.5+Spring5+Hibernage5框架样例以及lib包.rar

    Struts2.5、Spring5和Hibernate5是Java Web开发中的三大主流框架,它们的集成应用可以构建出高效、可维护的大型企业级应用程序。这个压缩包“Struts2.5+Spring5+Hibernage5框架样例以及lib包.rar”提供了这三个框架...

    Struts2_Hibernate3.3_Spring2.5

    在项目"Struts2.2_Hibernate3.3_Spring2.5"中,这三个框架集成使用,实现了登录功能。数据库使用MySQL,这表明项目的持久层由Hibernate负责,与MySQL进行交互;业务逻辑层可能由Spring管理,通过依赖注入实现组件间...

    Struts1.3 spring2.5 JPA 所需jia包

    Spring2.5 是Spring框架的一个较旧版本,它是一个全面的后端应用框架,不仅支持依赖注入(DI)和面向切面编程(AOP),还包含了对事务管理、数据访问集成、Web应用的支持。在Spring2.5中,你可以使用XML配置或注解来...

    spring2.5 参考手册

    根据提供的信息,我们可以详细解析《spring2.5 参考手册》所涵盖的主要知识点,包括其核心内容、特点以及与其他框架的整合方式等。 ### 一、Spring2.5 核心技术 #### 1.1 Spring 框架概述 - **Spring** 是一个开源...

    Java SSH框架整合搭建Web系统(Struts1.2+Spring2.5+Hibernate3.2)

    接下来,我们将逐步介绍如何在项目中集成Struts框架。 **2.1 添加Struts功能支持** 通过MyEclipse的图形界面快速添加Struts支持。操作步骤如下: - 右键点击项目名称选择“Add Struts Capabilities”。 - 按照...

    spring2.5教程

    依赖注入是 Spring 的核心特性之一,它通过将对象的依赖关系交由外部容器来管理,实现了对象之间的解耦。Spring 支持三种主要的依赖注入方式:构造器注入、设置方法注入以及基于字段的注入。 **1.2 面向切面编程...

Global site tag (gtag.js) - Google Analytics