欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IDEA下使用maven集成Struts2和Spring

程序员文章站 2022-05-26 23:29:56
...

初学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,剩下的暂时随便填填也可以。参考图:
IDEA下使用maven集成Struts2和Spring

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

导入项目

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

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之后,其他文件不用修改,就可以直接启动该项目了。启动成功后的若干截图如下:

  • 首页:
    IDEA下使用maven集成Struts2和Spring

  • 填写信息页:
    IDEA下使用maven集成Struts2和Spring

  • 保存成功页:
    IDEA下使用maven集成Struts2和Spring

粗浅理解

虽然没有改动项目代码,但是还是需要理解一下的。对这个项目,我的大致理解如下:
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管理,会方便很多。

搞定!