Struts2 发布已经很长时间了,一直没有顾得上学习,本周工作比较轻松,花点时间照着例子做了一下,但是在与Spring 集成的时候出现问题,action找不到Spring中定义的bean,折腾了两个多小时才最终搞定,决定把心得记录下来。

Struts2 集成 Spring 的 Web.xml 最简配置

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


    
< display-name > Struts 2.0 </ display-name >
    
    
< filter >
        
< filter-name > struts </ filter-name >         
        
< filter-class > org.apache.struts2.dispatcher.FilterDispatcher </ filter-class >

    
</ filter >
    
< filter-mapping >
        
< filter-name > struts </ filter-name >
        
< url-pattern > /* </ url-pattern >
    
</ filter-mapping >
    
    
< listener >
        
< listener-class >
            org.springframework.web.context.ContextLoaderListener
        
</ listener-class >
    
</ listener >
    
    
< welcome-file-list >
        
< welcome-file > index.html </ welcome-file >
    
</ welcome-file-list >
</ web-app >

此配置适用于将Spring 的配置文件放在与Web.xml同一目录,即WEB-INF目录下,且配置文件采用默认命名applicationContext.xml,如果Spring配置文件没有放在WEB-INF下或者采用了自定义名称,则Web.xml应该如下定义:

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


    
< context-param >
        
< param-name > contextConfigLocation </ param-name >
        
< param-value > classpath*:applicationContext*.xml </ param-value >
    
</ context-param >
    
< filter >
        
< filter-name > struts </ filter-name >         
        
< filter-class > org.apache.struts2.dispatcher.FilterDispatcher </ filter-class >

    
</ filter >
    
< filter-mapping >
        
< filter-name > struts </ filter-name >
        
< url-pattern > /* </ url-pattern >
    
</ filter-mapping >
    
    
< listener >
        
< listener-class >
            org.springframework.web.context.ContextLoaderListener
        
</ listener-class >
    
</ listener >
    
    
< welcome-file-list >
        
< welcome-file > index.html </ welcome-file >
    
</ welcome-file-list >
</ web-app >

注意这里比上个配置多出的项

   < context-param >
      < param-name > contextConfigLocation </ param-name >
      < param-value > classpath*:applicationContext*.xml </ param-value >
   </ context-param >

表示Spring配置文件放在CLASSPATH目录下,即WEB-INF/classes目录下,名称为applicationContext*.xml,其中“*”为任意字符

注意,这还没完,CLASSPATH下有个struts.property文件,必须在里面添加一行内容:
(我就是缺了这个导致action找不到bean)

struts.objectFactory = spring  

给Spring配置文件的<beans>元素加上如下属性

<beans default-autowire="autodetect">   

  …… ……

OK,配置完毕!可以使用了