关闭

Struts2 与 Spring 的集成

标签: springstrutsactioninterceptorbean框架
409人阅读 评论(0) 收藏 举报
分类:

Struts 2 Spring Integration

In this simple hello world example you will see how to integrate Spring and Struts 2 using the struts2-spring-plugin. By doing this you can utilize the Spring's powerful Dependency Injection feature. To learn more about Dependency Injection refer this example.

First add the org.springframework.web.context.ContextLoaderListener to the web.xml file.

01.<?xml version="1.0" encoding="UTF-8"?>

02.<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">

03.  <display-name>Struts2Example14</display-name>

04.    <filter>

05.        <filter-name>struts2</filter-name>

06.        <filter-class>org.apache.struts2.dispatcher.ng.filter. StrutsPrepareAndExecuteFilter</filter-class>

07.    </filter>

08.    <listener>

09.        <listener-class>org.springframework.web.context. ContextLoaderListener</listener-class>

10.    </listener>

11.    <filter-mapping>

12.        <filter-name>struts2</filter-name>

13.        <url-pattern>/*</url-pattern>

14.    </filter-mapping>

15.    <welcome-file-list>

16.        <welcome-file>index.jsp</welcome-file>

17.    </welcome-file-list>

18.</web-app>

By default the applicationContext.xml file will be used for doing the Spring bean configuration.

1.<?xml version="1.0" encoding="UTF-8"?>

2.<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

3.<beans>

4.    <bean id="helloWorldClass" class="com.vaannila.HelloWorld" >

5.        <property name="message" value="Hello World!" />

6.    </bean>

7.</beans>

As you can see we have registered the HelloWorld class and injected the "Hello World!" message to the message attribute using the setter injection method.

All the Struts 2 action configuration goes in the struts.xml file.

01.<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

02.  

03.<struts>

04.    <package name="default" extends="struts-default">

05.        <action name="helloWorld" class="helloWorldClass">

06.            <result name="SUCCESS">/success.jsp</result>

07.        </action>

08.    </package>

09.</struts>

The only change here is instead of referring the com.vaannila.HelloWorld class directly, we relate it using the bean name given in the spring bean configuration file.

The HelloWorld class is shown below. In the execute() method we simply return "SUCCESS" and the message attribute is set using setter injection.

01.package com.vaannila;

02.  

03.public class HelloWorld {

04.  

05.    private String message;

06.  

07.    public String getMessage() {

08.        return message;

09.    }

10.  

11.    public void setMessage(String message) {

12.        this.message = message;

13.    }

14.      

15.    public String execute() {

16.        return "SUCCESS";

17.    }

18.}

In the index.jsp page we forward the request to the helloWorld action.

1.<META HTTP-EQUIV="Refresh" CONTENT="0;URL=helloWorld.action">

After invoking the execute() method the user will be directed to the success.jsp page. In this page we dispaly the message value.

You need to have the following jar files in the WEB-INF/lib directory.

01.commons-fileupload-1.2.1

02.commons-io-1.3.2

03.commons-logging-1.1

04.freemarker-2.3.13

05.junit-3.8.1

06.ognl-2.6.11

07.struts2-convention-plugin-2.1.6

08.struts2-core-2.1.6

09.xwork-2.1.2

10.  

11.struts2-spring-plugin-2.1.6

12.  

13.antlr-runtime-3.0

14.org.springframework.asm-3.0.0.M3

15.org.springframework.beans-3.0.0.M3

16.org.springframework.context-3.0.0.M3

17.org.springframework.core-3.0.0.M3

18.org.springframework.expression-3.0.0.M3

19.org.springframework.web-3.0.0.M3

20.org.springframework.web.servlet-3.0.0.M3

The directory structure of the example is shown below.

You can download and try the example here.

Source :Download

Source + Lib :Download

 

本文引自:http://www.vaannila.com/struts-2/struts-2-example/struts-2-spring-plugin-integration-1.html

简单但足以说明问题。

 

Struts2与Spring的集成要用到Spring插件包,这个包是同Struts2一起发布的。Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。Spring插件具体有如下几个作用:

1. 允许spring来创建Action、Interceptror和Result

2. 由Struts创建的对象能够被Spring装配

3. 提供了2个拦截器来自动装配action,如果没有使用Spring ObjectFactory的话

这里要注意的是,我们不必在Spring中去注册action,尽管我们可以这么去做,通常Struts框架会自动的从action mapping中创建action对象。

要实现与Struts与Spring的集成有如下几步

1.将struts2-spring-plugin-2.0.8.jar文件包含到我们的应用中,放到WEB-INF/lib目录下面即可。在这个插件包中有个struts-plugin.xml文件,它的内容如下:

<struts>

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" 

         class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

    <constant name="struts.objectFactory" value="spring" />

    <package name="spring-default">

        <interceptors>

            <interceptor name="autowiring" 

class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

            <interceptor name="sessionAutowiring"

class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>

        </interceptors>

    </package>    

</struts>

这里它将框架常量struts.objectFactory覆盖了,设置为”spring”,其实这里是使用了缩写,我们可以写全称:org.apache.struts2.spring.StrutsSpringObjectFactory。这个缩写的”spring”是和bean配置中的name属性相对应的。默认情况下所有由框架创建的对象都是由ObjectFactory实例化的,ObjectFactory提供了与其它IoC容器如Spring、Pico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或者它的任何子类,并且要带有一个不带参数的构造方法。在这里我们用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默认的ObjectFactory。

此外,上面我们说了,如果action不是使用Spring ObjectFactory创建的话,插件提供了两个拦截器来自动装配action,默认情况下框架使用的自动装配策略是name,也就是说框架会去Spring中寻找与action属性名字相同的bean,可选的装配策略还有:type、auto、constructor,我们可以通过常量struts.objectFactory.spring.autoWire来进行设置。

2.配置Spring监听器,将Spring.jar包包含到应用中

将下面一段话插入到web.xml文件中,同时将spring.jar文件放到WEB-INF/lib目录下面。

<listener>

    <listener-class>

        org.springframework.web.context.ContextLoaderListener

    </listener-class>

</listener>

3.利用Spring配置文件来注册对象

这之后的步骤就和我们使用单独使用Spring一样了,现在我们就已经完成了Struts与Spring的集成了。这里有一点要注意的是,我们还要指定Spring配置文件的地点,默认情况下,容器会到WEB-INF目录下面去寻找applicationContext.xml文件。如果我们想指定别的地方的配置文件或者指定多个配置文件,可以通过在web.xml文件中定义context-param元素来指定,如下所示:

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

        /WEB-INF/applicationContext.xml,classpath:applicationContext-*.xml

    </param-value>

</context-param>

上面一段话表示WEB-INF下面的applicationContext.xml文件以及classpath下面的所有匹配applicationContext-*.xml模式的文件都会作为Spring配置文件被装载。

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:205429次
    • 积分:3229
    • 等级:
    • 排名:第10550名
    • 原创:107篇
    • 转载:83篇
    • 译文:0篇
    • 评论:31条
    文章分类
    最新评论