`

spring3 struts2 整合

阅读更多

原创文章,转载请表明来源。

 

今天同事在搭ssh框架,遇到了一个很奇怪的问题,他按照网上的一些资料,配好了,但是在action里面就是拿不到spring注入的service层的对象,经过了几个小时的奋斗终于搞定。

首先列出我修改之前的配置信息:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="
http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
 </context-param>
  <!-- 指定log4j.properties配置文件的位置 -->
 <context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>/WEB-INF/classes/log4j.properties</param-value>
 </context-param>
 <!-- 指定以Listener方式启动Spring容器 -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener> 
 
 <!-- 指定以Listener方式启动Log4j -->
 <listener>
  <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>
 <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>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
</web-app>

 

 struts.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
 <!-- 设置Struts2.1应用是否处于开发模式,通常在开发调试阶段设为true,正式上线后可设为false -->
 <constant name="struts.devMode" value="true" />
 <!-- 设置Struts2.1默认的ObjectFactory为  org.apache.struts2.spring.StrutsSpringObjectFactory-->
 <constant name="struts.objectFactory" value="spring" />
 <!--<constant name="struts.objectFactory.spring.autoWire" value="name" />-->
 
 
 <package name="test"  extends="struts-default">
  <action name="login" class="loginAction" method="execute">
   <result name="success">/success.jsp</result>
   <result name="error">/fail.jsp</result>
  </action>
 </package>
</struts>   

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >


 <bean id="userDAO" class="com.ssh.test.dao.UserDao">
  <bean id="loginCheck1" class="com.ssh.test.service.LoginCheck">
   <property name="userDao" ref="userDAO"/>
  </bean>
  <bean id="loginAction" class="com.ssh.test.action.LoginAction" >
   <property name="loginCheck" ref="loginCheck1"/>
  </bean>
  </beans>

login.jsp

  <body>
    <s:form action="/login.action" >
     dd<s:textfield name="user.userName" label="UserName"/>
     <s:password name="user.password" label="Password"/>
     <s:submit value="Login"/>
    </s:form>
  </body>

 

经过反复推敲琢磨,通过日志打印可以发现,其实spring已经实例化类loginAction并且也进行了loginCheck1这个业务对象的注入,可是为什么从页面过来的请求,就是取不到这个loginCheck1呢?

原因在于<package name="test" namespace="/" extends="struts-default">少写了这个namespace="/".

 

总结:

 

struts2 为了提高效率而引入了namespace,这个namespace能够使页面过来的请求尽快的找到相对应的action;如果上面写了这个namespace strtus2就会调用spring生成的那个loginAction,如果什么都不写struts框架就会生产出一个新的loginAction,没有人为这个新的loginAction注入loginCheck1业务层对象,所以在这种情况下struts就拿不到业务层的对象loginCheck1对象了。

顺便提一下:

struts2的action是非单例的,这也就是为什么action是有状态的原因;而在spring中默认的配置的bean都是单例的,所以在配置applicationContext.xml文件时尤其是让spring来管理action的生命周期时要注意!

2
0
分享到:
评论
1 楼 NetBus 2012-02-27  
引用
struts2的action是非单例的


struts2的action必须是单例的,否则有可能会引发串值的问题。

相关推荐

    spring与struts2整合

    Spring 和 Struts2 是两个...总之,Spring 和 Struts2 的整合利用了两者的优势,提供了一种强大的方式来构建可扩展、易于维护的 Java Web 应用。通过深入学习和实践,开发者可以掌握这种整合技巧,并在实际项目中应用。

    Spring与Struts 2整合.zip

    3. **配置Struts 2**:在struts.xml中配置Action,将Spring管理的Bean注入到Action中。可以使用`&lt;spring:bean&gt;`标签或`struts-plugin.xml`中的`&lt;struts:spring-plugin&gt;`来实现Action的Spring托管。 4. **事务管理**...

    Spring与Struts2整合

    3. **整合Struts2-Spring插件** 引入Struts2的Spring插件,该插件使得Spring管理的Action类可以在Struts2中直接使用。在struts.xml配置文件中启用该插件。 4. **Action类的配置** 创建Spring管理的Action类,通常...

    spring+struts2整合源码

    3. **Spring与Struts2的连接点**: 整合的关键在于如何让Struts2知道如何从Spring容器中获取Bean。这通常通过使用Spring插件来实现,它会在Struts2启动时自动从Spring容器加载所有标记为@Controller的Bean。在`...

    spring4 struts2 mybatis3 maven3 整合

    这里提到的"spring4 struts2 mybatis3 maven3 整合"就是一个典型的Java Web开发技术栈,分别代表了Spring Framework 4、Struts 2、MyBatis 3和Maven 3这四个组件。下面将详细阐述这些技术以及它们整合的意义和方法。...

    spring+struts2+ibatis整合的jar包

    总的来说,Spring、Struts2和iBatis的整合为Java Web开发提供了一个强大、灵活的解决方案,让开发者能够更专注于业务逻辑,而不是框架的底层实现。通过合理的配置和使用这个jar包,开发者可以快速构建出稳定、高性能...

    spring3.2.6struts2.3.15MyBatis3整合DEMO

    《Spring 3.2.6、Struts 2.3.15与MyBatis 3整合实战详解》 在Java Web开发领域,Spring、Struts和MyBatis是三大主流框架,它们各自承担着不同的职责,共同构建了一个强大的企业级应用开发环境。本DEMO以Spring ...

    spring和struts的整合-aop的使用

    Spring和Struts2的整合需要相关的jar包,包括Spring的核心库、Struts2的核心库以及Spring的Struts2插件库。确保所有必要的依赖都被正确地添加到项目的类路径中,这是项目能正常运行的基础。 然后,我们转向AOP的...

    Spring+Struts2+hibernate+Redis整合

    在IT行业中,SSH(Spring、Struts2、Hibernate)是一个经典的Java Web开发框架组合,而Redis则是一个高性能的键值存储系统,常用于缓存和数据持久化。将SSH与Redis整合,可以提升应用程序的性能和响应速度。下面将...

    Struts2整合Spring、JPA

    Struts2整合Spring和JPA是企业级Java应用开发中常见的技术组合,它们分别负责不同的职责:Struts2作为一款成熟的MVC框架,主要用于处理Web层的请求与响应;Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和...

    ibatis+spring+struts2 整合开发例子

    "ibatis+spring+struts2 整合开发例子"就是一个典型的Java Web应用集成开发案例,旨在帮助开发者理解和掌握这三大框架的协同工作原理。接下来,我们将详细讨论这三个组件以及它们的整合过程。 Ibatis是一个轻量级的...

    ibatis+Spring+struts2整合实例

    本实例关注的是“ibatis+Spring+struts2”的整合,这是一个经典的Java Web开发组合,用于实现数据访问、业务逻辑控制和用户界面交互。下面我们将深入探讨这三个组件及其整合的关键知识点。 1. **iBATIS**:iBATIS...

    compass+ibatis+spring+struts2整合开发

    compass+ibatis+spring+struts2整合开发compass+ibatis+spring+struts2整合开发compass+ibatis+spring+struts2整合开发compass+ibatis+spring+struts2整合开发

    Spring/Struts2整合项目

    整合Spring和Struts2的主要目标是利用Spring的强大功能来管理Struts2中的Action类以及相关的业务逻辑,同时借助Struts2的优秀表现力来处理用户界面和请求转发。 **整合步骤:** 1. **配置环境**:确保已经安装了...

    dwr和spring和struts2整合

    Spring还提供了对其他框架的集成支持,如数据库访问、事务管理以及与Struts2和DWR的整合。 Struts2是一个基于MVC设计模式的Java Web框架,用于构建可维护、可扩展的应用程序。它提供了强大的动作类、拦截器、结果...

    Spring+Struts2 整合测试

    3. **整合流程**:整合Spring和Struts2通常包括以下步骤: - 引入相关库:添加Spring和Struts2的JAR包到项目中,包括Spring的核心、AOP、Web模块以及Struts2的核心、插件等。 - 配置Spring:编写Spring的配置文件...

    spring和struts2整合入门

    整合Spring和Struts2的主要目的是利用Spring的依赖注入和事务管理功能,以及Struts2的MVC模式和易用性。整合步骤通常包括: 1. **添加依赖**:在项目中引入Spring和Struts2的相关库。 2. **配置Spring**:创建...

    Spring+Struts2+Ibatis整合例子

    **Spring、Struts2 和 iBatis 整合详解** 在Java Web开发中,Spring、Struts2 和 iBatis 是三个非常重要的框架。它们分别负责不同层面的任务:Spring 提供了全面的依赖注入(DI)和面向切面编程(AOP),用于管理...

    Spring+Struts2_整合原理

    ### Spring与Struts2整合原理详解 #### 一、整合背景及意义 随着企业级应用需求的日益复杂,单一框架往往难以满足项目的所有需求。在Java Web开发领域,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)...

Global site tag (gtag.js) - Google Analytics