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登录实例"是一个基于经典Java企业级开发框架的示例项目。SSH是三个开源框架的缩写,分别是Spring、Struts和Hibernate,它们在Java Web开发中扮演着重要的角色。 Spring是...
### 最新Hibernate3.2+Spring2.5+Struts2.1整合开发手册 #### 概述 本文档旨在详细介绍如何使用最新的Hibernate 3.2、Spring 2.5和Struts 2.1进行整合开发。通过这种方式,开发者可以更好地理解这三种技术之间的...
Struts2.5、Spring5和Hibernate5.2是Java Web开发中三个非常重要的框架,它们的整合可以构建出高效、灵活的企业级应用。SSH整合指的是Struts2、Spring和Hibernate的集成,这三个框架分别负责MVC(模型-视图-控制器)...
本文将详细介绍SSH框架的最新整合——Struts 2.5.10.1、Spring 4.3.8和Hibernate 5.2.10的核心特性及其在实际项目中的应用。 首先,Struts 2.5.10.1是Struts 2框架的一个稳定版本,它提供了MVC设计模式的实现,帮助...
1、SHH整合 详细清晰的标准配置,主流的应用配置,struts2.2+spring2.5+hibernate3.0 2、结合MYSQL轻量级数据库,有写好的库表sql 3、整合日志管理配置,及Spring代理日志管理的配置及应用 4、应用WEB前段主流技术,...
Spring集成Struts与Hibernate入门详解 Spring框架是Java平台上一个开源的轻量级框架,它提供了许多功能强大且灵活的模块,以帮助开发者快速构建企业级应用程序。Struts是Apache软件基金会的一个开源项目,提供了一...
在实际开发中,开发者会将这三个框架的jar包整合到项目中,例如在描述中提到的"struts2+spring2.5+hibernate3.3",可能表示的是一个使用了Struts2.2、Spring3.0和Hibernate3.3的项目配置。文件名称列表中的"struts2+...
Struts2.5、Spring5和Hibernate5是Java Web开发中的三大主流框架,它们的集成应用可以构建出高效、可维护的大型企业级应用程序。这个压缩包“Struts2.5+Spring5+Hibernage5框架样例以及lib包.rar”提供了这三个框架...
在项目"Struts2.2_Hibernate3.3_Spring2.5"中,这三个框架集成使用,实现了登录功能。数据库使用MySQL,这表明项目的持久层由Hibernate负责,与MySQL进行交互;业务逻辑层可能由Spring管理,通过依赖注入实现组件间...
Spring2.5 是Spring框架的一个较旧版本,它是一个全面的后端应用框架,不仅支持依赖注入(DI)和面向切面编程(AOP),还包含了对事务管理、数据访问集成、Web应用的支持。在Spring2.5中,你可以使用XML配置或注解来...
根据提供的信息,我们可以详细解析《spring2.5 参考手册》所涵盖的主要知识点,包括其核心内容、特点以及与其他框架的整合方式等。 ### 一、Spring2.5 核心技术 #### 1.1 Spring 框架概述 - **Spring** 是一个开源...
接下来,我们将逐步介绍如何在项目中集成Struts框架。 **2.1 添加Struts功能支持** 通过MyEclipse的图形界面快速添加Struts支持。操作步骤如下: - 右键点击项目名称选择“Add Struts Capabilities”。 - 按照...
依赖注入是 Spring 的核心特性之一,它通过将对象的依赖关系交由外部容器来管理,实现了对象之间的解耦。Spring 支持三种主要的依赖注入方式:构造器注入、设置方法注入以及基于字段的注入。 **1.2 面向切面编程...