论坛中用Struts+Spring的人不少,以前的帖子也有问过Struts+Spring的整合方式。前面的帖子中ReadOnly老大曾经提到过Spring2.0新增加的一个整合方式。今天简单把这几种整合方式小结一下。
在这之前,别忘了用一下Google大法,一般早有人会对类似的问题做过回答,果然,在ibm developworks上有一篇文章,一下子涵盖了三种整合方式,有兴趣的xdjm可以参考下面的链接:http://www-128.ibm.com/developerworks/cn/java/j-sr2.html。
下面着重谈一下Spring2.0新增的一个整个方式,我感觉挺不错,可以完全将Struts的配置和Spring的配置分离。具体步骤如下:
1. 编写Spring的配置文件applicationContext.xml,简单起见,仅仅定义一个Service对象。
引用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="userService" class="com.bearingpoint.gdc.zero.service.impl.UserServiceImpl" />
</beans>
这看上去就和普通的Spring配置文件没有任何分别。
2. 编写Struts的配置文件struts-config.xml,注意其中的controller的配置,用到了Spring2.0的新特性。
引用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config
PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"
>
<struts-config>
<action-mappings>
<action path="/addUser"
type="com.bearingpoint.gdc.zero.action.user.AddUser"
scope="request"
>
<forward name="success" path="/index.jsp" />
</action>
</action-mappings>
<controller processorClass="org.springframework.web.struts.AutowiringRequestProcessor" />
</struts-config>
3. 然后为你的Struts的Action注入你需要的Service
引用
private UserService userService;
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
User user = new User();
userService.addUser(user);
return mapping.findForward("success");
}
/**
* @param userService
* The userService to set.
*/
public void setUserService(UserService userService) {
this.userService = userService;
}
看上去你好像啥都没做,而事实上,注入工作已经由AutowiringRequestProcessor自动完成。
4. 编写web.xml进行测试。
引用
?xml version="1.0" ?>
<!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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>struts</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/classes/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>validate</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>struts</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
最后,启动Jetty进行测试,顺利运行通过!
看上去如此简单,配置起来也没有什么很特别的地方,只是按照常规来写你的Spring和Struts的配置文件就好了。
不过在这里还是说一下其中的要注意两个问题:
1. 这种autowire的注入支持两种不同的方式,分别是byName和byType,默认是byType。我想这对于绝大多数开发者来说是够了。
2. 鉴于在http://www.iteye.com/topic/15057中所提到的OpenSessionInView模式的失效的问题。我仔细看了一下Spring的源码。对于这种autowire的整合方式,不推荐在struts-config.xml文件中配置ContextLoaderPlugIn,而是采用web.xml中的ContextLoaderListener来加载Spring的初始化配置。否则,你的OpenSessionInView模式可能会失效。
分享到:
- 2006-09-12 15:00
- 浏览 23562
- 评论(8)
- 论坛回复 / 浏览 (8 / 13336)
- 查看更多
相关推荐
接下来,有三种整合Spring和Struts的方法: 1. **继承Spring的ActionSupport类**:Action直接继承Spring的`ActionSupport`,并通过`ApplicationContext`获取服务。这种方式简单,但存在几个缺点:首先,Action与...
Spring整合Struts主要有三种方式: 1. **使用Spring的ActionSupport**:Action类直接继承自Spring的ActionSupport,通过`super.getWebApplicationContext()`获取Spring上下文,然后通过`ApplicationContext.getBean...
以上就是Struts与Spring整合的关键点,整合这两个框架可以使应用程序更易于测试和维护,同时充分利用Spring的强大功能,如依赖注入和事务管理,提高开发效率和应用质量。在实际项目中,需要根据具体需求选择合适的...
集成Spring和Struts有多种方法,常见的有以下两种: 1. **基于Servlet Filter的集成**: Spring通过实现Servlet Filter,可以在请求到达Struts之前进行预处理,比如验证用户、注入依赖等。然后,Filter将请求转发...
整合 Spring 和 Struts2 主要涉及以下几个步骤: 1. **引入依赖**:在项目中添加 Spring 和 Struts2 相关的库,通常通过 Maven 或 Gradle 进行管理。 2. **配置 Spring**:创建 Spring 配置文件(如 `spring-...
总之,SSH整合是Java Web开发中常见的一种技术栈,它将Struts的MVC能力、Spring的全面管理和控制以及Hibernate的数据持久化能力结合在一起,为企业级应用提供了强大的支撑。理解和掌握SSH整合,对于提升Java开发者的...
- `struts.xml`:Struts的配置文件,可能包含Action的配置,以及如何与Spring集成的设置。 - `applicationContext.xml`:Spring的配置文件,定义了Bean的定义、依赖关系以及事务管理等。 - `Action类`:这些类通常会...
标题和描述均提到了“struts+spring整合”的主题,这是一种在Java开发环境中常见的整合模式,旨在结合Struts和Spring框架的优势,以构建更加灵活、高效和可维护的Web应用程序。下面,我们将深入探讨这一整合背后的...
5. **Struts2与Hibernate整合**:在Struts2的Action中,通过Spring注入Hibernate的DAO层,实现业务逻辑与持久化层的解耦。Action类不直接操作Session,而是调用DAO方法来完成数据的CRUD操作。 通过这样的整合,S2SH...
**DWR与Spring的整合**主要涉及到以下几点: 1. **配置DWR Spring集成**:在Spring配置文件中定义DWR相关的bean,如`DWRConfig`和`SpringContextUtil`,以便让DWR能够访问Spring的bean。 2. **Spring托管的Java类...
- **Struts与Spring整合的注意事项**: - 避免直接在Action类中访问Spring上下文,以免破坏Spring的封装性。 - 对Struts的定制可以通过自定义Action代理或者拦截器来实现。 通过以上几个方面的介绍,可以看出SSH...
5. 整合Struts 2与Spring:通过Spring插件(struts2-spring-plugin)实现Struts 2 Action的依赖注入,或者在Struts 2中使用Spring的Action代理。 标签 "源码" 和 "工具" 暗示我们需要关注Struts和Spring的源代码...
此外,Spring还提供了数据访问抽象,可以与MyBatis无缝集成,简化了DAO(Data Access Object)层的实现。 MyBatis允许开发者直接编写SQL语句,将SQL与Java代码紧密结合起来,提高了查询效率。通过XML配置文件或注解...
iBatis与Spring整合后,可以作为数据访问层,处理与数据库的交互。它提供动态SQL支持,可以灵活地调整查询,避免了传统的DAO层的大量重复代码。 **MySQL数据库**: MySQL 5.1是流行的开源关系型数据库管理系统,...
在Spring整合中,Action类通常被声明为Spring的Bean,这样它的生命周期和依赖关系由Spring管理。 5. **JSP**:在视图层,本实例可能使用了JSP(JavaServer Pages)来展示结果。JSP与Struts2的Result类型配合,将...
SSH集成是Java开发Web应用程序时常用的一种框架整合方式,它结合了Struts、Spring和Hibernate三个开源框架的优势,提供了一种高效、灵活且易于管理的解决方案。以下将详细阐述这三个框架以及它们集成后的主要特点和...
4. **Struts2与Spring集成**:为了结合这两个框架的优点,我们需要配置Struts2的Spring插件。这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`<package>`...
##### 第二部分:Struts2与Spring进行整合 **Step08:引入Spring框架** - 添加Spring的核心类库到项目中,包括spring-core、spring-context、spring-web、spring-webmvc等。 **Step09:配置Spring容器** - 创建...