`
downpour
  • 浏览: 717192 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
00a07ae5-264f-3774-8903-8ad88ce08cb0
Struts2技术内幕
浏览量:117854
4d8508f2-c0dd-3df8-9483-04cc612afbbc
SpringMVC深度探险...
浏览量:230604
社区版块
存档分类
最新评论

Struts与Spring整合的几种方法

    博客分类:
  • Java
阅读更多
论坛中用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模式可能会失效。
分享到:
评论
8 楼 bluemeteor 2006-09-12  
可以创建一个BaseAction类...把Setter都放到里面去


btw:顺便试试新版本的推精功能hoho
7 楼 welllove53 2006-09-12  
好东西,不过是2.0的,看样子要把这个src单独拿出来用在项目中了,谢谢楼主咯
6 楼 Tin 2006-09-12  
用的是Autowrie。然后覆盖了Struts默认的RequestProcessor。WebWork2+Spring的时候也用的这种方式。
这种方式限制就在于名字遵循约定/同一个接口只能有一个实现。但是能够减少配置。项目很大了可能是需要重新度量优势/劣势。
5 楼 java虫 2006-09-12  
spring对struts的支持越来越强大,简单了许多。

但好像还是习惯在配置文件里注入一下或在action里自己得到service实例更踏实一些,


boysean 写道
ibm那个网页引用已经没用了~~


什么意思?

那个连接后面还有个.html呢,
4 楼 downpour 2006-09-12  
ibm的网站有问题,你要多刷新两次。我当时是从ibm developworks进去的。
3 楼 boysean 2006-09-12  
ibm那个网页引用已经没用了~~
2 楼 riss 2006-09-12  
好东西,不愧拥有两个钻石,先代表大家谢谢你了!
1 楼 downpour 2006-09-12  
帖子的代码格式有问题啊,Robbin老大何时能修复啊。

相关推荐

    整合Spring与Struts的几种方法

    接下来,有三种整合Spring和Struts的方法: 1. **继承Spring的ActionSupport类**:Action直接继承Spring的`ActionSupport`,并通过`ApplicationContext`获取服务。这种方式简单,但存在几个缺点:首先,Action与...

    struts+spring+hibernate三大框架整合

    Spring整合Struts主要有三种方式: 1. **使用Spring的ActionSupport**:Action类直接继承自Spring的ActionSupport,通过`super.getWebApplicationContext()`获取Spring上下文,然后通过`ApplicationContext.getBean...

    struts 与spring整合关键点

    以上就是Struts与Spring整合的关键点,整合这两个框架可以使应用程序更易于测试和维护,同时充分利用Spring的强大功能,如依赖注入和事务管理,提高开发效率和应用质量。在实际项目中,需要根据具体需求选择合适的...

    第28讲--Struts与Spring集成方案2(Spring集成Struts)

    集成Spring和Struts有多种方法,常见的有以下两种: 1. **基于Servlet Filter的集成**: Spring通过实现Servlet Filter,可以在请求到达Struts之前进行预处理,比如验证用户、注入依赖等。然后,Filter将请求转发...

    spring与struts2整合

    整合 Spring 和 Struts2 主要涉及以下几个步骤: 1. **引入依赖**:在项目中添加 Spring 和 Struts2 相关的库,通常通过 Maven 或 Gradle 进行管理。 2. **配置 Spring**:创建 Spring 配置文件(如 `spring-...

    struts,spring,hibernate整合

    总之,SSH整合是Java Web开发中常见的一种技术栈,它将Struts的MVC能力、Spring的全面管理和控制以及Hibernate的数据持久化能力结合在一起,为企业级应用提供了强大的支撑。理解和掌握SSH整合,对于提升Java开发者的...

    struts+spring整合(全权委托)

    - `struts.xml`:Struts的配置文件,可能包含Action的配置,以及如何与Spring集成的设置。 - `applicationContext.xml`:Spring的配置文件,定义了Bean的定义、依赖关系以及事务管理等。 - `Action类`:这些类通常会...

    struts+spring整合.doc

    标题和描述均提到了“struts+spring整合”的主题,这是一种在Java开发环境中常见的整合模式,旨在结合Struts和Spring框架的优势,以构建更加灵活、高效和可维护的Web应用程序。下面,我们将深入探讨这一整合背后的...

    S2SH整合 struts2 spring4 hibernate4

    5. **Struts2与Hibernate整合**:在Struts2的Action中,通过Spring注入Hibernate的DAO层,实现业务逻辑与持久化层的解耦。Action类不直接操作Session,而是调用DAO方法来完成数据的CRUD操作。 通过这样的整合,S2SH...

    DWR与SPRING,DWR与STRUTS2的整合

    **DWR与Spring的整合**主要涉及到以下几点: 1. **配置DWR Spring集成**:在Spring配置文件中定义DWR相关的bean,如`DWRConfig`和`SpringContextUtil`,以便让DWR能够访问Spring的bean。 2. **Spring托管的Java类...

    SSH整合 struts+hibernate+spring

    - **Struts与Spring整合的注意事项**: - 避免直接在Action类中访问Spring上下文,以免破坏Spring的封装性。 - 对Struts的定制可以通过自定义Action代理或者拦截器来实现。 通过以上几个方面的介绍,可以看出SSH...

    STRUTS+SPRING

    5. 整合Struts 2与Spring:通过Spring插件(struts2-spring-plugin)实现Struts 2 Action的依赖注入,或者在Struts 2中使用Spring的Action代理。 标签 "源码" 和 "工具" 暗示我们需要关注Struts和Spring的源代码...

    Struts2, Spring与myBatis整合示例项目

    此外,Spring还提供了数据访问抽象,可以与MyBatis无缝集成,简化了DAO(Data Access Object)层的实现。 MyBatis允许开发者直接编写SQL语句,将SQL与Java代码紧密结合起来,提高了查询效率。通过XML配置文件或注解...

    Spring struts ibatis Mysql 集成

    iBatis与Spring整合后,可以作为数据访问层,处理与数据库的交互。它提供动态SQL支持,可以灵活地调整查询,避免了传统的DAO层的大量重复代码。 **MySQL数据库**: MySQL 5.1是流行的开源关系型数据库管理系统,...

    struts2Spring整合(实例)

    在Spring整合中,Action类通常被声明为Spring的Bean,这样它的生命周期和依赖关系由Spring管理。 5. **JSP**:在视图层,本实例可能使用了JSP(JavaServer Pages)来展示结果。JSP与Struts2的Result类型配合,将...

    SSH集成 Struts+spring+hibernate集成

    SSH集成是Java开发Web应用程序时常用的一种框架整合方式,它结合了Struts、Spring和Hibernate三个开源框架的优势,提供了一种高效、灵活且易于管理的解决方案。以下将详细阐述这三个框架以及它们集成后的主要特点和...

    struts2+spring练习

    4. **Struts2与Spring集成**:为了结合这两个框架的优点,我们需要配置Struts2的Spring插件。这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`&lt;package&gt;`...

    ssh框架整合详细步骤(spring+struts2+hibernate)

    ##### 第二部分:Struts2与Spring进行整合 **Step08:引入Spring框架** - 添加Spring的核心类库到项目中,包括spring-core、spring-context、spring-web、spring-webmvc等。 **Step09:配置Spring容器** - 创建...

Global site tag (gtag.js) - Google Analytics