Java EE框架實(shí)戰(zhàn)開發(fā)教程PPT1第3章_第1頁
Java EE框架實(shí)戰(zhàn)開發(fā)教程PPT1第3章_第2頁
Java EE框架實(shí)戰(zhàn)開發(fā)教程PPT1第3章_第3頁
Java EE框架實(shí)戰(zhàn)開發(fā)教程PPT1第3章_第4頁
Java EE框架實(shí)戰(zhàn)開發(fā)教程PPT1第3章_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

3.1.1Struts2體系結(jié)構(gòu)Struts2的基本流程如下:①Web瀏覽器請(qǐng)求一個(gè)資源。②過濾器Dispatcher查找請(qǐng)求,確定適當(dāng)?shù)腁ction。③攔截器自動(dòng)對(duì)請(qǐng)求應(yīng)用通用功能,如驗(yàn)證和文件上傳等操作。④Action的execute方法通常用來存儲(chǔ)和(或)重新獲得信息(通過數(shù)據(jù)庫)。⑤結(jié)果被返回到瀏覽器,可能是HTML、圖片、PDF或其他。Struts2的體系結(jié)構(gòu)還可以參考圖3.1.1Struts2體系結(jié)構(gòu)

3.1.2工作流程3.1.3安裝與配置Myeclipse2015作為開發(fā)工具,添加Struts2框架的步驟如下:(1)建立一個(gè)Web項(xiàng)目。(2)加載Struts2類庫3.1.3安裝與配置簡(jiǎn)單Struts2實(shí)例1.下載Struts2框架MyEclipse沒有對(duì)Struts2的支持,所以需要用戶自己下載Struts2開發(fā)包。登錄/下載Struts2完整版,本書使用的是最新發(fā)布的Struts。將下載的Zip文件解壓縮,它是一個(gè)典型的Web結(jié)構(gòu)。打開其文件夾,里面包含以下4個(gè)目錄(見圖)。3.1.3安裝與配置2.建立一個(gè)Web項(xiàng)目打開MyEclipse9.0,建立一個(gè)Web項(xiàng)目,命名為“Struts2.0”。3.加載Struts2類庫由于本書使用最新版Struts2.3.1,相比老版本的Struts2需要多加載一些類庫,包括:①

傳統(tǒng)Struts2的5個(gè)基本類庫struts2-core-.jarxwork-core-.jarognl-3.0.3.jarcommons-logging-1.1.1.jarfreemarker-2.3.18.jar②

附加的4個(gè)類庫commons-io-2.0.1.jarcommons-lang-2.5.jarjavassist-3.11.0.GA.jarcommons-fileupload-1.2.2.jar3.1.3安裝與配置一共是9個(gè)類庫,都在圖中Struts2開發(fā)包的lib目錄下,將它們拷貝到項(xiàng)目的\WebRoot\WEB-INF\lib目錄下,然后右擊項(xiàng)目名,選擇【BuildPath】→【ConfigureBuildPath】菜單項(xiàng),出現(xiàn)如圖所示的對(duì)話框。3.2配置文件web.xmlweb.xml文件打開項(xiàng)目中的WebRoot/WEB-INF/web.xml文件,修改其代碼如下:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5" xmlns="/xml/ns/javaee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/javaee /xml/ns/JavaEE/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>3.2配置文件web.xmlStruts2框架就是通過web.xml配置了核心控制器,核心控制器也就是過濾器,對(duì)用戶請(qǐng)求和處理程序響應(yīng)的內(nèi)容進(jìn)行處理。在Struts2中,開發(fā)人員可以自定義過濾器,要求所有過濾器必須實(shí)現(xiàn)java.Serlvet.Filter接口,這個(gè)接口中含有3個(gè)過濾器類必須實(shí)現(xiàn)的方法:init(FilterConfig):Servlet過濾器的初始化方法,Servlet容器創(chuàng)建Servlet過濾器實(shí)例后將調(diào)用這個(gè)方法。doFilter(ServletRequest,ServletResponse,FilterChain):完成實(shí)際的過濾操作,當(dāng)用戶請(qǐng)求與過濾器關(guān)聯(lián)的URL時(shí),Servlet容器將先調(diào)用過濾器的doFilter方法,返回響應(yīng)之前也會(huì)調(diào)用此方法。FilterChain參數(shù)用于訪問過濾器鏈上的下一個(gè)過濾器。destroy():Servlet容器在銷毀過濾器實(shí)例前調(diào)用該方法,這個(gè)方法可以釋放Servlet過濾器占用的資源。3.2配置文件web.xml過濾器類編寫完成后,必須要在web.xml中進(jìn)行配置,格式如下:<filter>

<filter-name>過濾器名</filter-name> <!--自定義的過濾器類,注意,這里要在包下,要加包名--> <filter-class>過濾器對(duì)應(yīng)類</filter-class> <init-param> <!--類中參數(shù)名稱--> <param-name>參數(shù)名稱</param-name> <!--對(duì)應(yīng)參數(shù)的值--> <param-value>參數(shù)值</param-value> </init-param><filter-mapping><filter-name>過濾器名</filter-name><url-pattern>映射規(guī)則</url-pattern></filter-mapping></filter>3.2配置文件web.xml<filter>元素表示對(duì)過濾器進(jìn)行定義。<filter-name>元素是<filter>元素的子元素,表示過濾器的名字,該名字用來對(duì)其具體的類進(jìn)行調(diào)用。<filter-class>元素也是<filter>元素的子元素,表示過濾器具體的類存放的路徑。<init-param>元素表示初始化參數(shù)的定義,其子元素<param-name>表示參數(shù)名稱,<param-value>表示定義的參數(shù)值。<filter-mapping>元素指定讓struts2框架來處理用戶的哪些請(qǐng)求(URL)。子元素<filter-name>表示過濾器的名字,與前面<filter>元素的子元素的名字一致。<url-pattern>表示過濾器的URL映射規(guī)則。過濾器必須和特定的URL關(guān)聯(lián)才能發(fā)揮作用,3.2配置文件web.xml過濾器必須和特定的URL關(guān)聯(lián)才能發(fā)揮作用,過濾器的關(guān)聯(lián)方式有3種:與一個(gè)URL資源關(guān)聯(lián)、與一個(gè)URL目錄下的所有資源關(guān)聯(lián)、與一個(gè)Servlet關(guān)聯(lián)。①

與一個(gè)URL資源關(guān)聯(lián):<filter-mapping> <!--這里與上面配置的名稱要相同--> <filter-name>過濾器名</filter-name> <!--與該URL資源關(guān)聯(lián)--> <url-pattern>xxx.action</url-pattern></filter-mapping>②

與一個(gè)URL目錄下的所有資源關(guān)聯(lián):<filter-mapping> <filter-name>過濾器名</filter-name> <url-pattern>/*</url-pattern></filter-mapping>③

擴(kuò)展名匹配:<filter-mapping> <filter-name>過濾器名</filter-name> <url-pattern>*.action</url-pattern></filter-mapping>案例1.批量設(shè)置請(qǐng)求編碼。為了避免提交數(shù)據(jù)的中文亂碼問題,需要在每次使用請(qǐng)求之前設(shè)置request.setCharacterEncoding(“gb2312”)編碼格式,這樣確實(shí)很麻煩。Filter可以批量攔截修改servlet的請(qǐng)求和響應(yīng)。packagecom;publicclassEncodingFilterimplementsFilter{publicvoidinit(FilterConfigconfig)throwsServletException{}publicvoiddestroy(){}publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{request.setCharacterEncoding("gb2312");chain.doFilter(request,response);}}

web.xml部分代碼<filter><filter-name>EncodingFilter</filter-name><filter-class>com.EncodingFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>案例2.出于信息安全和其他一些原因的考慮,項(xiàng)目中的一些頁面要求用戶滿足了一定條件之后才能訪問。可以用filter控制用戶訪問權(quán)限。packagecom;publicclassSecurityFilterimplementsFilter{publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{HttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;HttpSessionsession=req.getSession();if(session.getAttribute("username")!=null){chain.doFilter(request,response);}else{res.sendRedirect("../failure.jsp");}}web.xml部分代碼<filter><filter-name>SecurityFilter</filter-name><filter-class>com.SecurityFilter</filter-class></filter><filter-mapping><filter-name>SecurityFilter</filter-name><url-pattern>/admin/*</url-pattern></filter-mapping>

3.3配置文件pertiesStruts2提供了很多可配置的屬性,通過這些屬性的設(shè)置,可以改變框架的行為,從而滿足不同的Web應(yīng)用的需求。這些屬性可以在perties文件中進(jìn)行設(shè)置,該文件是struts2框架的全局屬性文件,也是自動(dòng)加載的文件。配置文件perties是標(biāo)準(zhǔn)的Java屬性文件格式,使用“#”號(hào)作為注釋字符,該文件是由一系列的key-value對(duì)組成,每個(gè)key就是一個(gè)struts2的屬性,該key對(duì)應(yīng)的value就是一個(gè)struts2的屬性,該文件位于classpath下,通常放在Web應(yīng)用程序的/WEB-INF/classes目錄下。

3.4配置文件struts.xml配置文件struts.xml是struts2框架的核心配置文件,主要用于配置和管理開發(fā)人員編寫的Action,以及Action包含的result定義、Bean的配置、常量的配置、包的配置和作用于action的攔截器的配置等。該文件通常放在WEB應(yīng)用程序的WEB-INF/classes目錄下,將被Struts2框架自動(dòng)加載。3.4配置文件struts.xmlstruts.xml是一個(gè)XML文件,前部是XML的頭,然后是<struts>標(biāo)簽,位于Struts2配置的最外層,其他標(biāo)簽都是包含在它里面的,如下:<?xmlversion="1.0"encoding="UTF-8"?> //XML頭<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> //<struts>標(biāo)簽 ……</struts>3.4配置文件struts.xml(1)package元素Struts2框架使用包來管理Action和攔截器等,每個(gè)package就是多個(gè)Action、多個(gè)攔截器、多個(gè)攔截器引用的集合,從而簡(jiǎn)化維護(hù)工作,提高了代碼的重用性。package有以下幾個(gè)常用屬性:name(必選):指定包名,這個(gè)名字將作為引用該包的鍵。注意,包的名字必須是唯一的,在一個(gè)struts.xml文件中不能出現(xiàn)兩個(gè)同名的包。extends(可選):允許一個(gè)包繼承一個(gè)或多個(gè)先前定義的包。abstract(可選):將其設(shè)置為true,可以把一個(gè)包定義為抽象的。抽象包不能有action定義,只能作為“父”包被其他包所繼承。namespace(可選):將保存的action配置為不同的名稱空間。(2)命名空間的配置(namespace)Struts2以命名空間的方式來管理Action,主要針對(duì)大型項(xiàng)目Action重名的問題,因?yàn)椴辉谕粋€(gè)命名空間的Action可以使用相同的Action名字,同一個(gè)命名空間不能有同名的Action。

3.4配置文件struts.xml(3)Action元素當(dāng)一個(gè)請(qǐng)求匹配到某個(gè)Action名字時(shí),框架就使用這個(gè)映射來確定如何處理請(qǐng)求。<actionname="struts"class="org.act.StrutsAction"> <resultname="success">/welcome.jsp</result> <resultname="error">/hello.jsp</result></action>在上面代碼中,當(dāng)一個(gè)請(qǐng)求映射到struts時(shí),就會(huì)執(zhí)行該Action配置的class屬性對(duì)應(yīng)的Action類,然后根據(jù)Action類的返回值決定跳轉(zhuǎn)的方向。其實(shí)一個(gè)Action類中不一定只能有execute()方法。如果一個(gè)請(qǐng)求要調(diào)用Action類中的其他方法,就需要在Action配置中加以配置。例如,如果在org.action.StrutsAction中有另外一個(gè)方法為:publicStringfind()throwsException{returnSUCCESS;}那么如果想要調(diào)用這個(gè)方法,就必須在Action中配置method屬性,配置方法為:<!--name值是用來和請(qǐng)求匹配的--><actionname="find"class="org.act.StrutsAction"method="find"> <resultname="success">/welcome.jsp</result> <resultname="error">/hello.jsp</result></action>3.4配置文件struts.xml(4)result元素:一個(gè)result代表一個(gè)可能的輸出。當(dāng)Action類中的方法執(zhí)行完成時(shí),返回一個(gè)字符串類型的結(jié)果代碼,框架根據(jù)這個(gè)結(jié)果代碼選擇對(duì)應(yīng)的result,向用戶輸出。<result

name="邏輯視圖名"

type="視圖結(jié)果類型"/>

<param

name="參數(shù)名">參數(shù)值</param></result>param中的name屬性有兩個(gè)值:① location:指定邏輯視圖。② parse:是否允許在實(shí)際視圖名中使用OGNL表達(dá)式,參數(shù)默認(rèn)為true。3.4配置文件struts.xmlresult中的name屬性有如下值:success:表示請(qǐng)求處理成功,該值也是默認(rèn)值。error:表示請(qǐng)求處理失敗。none:表示請(qǐng)求處理完成后不跳轉(zhuǎn)到任何頁面。input:表示輸入時(shí)如果驗(yàn)證失敗應(yīng)該跳轉(zhuǎn)到什么地方(關(guān)于驗(yàn)證后面會(huì)介紹)。login:表示登錄失敗后跳轉(zhuǎn)的目標(biāo)。3.4配置文件struts.xml

type(非默認(rèn)類型)屬性支持的結(jié)果類型有以下幾種:chain:用來處理Action鏈。chart:用來整合JFreeChart的結(jié)果類型。dispatcher:用來轉(zhuǎn)向頁面,通常處理JSP,該類型也為默認(rèn)類型。freemarker:處理FreeMarker模板。httpheader:控制特殊HTTP行為的結(jié)果類型。jasper:用于JasperReports整合的結(jié)果類型。jsf:JSF整合的結(jié)果類型。redirect:重定向到一個(gè)URL。redirect-action:重定向到一個(gè)Action。stream:向?yàn)g覽器發(fā)送InputStream對(duì)象,通常用來處理文件下載,還可用于返回AJAX數(shù)據(jù)。tiles:與Tiles整合的結(jié)果類型。velocity:處理Velocity模板。xslt:處理XML/XLST模板。plaintext:顯示原始文件內(nèi)容,如文件源代碼。3.4配置文件struts.xml其中,最常用的類型就是dispatcher和redirect-action。dispatcher類型是默認(rèn)類型,通常不寫,主要用于與JSP頁面整合。redirect-action類型用于當(dāng)一個(gè)Action處理結(jié)束后,直接將請(qǐng)求重定向到另一個(gè)Action。如下列配置:…<actionname="struts"class="org.action.StrutsAction"> <resultname="success">/welcome.jsp</result> <resultname="error">/hello.jsp</result></action><actionname="login"class="org.action.StrutsAction"> <resultname="success"type="redirect-action">struts</result></action>…struts.xml文件的基本結(jié)構(gòu)如下所示:<!DOCTYPE

struts

PUBLIC

"-//Apache

Software

Foundation//DTD

Struts

Configuration

2.0//EN"

"/dtds/struts-2.0.dtd">

<struts>

<!--

struts2的action必須放在一個(gè)指定的包空間下定義

-->

<package

name="default"

extends="struts-default">

<action

name="login"

class="org.qiujy.web.struts.action.LoginAction">

<result

name="success">/success.jsp</result>

<result

name="error">/error.jsp</result>

</action>

</package>

</struts>(5)包含配置(include)利用include元素,可以將一個(gè)struts.xml配置文件分割成多個(gè)配置文件,然后在struts.xml中使用include元素引入其他配置文件。比如一個(gè)網(wǎng)上購物程序,可以把用戶配置、商品配置、訂單配置分別放在3

溫馨提示

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

評(píng)論

0/150

提交評(píng)論