Struts2教學
Struts2快速入門
Struts2 MVC架構
Struts2 是什麼?
Struts2 環境配置
Struts2 體系結構
Struts2 Hello World 實例
Struts2 配置文件
Struts2 Action/動作
Struts2 攔截器
Struts2 結果和結果類型
Struts2 值棧/OGNL
Struts2 文件上傳
Struts2 MySQL數據庫訪問
Struts2 發送郵件Email
Struts2 驗證框架
Struts2 基於XML校驗
Struts2 本地化/國際化(i18n)
Struts2 類型轉換
Struts2 主題和模板
Struts2 異常處理
Struts2 註釋
Struts2 註釋類型
Struts2 控件標籤
Struts2 iterator標籤
Struts2 if/else標籤
Struts2 merge標籤
Struts2 append標籤
Struts2 generator標籤
Struts2 數據標籤
Struts2 action標籤
Struts2 include標籤
Struts2 bean 標籤
Struts2 date 標籤
Struts2 param 標籤
Struts2 property 標籤
Struts2 set 標籤
Struts2 text 標籤
Struts2 url標籤
Struts2 表單標籤
Struts2 Ajax 標籤
Struts2和Spring集成
Struts2和Tiles集成
Struts2和Hibernate集成
Struts 2 hello world (XML版本)
Struts2註解示例
Struts2 @ResultPath註釋示例
Struts2 include(包含)多個配置文件
Struts2命名空間配置和解釋
Struts2開發者模式
如何刪除Struts2動作的後綴擴展名
使用Struts2動作
Struts2的ActionError&ActionMessage示例
Struts2模型驅動實例
Struts2映射攔截動作
Struts2重寫攔截器參數
Struts2攔截器棧的例子
Struts2 execAndWait攔截器例子
Struts2 <s:textfield>文本示例
Struts2 <s:password>密碼示例
Struts2 <s:hidden>隱藏值例子
Struts2 <s:textarea>文本域實例
Struts2 <s:radio>單選按鈕例子
Struts2單選預選按鈕值
Struts2 <s:checkbox>複選框例子
Struts2設置多個複選框缺省值
Struts2 <s:checkboxlist>多個複選框例子
Struts2 <s:select>下拉框例子
Struts2自動選擇下拉框的值
Struts2 <s:combobox>組合框的例子
Struts2 <s:head>示例
Struts2文件上傳例子
Struts2上傳多個文件例子
Struts2 <s:doubleselect>示例
Struts2 <s:updownselect>示例
Struts2 <s:optiontransferselect>示例
Struts2 <sx:datetimepicker>示例
Struts2 <sx:autocompleter>自動提示例子
Struts2 autocompleter+JSON例子
Struts2 <s:iterator>迭代器標籤示例
Struts2 if,elseif,else標籤示例
struts2 <s:append>標籤示例
Struts2 <s:generator>標籤示例
Struts2 <s:merge>標籤示例
Struts2 <s:sort>標籤示例
Struts2 <s:subset>標籤示例
Struts2 <s:a>標籤示例
Struts2 <s:action>標籤示例
Struts2 <s:bean>標籤示例
Struts2 <s:date>標籤示例
Struts2 <s:debug>標籤示例
Struts2 <s:include>標籤示例
Struts2 <s:i18n>標籤示例
Struts2 <s:param>標籤示例
Struts2 <s:property>標籤實例
Struts2 <s:push>標籤示例
Struts2 <s:set>標籤示例
Struts2 <s:texttag>標籤示例
Struts2 <s:url>標籤示例
Struts2資源包使用示例
Struts2本地化和國際化
Struts2 key鍵屬性示例
Struts2中文本地化問題
如何配置Struts2全局資源包
Struts2+Spring集成實例
Struts2+Quartz2調度集成實例
Struts2+Hibernate使用Full Hibernate Plugin集成
Struts2+Hibernate集成實例
Struts2+Spring+Hibernate集成實例
Struts2+Log4j集成
Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter有什麼不同?
Struts2獲取HttpServletRequest實例
Struts2獲取HttpServletResponse實例
如何獲取ServletContext對象
Struts2配置Action類的靜態參數
Struts2下載文件實例
Struts2和JSON實例

Struts2+Spring集成實例

在本教程中,我們來學習Struts2和Spring的集成。
Struts2+Spring集成實例

1. 工程結構

下面的圖是本教程的項目文件夾結構。
Struts2+Spring集成實例

2. Spring監聽器

配置Spring監聽器 「org.springframework.web.context.ContextLoaderListener」 到 web.xml 文件中。

web.xml

Struts 2 Web Application struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /\* org.springframework.web.context.ContextLoaderListener

3. 註冊Spring Bean

註冊所有的Spring Beans 配置在 applicationContext.xml 文件中, Spring監聽器會自動找到這個 XML 文件。

applicationContext.xml

<bean id="userBo" class="com.yiibai.user.bo.impl.UserBoImpl" />

<bean id="userSpringAction" class="com.yiibai.user.action.UserSpringAction">
    <property name="userBo" ref="userBo" />    
</bean>

UserBo.java

package com.yiibai.user.bo;

public interface UserBo{

public void printUser();

}

UserBoImpl.java

package com.yiibai.user.bo.impl;

import com.yiibai.user.bo.UserBo;

public class UserBoImpl implements UserBo{

public void printUser(){
    System.out.println("printUser() is executed...");
}

}

UserSpringAction.java

package com.yiibai.user.action;

import com.yiibai.user.bo.UserBo;

public class UserSpringAction{

//DI via Spring
UserBo userBo;

public UserBo getUserBo() {
    return userBo;
}

public void setUserBo(UserBo userBo) {
    this.userBo = userBo;
}

public String execute() throws Exception {

    userBo.printUser();
    return "success";

}

}

4. Struts.xml

在此聲明的所有關係。

<package name="default" namespace="/" extends="struts-default">

    <action name="userAction" 
        class="com.yiibai.user.action.UserAction" >
        <result name="success">pages/user.jsp</result>
    </action>

    <action name="userSpringAction" 
        class="userSpringAction" >
        <result name="success">pages/user.jsp</result>
    </action>

</package>

5. 示例

現在,所有的Struts2和Spring的集成工作已經完成,現在看到下面的用例來訪問 Spring 的 「userBo」 Bean。

  • 用例 1 : 讓 Spring 充當 Struts2的Action類,並訪問Spring的Bean。
  • 用例 2 : 在Struts2的Action類中訪問Spring的Bean。

用例1

在這個例子中,userSpringAction充當Struts2的Action類,也可以使用普通Spring的方式注入Spring的userBo。

//struts.xml

pages/user.jsp

//applicationContext.xml


 

要訪問此操作,請使用網址: http://localhost:8080/struts2spring/userSpringAction.action

用例 2

默認情況下,Spring監聽器啓用 「通過匹配bean的名字自動裝配「。 因此,它會通過setUserBo自動傳遞Spring 「userBo」 Bean 到UserAction。請參閱下面的Struts2動作:

Spring的自動裝配功能可以修改爲  name(默認),  typeauto 或  constructor,  可能需要參考 Struts2的Spring插件文檔

UserAction.java

package com.yiibai.user.action;

import com.yiibai.user.bo.UserBo;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

//DI via Spring
UserBo userBo;

public UserBo getUserBo() {
    return userBo;
}

public void setUserBo(UserBo userBo) {
    this.userBo = userBo;
}

public String execute() throws Exception {

    userBo.printUser();
    return SUCCESS;

}

}

要訪問此操作,請使用網址: http://localhost:8080/struts2spring/userAction.action

Struts2+Spring集成實例

WebApplicationContextUtils
另外,也可以使用Spring 通用  WebApplicationContextUtils  類來直接獲得Spring的bean。

package com.yiibai.user.action;

import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.yiibai.user.bo.UserBo;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

public String execute() throws Exception {

    WebApplicationContext context =
        WebApplicationContextUtils.getRequiredWebApplicationContext(
                                ServletActionContext.getServletContext()
                    );

    UserBo userBo1 = (UserBo)context.getBean("userBo");
    userBo1.printUser();

    return SUCCESS;

}

}

這是一個又長又臭的文章(包教不包會),請下載完整的項目並按照源代碼去一步步實現。

參考

  1. Struts2 Spring 插件文檔
  2. Struts + Spring 集成實例

代碼下載 -  http://pan.baidu.com/s/1dDhqQ5b