在Spring,Hibernate,Struts2三大框架中,居於核心地位的是Spring框架,相對於其他兩個框架來講,Spring扮演一個管理者的角色,它通過注入的方式將struts2以及hibernate中的相關配置納入自己的管理范圍達到簡化struts.xml,hibernate.cfg.xml配置文件以及對Bean實行集中管理的目的。這種管理方式其實與我們經常用到的接口方式十分的相似,他們同樣是先給出抽象,將具體的實現向後延伸,以達到可靈活配置的目的。在本文中主要介紹spring與struts整合使用中的三個比較常用的方面,分別是spring與struts2集成環境的搭建,攔截連的使用和注解方式實現注入的介紹。 一、spring與struts2集成環境的搭建 (1)引入jar包 a.引入struts2(struts-2.2.3)相關jar包 1.commons-fileupload-1.2.2.jar 2.commons-io-2.0.1.jar 3.commons-lang-2.5.jar 4.freemarker-2.3.16.jar 5.javassist-3.11.0.GA.jar 6.ognl-3.0.1.jar 7.struts2-core-2.2.3.jar 8.struts2-spring-plugin-2.2.3.jar 9.xwork-core-2.2.3.jar b.引入Spring(spring-framework-2.5.6)相關jar包 1.aspectjrt.jar 2.aspectjweaver.jar 3.cglib-nodep-2.1_3.jar 4.common-annotations.jar 5.commons-dbcp.jar 6.commons-logging-1.1.1.jar 7.commons-pool.jar 8.spring.jar (2)配置web.xml文件。這裡需要注意的事情是spring的配置文件application.xml文件如果不做相應的路徑配置,tomcat會默認在WEB-INF下進行加載,但是一般情況我們會將所有的配置文件放到一個統一的文件夾中進行管理,所以以一下web.xml配置為例,我們將所有的xml配置文件放在了src下的config文件夾中,所以配置文件中才出現了上下文配置標簽(<param-name>contextConfigLocation</param-name>項)以及<param-value>struts-default.xml,struts-plugin.xml,config/struts.xml</param-value>項,這些都是為了制定配置文件的加載路徑: [html] <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 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"> <display-name>InterceptorTest</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/applicationContext-*.xml</param-value> </context-param> <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> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,config/struts.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> 二、攔截鏈的使用。攔截鏈使用中所要注意的問題是無論是單獨使用攔截器還是使用攔截鏈,一定要在攔截器(或攔截鏈)的後面顯示的調用默認攔截器(或攔截鏈)。以使用攔截鏈為例struts.xml文件中的內容為: [html] <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.action.extension" value=","></constant> <package name="test" namespace="/" extends="struts-default"> <interceptors> <interceptor name="checkInterceptor" class="checkInterceptor"></interceptor> <interceptor-stack name="myInterceptor"> <interceptor-ref name="checkInterceptor"></interceptor-ref> <!-- 一定要調用默認的攔截鏈 --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 用於登錄 --> <action name="login" class="loginAction"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> <result name="checkSession">/checkSession.jsp</result> <interceptor-ref name="myInterceptor"></interceptor-ref> </action> <!-- 清除session --> <action name="delSession" class="delSession"> <result name="back">/login.jsp</result> </action> </package> </struts> 三、注解的使用。注解同樣提供了多態機制,它更類似與接口功能的拓展。通過對配置文件中具體實現類進行配置達到靈活更改的目的。注解的使用同樣遵循相同的映射規律,即使用注解的類的變量名稱一定要與配置文件中的bean name相同,並且首字母小寫。具體如下: [java] package com.action; import java.util.Map; import javax.annotation.Resource; import com.common.CheckIsNull; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.user.User; public class LoginAction extends ActionSupport { //此處為注解的使用處 @Resource private CheckIsNull checkIsNull; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { boolean flag = checkIsNull.IsNull(user.getUsername()); if(flag){ if("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())){ Map session = (Map)ActionContext.getContext().get("session"); session.put("username", user.getUsername()); return "success"; }else{ return "error"; } }else{ System.out.println("用戶名和密碼都不能為空"); return "error"; } } } applicationContextbean.xml配置文件: [html] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" > <!-- Spring管理Struts2的Action --> <bean name="loginAction" class="com.action.LoginAction" scope="prototype"></bean> <bean name="checkInterceptor" class="com.interceptor.MyIntercepor"></bean> <!-- 此處為應用注解的映射方式 --> <bean name="checkIsNull" class="com.common.CheckPassword"></bean> <bean name="delSession" class="com.action.DelSession"></bean> </beans> 以上為在使用Spring集成struts2中攔截鏈和注解的使用以及需要注意的地方。總的來講spring在其中所起的主要作用就是通過映射機制完成注入。