1. 程式人生 > >IDEA下使用maven整合Struts2和Spring

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管理,會方便很多。

搞定!