IDEA下使用maven集成Struts2和Spring

初学java,在用struts做了几个项目之后,觉得手动集成业务组件有些麻烦了,是时候上spring了。先把struts和spring集成下,体验一把spring的IoC看看再说。
从网上找了不少资料,总感觉写的不是很全面,对于我这个新手来说不是很友好。好在捣鼓了几个小时之后,顺利跑起来了一个简单的demo。尽量详细的记录一下,以便和大家交流。

环境&版本

jdk:1.7
ide:IDEA 2016.02
tomcat:7
maven:3.3.9
由于这里的IDE用的是IDEA,所以可能要熟悉一些基本操作,例如配置服务器、启动、调试等。如果有不熟悉的,可以先看下这篇教程:https://github.com/judasn/IntelliJ-IDEA-Tutorial

IDEA中创建maven工程

这里简单介绍下在IDEA中创建maven工程:一般的create project流程,只是在选择类型的时候先勾选create from archetype,选择maven中的maven-archetype-webapp,剩下的暂时随便填填也可以。参考图:
这里写图片描述

注意:这里只是介绍在ide中如何创建maven工程,后面的测试工程会用到github上的工程。

导入项目

struts为spring提供了示例工程,所以在此我就直接用示例工程了。传送门:https://github.com/apache/struts-examples
这个工程里面有很多子工程,我导入IDEA后,按照上面的README没有编译成功。所以还是将里面的spring-struts拷贝出来,单独做成一个项目,然后跑成功的。将这个文件夹提出来后项目如下图所示:
这里写图片描述

pom.xml

工程中的代码无需多改,唯一要改动的就是pom.xml了,我的大部分时间也是耗在了这个上面。下面给出经过尝试之后可用的pom配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ebank.hfcenter.rel</groupId>
    <artifactId>sprint-struts</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>sprint-struts Maven Webapp</name>

    <url>http://maven.apache.org</url>
    <dependencies>
        <!-- junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!--spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>

        <!--struts2-->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.1.2</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>sprint-struts</finalName>
    </build>
</project>

修改完成后,等待IDEA自动下载对应jar包即可。

启动

正如上节所说,改了pom.xml之后,其他文件不用修改,就可以直接启动该项目了。启动成功后的若干截图如下:

  • 首页:
    这里写图片描述

  • 填写信息页:
    这里写图片描述

  • 保存成功页:
    这里写图片描述

粗浅理解

虽然没有改动项目代码,但是还是需要理解一下的。对这个项目,我的大致理解如下:
1. 在web.xml中配置了启动spring容器的listener:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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>Spring Struts 2</display-name>

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

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</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>

</web-app>

通过这个listener,在项目启动时就会启动spring容器,然后加载默认的配置文件:/WEB-INF/applicationContext.xml;
2. 在applicationContext.xml中,配置了由spring容器管理的业务组件(JavaBean),例如在本工程中就配置了一个bean:

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

    <bean id="editService" class="org.apache.struts.edit.service.EditServiceInMemory"/>
</beans>

配置了这个bean后,在后续的业务流程中,如果有和bean名相同的业务组件,就会有spring自动的管理,而不必使用硬编码的方式写在程序中。
3. 后续的流程就和单纯的struts差不多了,http request-》action-》调用业务组件-》返回,只不过其中action中的业务组建由spring管理,会方便很多。

搞定!

猜你喜欢

转载自blog.csdn.net/hfut_wowo/article/details/72412708