第5章 Struts 2框架入門_第1頁
第5章 Struts 2框架入門_第2頁
第5章 Struts 2框架入門_第3頁
第5章 Struts 2框架入門_第4頁
第5章 Struts 2框架入門_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第5章Struts2框架入門5.2Struts2概覽5.3Struts2基礎(chǔ)5.1MVC框架5.4值棧與OGNL表達(dá)式5.5Struts2的標(biāo)簽庫5.1MVC框架5.1.2MVC設(shè)計(jì)模式5.1.3Struts2框架的MVC架構(gòu)5.1.1Model

1與Model

2返回5.1.1Model

1與Model

2(1)Model1Model1是在早期廣泛使用的一個(gè)模型。在Model1體系中,所有的HTTP請求都被直接發(fā)送到JSP文件中,JSP文件獨(dú)自響應(yīng)請求并將處理結(jié)果返回給用戶(所有的數(shù)據(jù)存取是由與JSP文件交互的Bean來實(shí)現(xiàn)的)。對于簡單的應(yīng)用開發(fā)而言,使用Model1是一個(gè)不錯(cuò)的選擇,但是它卻不能滿足復(fù)雜的大型應(yīng)用程序的實(shí)現(xiàn)。這是因?yàn)樵陂_發(fā)一個(gè)大型的應(yīng)用程序時(shí),使用Model1可能會導(dǎo)致JSP頁面內(nèi)被嵌入大量的腳本片段或Java代碼,特別是當(dāng)需要處理的請求量很大時(shí),情況更為嚴(yán)重。對于網(wǎng)頁設(shè)計(jì)人員和維護(hù)人員來說,這簡直就是災(zāi)難,因?yàn)轫?xiàng)目的開發(fā)和管理勢必會因此而變得越來越困難。

5.1.1Model

1與Model

2(2)Model2Model2和Model1有一些不同。在Model2體系中,采用JSP與Servlet結(jié)合的方式來實(shí)現(xiàn)對用戶請求的處理,使用Servlet充當(dāng)控制器,使用JSP生成視圖界面。Servlet的任務(wù)是負(fù)責(zé)管理對請求進(jìn)行處理,以及創(chuàng)建JSP頁面需要使用的Bean和對象,同時(shí)根據(jù)用戶的請求將相應(yīng)的JSP頁面響應(yīng)給客戶端。JSP頁面則是負(fù)責(zé)檢索原先由Servlet創(chuàng)建的對象或Bean,從Servlet中提取動(dòng)態(tài)內(nèi)容插入靜態(tài)模板,它不負(fù)責(zé)處理業(yè)務(wù)邏輯。Model2的優(yōu)點(diǎn)就是它清晰地分離了表達(dá)和內(nèi)容,明確了角色的定義,以及開發(fā)者與網(wǎng)頁設(shè)計(jì)者的分工。返回5.1.2MVC設(shè)計(jì)模式MVC組成 VC英文為Model-View-Controller,即把一個(gè)應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個(gè)應(yīng)用被分成3個(gè)層:模型層、視圖層和控制層,從而可以使同一個(gè)應(yīng)用程序使用不同的表現(xiàn)形式。原理

返回5.1.3Struts2框架的MVC架構(gòu)(1)Struts2中的MVCMVC架構(gòu) Struts2框架是一個(gè)基于MVC架構(gòu)的框架,它的MVC架構(gòu)如下圖所示。

5.1.3Struts2框架的MVC架構(gòu)(2)架構(gòu)模式前端控制器模式

Struts2框架接收以“*.action”結(jié)束的請求,并對該請求進(jìn)行處理。

頁面控制器模式頁面將直接請求指定的模型(Action),主要通過在JSP頁面中使用<s:action/>標(biāo)簽來實(shí)現(xiàn)返回5.2Struts2概覽5.2.2Struts2的簡單應(yīng)用5.2.1Struts2的工作流程返回5.2.1Struts2的工作流程工作流程

Struts2框架作為一個(gè)表示層的框架,主要用于處理應(yīng)用程序與客戶端交互問題。Struts2框架的基本工作流程如下圖所示。返回5.2.2Struts2的簡單應(yīng)用(1)使用Struts2框架開發(fā)一個(gè)簡單的Web應(yīng)用程序

(1)創(chuàng)建一個(gè)Web應(yīng)用工程,工程的目錄結(jié)構(gòu)如下圖所示。5.2.2Struts2的簡單應(yīng)用(2)(2)實(shí)現(xiàn)Action類publicclassHelloAction{ privateStringmessage; //用于封裝HTTP請求參數(shù)的屬性

publicStringgetMessage(){ returnmessage; } publicvoidsetMessage(Stringmessage){

this.message=message; } publicStringexecute(){ //處理用戶請求

if((this.message.equals(""))||(this.message==null)){ message="請輸入問候語"; } return"success"; }}5.2.2Struts2的簡單應(yīng)用(3)(3)配置Action類 創(chuàng)建完Action類以后還需要將其在“struts.xml”文件中進(jìn)行配置,它用于配置Action的實(shí)現(xiàn)類、邏輯視圖和物理視圖之間的映射關(guān)系<?xmlversion="1.0"encoding="GBK"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> <packagename="com"extends="struts-default"> <actionname="hello"class="com.struts2.hello.HelloAction"> <resultname="success">/hello.jsp</result> </action> </package></struts>5.2.2Struts2的簡單應(yīng)用(4)(4)視圖頁面的實(shí)現(xiàn)

<%@pagelanguage="java"pageEncoding="gbk"%><%@taglibprefix="s"uri="/struts-tags"%><html> <head> <title>問候程序</title> </head> <body> <s:propertyvalue="message"/> <s:formaction="hello"> <s:textfieldname="message"label="問候語"value=""/> <br> <s:submitvalue="提交"/> </s:form> </body></html>5.2.2Struts2的簡單應(yīng)用(5)(5)配置web.xml文件 在“web.xml”文件中配置Struts2的核心攔截器<filter> <filter-name>Struts2Filter</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class></filter><filter-mapping> <filter-name>Struts2Filter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>返回5.3Struts2基礎(chǔ)5.3.2結(jié)果與視圖5.3.3struts.xml的配置5.3.1Action詳解

返回5.3.1Action詳解(1)在Struts2應(yīng)用程序中,Action負(fù)責(zé)具體的業(yè)務(wù)邏輯處理,它是整個(gè)應(yīng)用的核心所在。Action可以以多種形式存在:普通的Java類實(shí)現(xiàn)Action接口繼承ActionSupport1.普通的Java類無參數(shù)的execute()方法:用于處理用戶請求。私有屬性及其屬性的set、get方法:Action類中封裝HTTP請求參數(shù),因此私有屬性的名稱應(yīng)和HTTP請求參數(shù)的名稱保持一致;程序通過屬性的set、get方法來處理請求參數(shù),所以必須提供屬性的set、get方法。5.3.1Action詳解(2)2.實(shí)現(xiàn)Action接口Struts2提供了一個(gè)名為“com.opensymphony.xwork2.Action”的接口,開發(fā)人員在創(chuàng)建Action類時(shí)可實(shí)現(xiàn)該接口,3.繼承ActionSupport類Struts2除了提供Action接口外,還提供了一個(gè)名為“com.opensymphony.xwork2.ActionSupport”的類,該類實(shí)現(xiàn)了Action接口、Validateable接口、ValidationAware接口、TextProvider接口和LocaleProvider接口并提供了用于處理輸入校驗(yàn)、訪問國際化資源包等不同的方法。5.3.1Action詳解(3)在Action中訪問ServletAPI通過ActionContextActionContext

ctx=ActionContext.getContext(); //獲取一個(gè)ActionContext實(shí)例Mapsession=ctx.getSession(); //獲取SessionMapapplication=ctx.getApplication(); //獲取Application5.3.1Action詳解(4)通過實(shí)現(xiàn)*Aware()接口 publicclassTestimplementsSessionAware{ privateMapsession; privateUseruser; publicvoidsetSession(Mapsession){ //獲取Session

this.session=session; } publicStringexecute()throwsException{ if(user!=null){

session.put("user",user); return"success"; }else{ return"error"; } } } 返回5.3.2結(jié)果與視圖(1)在Struts2應(yīng)用程序中,所有的Action類在處理完成之后返回的都是一個(gè)字符串類型的結(jié)果,這個(gè)結(jié)果作為一個(gè)邏輯視圖而存在。Struts2框架正是通過這個(gè)字符串,在“struts.xml”配置文件中將邏輯視圖與物理視圖建立起映射關(guān)系,而這一實(shí)現(xiàn)是由<result>元素來聲明的。<actionname="Action名稱"class="Action類路徑"method="方法名"> <resultname="邏輯視圖名稱"type="結(jié)果類型"> <paramname="參數(shù)名稱">參數(shù)值</param> </result></action>5.3.2結(jié)果與視圖(2)<result>元素包含兩個(gè)屬性name和type,其中name屬性指定了邏輯視圖名稱,type屬性指定了結(jié)果類型。常用的類型如下表所示:5.3.2結(jié)果與視圖(3)常用的結(jié)果類型:1.請求轉(zhuǎn)發(fā)(dispatcher)請求轉(zhuǎn)發(fā)只能將請求轉(zhuǎn)發(fā)至同一個(gè)Web應(yīng)用。利用請求轉(zhuǎn)發(fā)瀏覽器的址欄不會發(fā)生變化。利用請求轉(zhuǎn)發(fā)調(diào)用者與被調(diào)用者之間共享相同的Request對象和Response對象,他們屬于同一個(gè)訪問的請求和響應(yīng)。2.重定向(redirect) 重定向分為兩種情況:一種是生成一個(gè)全新的請求,另一種是重定向到另一個(gè)Action。重定向不僅可以指定到一個(gè)Web應(yīng)用,還能夠指定到任何JSP資源。重定向的訪問結(jié)束后,瀏覽器的地址欄中顯示URL的變化。5.3.2結(jié)果與視圖(4)重定向的調(diào)用者與被調(diào)用者使用各自的Request對象和Response對象,他們屬于兩個(gè)獨(dú)立的訪問請求和響應(yīng)過程。

對于重定向結(jié)果的類型,可以在<result>元素中設(shè)置兩個(gè)參數(shù):“l(fā)ocation”和“parse”。location:指定重定向的地址。parse:指定在location參數(shù)中是否使用OGNL表達(dá)式,它的默認(rèn)值是“true”。通過過該參數(shù)的使用,系統(tǒng)會對結(jié)果配置信息中的OGNL表達(dá)式進(jìn)行解析、運(yùn)算,并用運(yùn)算結(jié)果替換掉原有OGNL表達(dá)式。

重定向示例代碼:<actionname="hello"class="com.struts2.hello.HelloAction"> <resultname="success"type="redirect"> <paramname="location">/show.action?arg="${message}"</param> <paramname="parse">true</param> </result></action>5.3.2結(jié)果與視圖(5)3.Action鏈(chain) 當(dāng)一個(gè)Action執(zhí)行完成后需要直接跳轉(zhuǎn)到另一個(gè)Action,此時(shí)就要用到Action鏈。通過Action鏈的使用,可以輕松實(shí)現(xiàn)兩個(gè)Action之間的數(shù)據(jù)共享。在Struts2中,Action鏈?zhǔn)峭ㄟ^一個(gè)叫做“chain”的攔截器實(shí)現(xiàn)的。返回5.3.3struts.xml的配置struts.xml文件是Struts2應(yīng)用中的一個(gè)核心配置文件,它是程序整個(gè)運(yùn)行流程的依據(jù),Struts2正是根據(jù)這個(gè)文件所配置的信息才知道處理什么程序、什么時(shí)候處理、如何進(jìn)行處理等。返回5.4值棧與OGNL表達(dá)式(1)值棧值棧中存儲的對象主要包括以下4種類型:臨時(shí)對象(TemporaryObject):該對象是在程序執(zhí)行過程中,由容器自動(dòng)創(chuàng)建并存儲到值棧中的。臨時(shí)對象的值并不固定,會隨著應(yīng)用不同而發(fā)生變化。當(dāng)應(yīng)用結(jié)束時(shí),該對象會被清空。比如當(dāng)在頁面中利用Struts2標(biāo)簽輸出迭代的值時(shí),這些值都將以臨時(shí)對象的形式存放到值棧中。模型對象(ModelObject):該對象僅在Action使用模型驅(qū)動(dòng)方式傳值的時(shí)候被用到。如果某個(gè)Action中應(yīng)用了模型驅(qū)動(dòng)(model-driven),當(dāng)Action被請求時(shí),“modeldriven”攔截器會自動(dòng)從此Action中獲得模型對象,并將所獲得的對象放置在值棧中對應(yīng)Action對象的上面。當(dāng)JSP頁面需要用到這些對象所攜帶數(shù)據(jù)時(shí),也會到值棧去找對應(yīng)模型對象,獲取數(shù)值。Action對象(ActionObject):當(dāng)每個(gè)Action請求到來的時(shí)候,容器都會先創(chuàng)建一個(gè)此Action的對象并存入值棧,該對象攜帶所有與Action執(zhí)行過程有關(guān)的信息。命名對象(NamedObjects):主要包括Servlet作用范圍內(nèi)相關(guān)的對象信息,比如Request、Session、Application等。5.4值棧與OGNL表達(dá)式(2)值棧中對象的存儲順序如圖所示OGNL表達(dá)式OGNL全稱是Object-GraphNavigationLanguage,意思是圖對象導(dǎo)航語言,它是表達(dá)式語言的一種。OGNL的功能非常強(qiáng)大,它通過簡單一致的語法,可以任意存取對象的屬性或者調(diào)用對象的方法,并能夠遍歷整個(gè)對象的結(jié)構(gòu)圖,實(shí)現(xiàn)對象屬性字段的類型轉(zhuǎn)化.Struts2中的很多地方都要用到OGNL表達(dá)式,比如Struts2的標(biāo)簽、Struts2的校驗(yàn)文件等。1.使用OGNL訪問JavaBean在OGNL中使用“.”對導(dǎo)航圖進(jìn)行遍歷,例如“randfather.father.child”這種形式5.4值棧與OGNL表達(dá)式(3)2.訪問應(yīng)用上下文 OGNL通過“#”對應(yīng)用上下文進(jìn)行訪問。3.訪問集合元素5.4值棧與OGNL表達(dá)式(4)對Map的訪問:返回5.5Struts2的標(biāo)簽庫5.5.2數(shù)據(jù)標(biāo)簽5.5.3表單標(biāo)簽5.5.1控制標(biāo)簽返回5.5.4非表單UI標(biāo)簽5.5.1控制標(biāo)簽控制標(biāo)簽主要用于控制輸出流程以及訪問值棧中的值。包括:if/elseif/else標(biāo)簽:用于完成分支控制。 <!--定義一個(gè)名稱為score的屬性并賦值70--> <s:setname="score"value="70"></s:set> <s:iftest="#score>80">成績優(yōu)秀</s:if> <s:elseiftest="#score>60">成績及格</s:elseif> <s:else>成績不及格</s:else>iterator標(biāo)簽:用于迭代輸出集合中的元素,包括List、Set和數(shù)組。 <s:iteratorid="season"value="{'春天','夏天','秋天','冬天'}"> <s:propertyvalue="season"/> </s:iterator>返回5.5.2數(shù)據(jù)標(biāo)簽(1)數(shù)據(jù)標(biāo)簽:用于對數(shù)據(jù)進(jìn)行相關(guān)操作,例如將數(shù)據(jù)存入值?;蛘邚闹禇V腥〕鰯?shù)據(jù)。包括:bean標(biāo)簽:用于創(chuàng)建一個(gè)JavaBean實(shí)例,在其標(biāo)簽體中可以用<s:param>標(biāo)簽對JavaBean實(shí)例的參數(shù)賦值。 <s:beanname="com.domain.Dog"id="dog"> <s:paramname="name"value="'大黃'"/> <s:paramname="age"value="5"/>

狗的名字:<s:propertyvalue="name"/>

狗的年齡:<s:propertyvalue="age"/> </s:bean> 在bean標(biāo)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論