spring集成struts2

Struts2前身是WebWork,核心并沒有改變,其實就是把WebWork改名為struts2,與Struts1一點關系沒有。

?

Struts2中通過ObjectFactory接口實現創建及獲取Action實例,類似于Spring的IoC容器,所以Action實例可以由ObjectFactory實現來管理,因此集成Spring的關鍵點就是如何創建ObjectFactory實現來從Spring容器中獲取相應的Action Bean。

?

Struts2提供一個默認的ObjectFactory接口實現StrutsSpringObjectFactory,該類用于根據Struts2配置文件中相應Bean信息從Spring 容器中獲取相應的Action。

?

因此Struts2.x與Spring集成需要使用StrutsSpringObjectFactory類作為中介者。

?

接下來讓我們首先讓我們準備Struts2x所需要的jar

準備Struts2.x需要的jar包,到Struts官網http://struts.apache.org/下載struts-2.2.1.1版本,拷貝如下jar包到項目的lib目錄下并添加到類路徑:

?

lib\struts2-core-2.2.1.1.jar ?????????????//核心struts2包

lib\xwork-core-2.2.1.1.jar??? ??????????//命令框架包,獨立于Web環境,為Struts2

//提供核心功能的支持包

lib\freemarker-2.3.16.jar????????????? ?//提供模板化UI標簽及視圖技術支持

lib\ognl-3.0.jar??????????????????? ???//對象圖導航工具包,類似于SpEL

lib\ struts2-spring-plugin-2.2.1.1.jar???? ?//集成Spring的插件包

lib\commons-logging-1.0.4.jar????????? //日志記錄組件包(已有)

lib\commons-fileupload-1.2.1.jar??????? //用于支持文件上傳的包

?

10.3.2? 使用ObjectFactory集成

1、Struts2.x的Action實現:

Java代碼??收藏代碼
  1. ??????
  2. package?cn.javass.spring.chapter10.struts2x.action;??
  3. import?org.apache.struts2.ServletActionContext;??
  4. import?com.opensymphony.xwork2.ActionSupport;??
  5. public?class?HelloWorldAction?extends?ActionSupport?{??
  6. ????private?String?message;??
  7. ????@Override??
  8. ????public?String?execute()?throws?Exception?{??
  9. ????????ServletActionContext.getRequest().setAttribute("message",?message);??
  10. ????????return?"hello";??
  11. ????}??
  12. ????public?void?setMessage(String?message)?{//setter注入??
  13. ????????this.message?=?message;??
  14. ????}??
  15. }??

?

2、JSP頁面定義,使用Struts1x中定義的JSP頁面“webapp/WEB-INF/jsp/hello.jsp”;

?

3、Spring一般配置文件定義(resources/chapter10/applicationContext-message.xml):

在此配置文件中定義我們使用的“message”Bean;

Java代碼??收藏代碼
  1. <bean?id="message"?class="java.lang.String">??
  2. ????<constructor-arg?index="0"?value="Hello?Spring"/>??
  3. </bean>??

?

?

4、Spring Action?配置文件定義(resources/chapter10/hello-servlet.xml):

Java代碼??收藏代碼
  1. <bean?name="helloAction"?class="cn.javass.spring.chapter10.struts2x.action.HelloWorldAction"?scope="prototype">??
  2. ????<property?name="message"?ref="message"/>??
  3. </bean>??

?

Struts2的Action在Spring中配置,而且應該是prototype,因為Struts2的Action是有狀態的,定義在Spring中,那Struts如何找到該Action呢?

?

?

5、struts2配置文件定義(resources/chapter10/struts2x/struts.xml):

Java代碼??收藏代碼
  1. <?xml?version="1.0"?encoding="UTF-8"?>??
  2. <!DOCTYPE?struts?PUBLIC??
  3. ????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.0//EN"??
  4. ????"http://struts.apache.org/dtds/struts-2.0.dtd">??
  5. <struts>??
  6. ????<constant?name="struts.objectFactory"?value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>??
  7. ????<constant?name="struts.devMode"?value="true"/>??
  8. ????<package?name="default"?extends="struts-default">??
  9. ????????<action?name="hello"?class="helloAction">??
  10. ????????????<result?name="hello"?>/WEB-INF/jsp/hello.jsp</result>??
  11. ????????</action>??
  12. ????</package>??
  13. </struts>??
  • struts.objectFactory通過在Struts配置文件中使用常量屬性struts.objectFactory來定義Struts將要使用的ObjectFactory實現,此處因為需要從Spring容器中獲取Action對象,因此需要使用StrutsSpringObjectFactory來集成Spring;
  • <action name="hello"?class="helloAction">:StrutsSpringObjectFactory對象工廠將根據<action>標簽的class屬性去Spring容器中查找同名的Action Bean;即本例中將到Spring容器中查找名為helloAction的Bean。

?

6、web.xml部署描述符文件定義(webapp/WEB-INF/web.xml):

?

6.1、由于Struts2只能使用通用配置,因此需要在通用配置中加入Spring Action配置文件(chapter10/struts2x/struts2x-servlet.xml):

Java代碼??收藏代碼
  1. <context-param>??
  2. ????<param-name>contextConfigLocation</param-name>??
  3. ????<param-value>??
  4. ????????classpath:chapter10/applicationContext-message.xml,??
  5. ????????classpath:chapter10/struts2x/struts2x-servlet.xml??
  6. ????</param-value>??
  7. </context-param>??

?????? Struts2只能在通用配置中指定所有Spring配置文件,并沒有如Struts1自己指定Spring配置文件的實現。

?

6.2、Strut2前端控制器定義,在web.xml中添加如下配置:

Java代碼??收藏代碼
  1. <!--?Struts2.x前端控制器配置開始???-->??
  2. <filter>??
  3. ????<filter-name>struts2x</filter-name>??
  4. ????<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>??
  5. ????<init-param>??
  6. ??????????????<param-name>config</param-name>??
  7. ??????????????<param-value>??
  8. ?????????????????????struts-default.xml,struts-plugin.xml,chapter10/struts2x/struts.xml??
  9. ???????????????</param-value>??
  10. ???????</init-param>??
  11. </filter>??
  12. <filter-mapping>??
  13. ????<filter-name>struts2x</filter-name>??
  14. ????<url-pattern>*.action</url-pattern>??
  15. </filter-mapping>??
  16. <!--?Struts2.x前端控制器配置結束???-->??
  • FilterDispatcherStruts2前端控制器為FilterDispatcher,是Filter實現,不是Servlet;
  • config通過初始化參數config指定配置文件為struts-default.xml,struts-plugin.xml,chapter10/struts2x/struts.xml;如果不知道該參數則默認加載struts-default.xml,struts-plugin.xml,struts.xml(位于webapp/WEB-INF/classes下);顯示指定時需要將struts-default.xml,struts-plugin.xml也添加上。
  • *.action將攔截以“.action”結尾的HTTP請求;
  • struts2xFilterDispatcher前端控制器的名字為struts2x,因此相應的Spring配置文件名為struts2x-servlet.xml。

?

7、執行測試,在Web瀏覽器中輸入http://localhost:8080/hello.action可以看到“Hello Spring”信息說明Struts2集成成功。

?

?

?

集成Strut2也是非常簡單,在此我們總結一下吧:

  • 配置文件位置:

? ? ? ? ?Struts配置文件默認加載“struts-default.xml,struts-plugin.xml, struts.xml”,其中struts-default.xml和struts-plugin.xml是Struts自帶的,而struts.xml是我們指定的,默認位于webapp/WEB-INF/classes下;

? ? ? ? ?如果需要將配置文件放到其他位置,需要在web.xml的<filter>標簽下,使用初始化參數config指定,如“struts-default.xml,struts-plugin.xml,chapter10/struts2x/struts.xml”,其中“struts-default.xml和struts-plugin.xml”是不可省略的,默認相對路徑是類路徑。

  • 集成關鍵ObjectFactory在Struts配置文件或屬性文件中使用如下配置知道使用StrutsSpringObjectFactory來獲取Action實例:

?在struts.xml中指定:

?

Java代碼??收藏代碼
  1. <constant?name="struts.objectFactory"?value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>??

?

或在struts.properties文件(webapp/WEB-INF/classes/)中:

?

java代碼:
Java代碼??收藏代碼
  1. struts.objectFactory=org.apache.struts2.spring.StrutsSpringObjectFactory??

?

  • 集成關鍵Action定義:

? ? ? ? ? ? ? ? StrutsSpringObjectFactory將根據Struts2配置文件中的<action class=””>標簽的classes屬性名字去到Spring配置文件中查找同名的Bean定義,這也是集成的關鍵。

?

?

  • Spring配置文件中Action定義:由于Struts2的Action是有狀態的,因此應該將Bean定義為prototype。

?

如圖10-5,Sturt2與Spring集成的關鍵就是StrutsSpringObjectFactory,注意圖只是說明Struts與Spring如何通過中介者StrutsSpringObjectFactory來實現集成,不能代表實際的類交互。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397826.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397826.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

slqite3庫查詢數據處理方式_SQLite3命令操作大全

SQLite3命令操作大全SQLite庫包含一個名字叫做sqlite3的命令行,它可以讓用戶手工輸入并執行面向SQLite數據庫的SQL命令。本文檔提供一個樣使用sqlite3的簡要說明.一.qlite3一些常用Sql語句操作創建表: create table 表名(元素名 類型,…);刪除表: drop …

Android學習之查看網絡圖片

在這里小編學習了查看網絡圖片的小案例,: 初始界面: 點擊瀏覽后,效果如下: 需要注意的是 該案例需要獲取聯網權限,即: <uses-permission android:name"android.permission.INTERNET"/>具體步驟如下: 1.定義并初始化控件: private EditText etImageUrl;private …

AutoLayout 淺析動畫

1.AutoLayout相關的幾個易混淆的方法 setNeedsLayout layoutIfNeeded layoutSubViews setNeedsUpdateConstraints updateConstraitsIfNeed updateConstraints 子視圖在界面上的顯示大概經過了&#xff1a;更新約束-通過約束依賴關系得到具體的frame-展示到界面。上面幾個是和au…

vue 轉為靜態html,Vue CLI 3使用:HTML和靜態資源(五)

HTMLpublic/index.html 文件是一個會被 html-webpack-plugin 處理的模板。構建中&#xff0c;各種資源路徑會被注入解析。可以使用 lodash template 語法插入內容。用來做不轉義插值&#xff1b;用來做 HTML 轉義插值&#xff1b;用來描述 JavaScript 流程控制。除了被 html-we…

animate css3 應用的借鑒,一個同事寫的JS

$("#banner").height($(window).height()-125);$(window).resize(function(){ $("#banner").height($(window).height()-125);}); //首頁幻燈$(".indeximgs:first").show();var i0;$(".leftbut").click(function(){$(".indexim…

從html導出帶樣式的excel,Jquery導出帶樣式的Excel

工作中做導出的時候&#xff0c;需要導出自定義的表格或嫌棄導出的Excel格式太難看了。需要設置顏色、字號大小、加粗、合并單元格等等。特性&#xff1a;支持過濾 某個位置支持過濾 img 標簽支持過濾 a 標簽支持過濾 input 標簽支持包含 行內樣式。HTML頁面&#xff1a;HTML頁…

elementui from表單提交_elementui upload與form一起提交

學生基本信息管理操作中&#xff0c;有照片&#xff0c;可以上傳也可以不上傳&#xff0c;在表單界面可以修改照片&#xff0c;el-upload控件可以帶額外參數提交&#xff0c;jquery的post模擬不了成表單帶文件提交的方式&#xff0c;因此&#xff0c;判斷如果有上傳文件時&…

information_schema.character_sets 學習

information_schema.character_sets 表用于查看字符集的詳細信息 1、character_sets 常用列說明&#xff1a; 1、character_set_name&#xff1a;    字符集名 2、default_collate_name&#xff1a;    默認排序規則   3、description&#xff1a;         …

asp.net mvc 用Redis實現分布式集群共享Session。

1、這兩天研究Redis搞分布式session問題&#xff0c;網上找的資料都是用ServiceStack.Redis來實現的&#xff0c;但是在做性能測試的時候發現最新的v4版本有限制每小時候最多請求6000次&#xff0c;因為官網開始商業化要收費了&#xff0c;好坑爹的說&#xff0c;還好我前期弄了…

如何用計算機求和,求和計算器

求和計算器您可以使用此求和計算器快速計算預定范圍內某個表達式的序列之和。如何使用求和計算器輸入總和的表達式輸入上限和下限提供表達式中使用的變量的詳細信息單擊“計算”按鈕生成結果。求和Σ符號計算器k ∑n 0變量:nixyzabc 103740支持的運算符常量和函數算術運算符加“…

Zookeeper概述、特點、數據模型

Zookeeper1.Zookeeper概述Zookeeper是一個工具&#xff0c;可以實現集群中的分布式協調服務。所謂的分布式協調服務&#xff0c;就是在集群的節點中進行可靠的消息傳遞&#xff0c;來協調集群的工作。Zookeeper之所以能夠實現分布式協調服務&#xff0c;靠的就是它能夠保證分布…

云計算機創意名,有創意的道路名字推薦,分享一些好聽有內涵的路名

提到龍崗板塊&#xff0c;“風向”一直飄忽不定。原本地鐵4號線今年通車&#xff0c;但是因為五象火車站的規劃建設&#xff0c;暫時未開通;機場線已經敲定&#xff0c;然而沒有龍崗的份…… [本文來自&#xff1a;www.777y.com]雖然機場線暫時無緣(可以期待下)&#xff0c;但是…

250W電源帶i7+GTX1080?

電源的科學: Q1&#xff1a;電源的額定功率是什么&#xff1f;峰值功率又是什么&#xff1f;A1&#xff1a;電源的額定功率就是電源正常工作時的功率&#xff0c;它的值為用電器的額定電壓乘以額定電流。而峰值功率指的是電源短時間內能達到的最大功率&#xff0c; 一般情況下電…

uml里的extend和include_用例圖中包含(include)擴展(extend)和泛化(generalization)關系詳解...

標簽&#xff1a;uml用例圖是解決用戶需求的圖&#xff0c;畫好用例圖一定要理清用例之間的關系。用例之間有三種關系&#xff1a;包含(include)擴展(extend)和泛化(generalization)。下面介紹三者的相同點和不同點以便區分&#xff1a;相同點&#xff1a; 三者都是從現有的用例…

數據庫的數據類型及運算符

一、數據類型 1、整數類形&#xff1a; &#xff08;重點記憶&#xff0c;常用&#xff09;有符號整形&#xff1a;int--每個int類型的數據按4個字節存儲&#xff0c;其中1位表示整數值的正負號&#xff0c;其他31位表示整數值長度和大小&#xff1b; 大整形&#xff1a;bigint…

浙江大學計算機博士很難復試專業課,浙江大學計算機學院2020年博士研究生招生復試公告...

一、復試資格通過計算機學院博士生材料初審的考生獲得復試資格&#xff0c;名單見附件。二、復試內容和成績組成博士研究生的復試內容主要包括對考生思想政治素質和品德、學術水平考核。1&#xff0e; 思想政治素質和道德品質考核思想政治素質和品德考核是博士研究生招生復試的…

推薦幾款熱門的敏捷開發工具

不知道有多少企業在很好的應用敏捷模式&#xff1b; 在今天的文章中&#xff0c;我們將一同了解更多有趣、高效且面向敏捷的項目管理工具。 Atlassian Jira/ Jira Agile   Atlassian的Jira是一款熱門工具&#xff0c;用于追蹤產品開發、幫助團隊組織問題、分配工作并保證團隊…

語言語法糖_【c#】幾種常用語法糖

語法糖&#xff08;syntactic sugar&#xff09;是由英國計算機科學家Peter J. Landin發明的術語&#xff0c;指計算機語言中添加的某種語法。這種語法不影響語言的功能&#xff0c;但更方便使用。在開發中使用語法糖能夠讓程序變得更短&#xff0c;使看起來更美觀些~空檢查pub…

CodeForces 696B Puzzles

思維&#xff0c;簡單樹$dp$。 首先計算出每一個子樹包含多少個節點&#xff0c;記為$f[i]$。然后就可以從$root$開始推出所有節點的期望了。 現在已知$fa$節點的答案為$ans[fa]$&#xff0c;假設要計算$fa$的一個兒子$v$的期望&#xff0c;那么$ans[v]ans[fa]1.0(f[fa]-f[v]-1…

2018清華計算機類專業錄取分數線,清華大學2018年各省錄取分數線及各專業錄取分數線 - 高教網...

【一批錄取分數線】港澳臺聯招&#xff1a;630分安徽&#xff1a;理科689分&#xff1b;文科675分&#xff1b;理科定向683分北京&#xff1a;理科694分&#xff1b;文科677分福建&#xff1a;理科681分&#xff1b;文科650分甘肅&#xff1a;理科652分&#xff1b;文科637分廣…