版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Struts培訓(xùn)教程1概述在這份教程中,我將介紹struts框架和與struts框架有關(guān)的技術(shù)。該教程主要分為以下幾部分:MVC模式Struts的概念和體系結(jié)構(gòu)Struts中主要技術(shù)的介紹用jBuilder8開發(fā)struts應(yīng)用程序2MVC模式所謂的MVC模式,即模型一視圖一控制器(modelview-controller)模式。其結(jié)構(gòu)圖如下:ModelModel端在MVC中,模型是執(zhí)行某些任務(wù)的代碼,而這部分代碼并沒有任何邏輯決定它對用戶端的表示方法。Model只有純粹的功能性接口,也就是一系列的公開方法,通過這些公開方法,便可以取得模型端的所有功能。在struts框架中,Model端是用A
2、ction和EJB技術(shù)實現(xiàn)的。View端在MVC模式里,一個Model可以有幾個View端,而實際上復(fù)數(shù)的View端是使用MVC的原始動機。使用MVC模式可以允許多于一個的View端存在,并可以在需要的時候動態(tài)的登記上所需要的View.Controller端MVC模式的視圖端是與MVC的控制器結(jié)合使用的。當(dāng)用戶端與相應(yīng)的視圖發(fā)生交互時,用戶可以通過視窗更新模型的狀態(tài),而這種更新是通過控制器端進行的??刂破鞫送ㄟ^調(diào)用模型端的方法更改其狀態(tài)值。與此同時,控制器端會通知所有的登記了的視圖刷新顯示給用戶的表示。在現(xiàn)在的j2ee應(yīng)用中,我們在開發(fā)webserver時基本上都是采用MVC模式來開發(fā)的,j2
3、ee規(guī)范也相應(yīng)的為我們提供了技術(shù)支持,請看下圖:1瀏覽器用戶執(zhí)行servlet的doGet方法;2 servlet根據(jù)不同的請求,將他們分發(fā)到不同的Action中。在這里,servlet的作用就好比是controller;3 Action調(diào)用EJB層的商務(wù)邏輯程序處理用戶的請求;4 EJB層返回給Action處理結(jié)果;5 Action對將處理結(jié)果返回給servlet。在這里,可以將Action和EJB共同看成是model6 servlet將信息發(fā)送給JSP頁面。這里的JSP就相當(dāng)于view;7 browser用戶瀏覽JSP頁面;大家可以看到,JSP、servlet和EJB各自在MVC模式中所起
4、到的作用。使用MVC的優(yōu)點如下:可靠性(Reliability):將表示層和處理層完全分開,可以在不重新編譯model和controller的情況下修改view層。復(fù)用性和適應(yīng)性(reuse&adaptability):MVC使你可以使用多種view去訪問相同的model??焖匍_發(fā)(Rapiddeployment):因為MVC清晰的將表示層和處理層分開,所以使得不同的程序員可以各司其則,增加開發(fā)速度??删S護性(Maintainability):清晰的分層同樣使得代碼清晰、程序的可維護性提高。3Struts的概念和體系結(jié)構(gòu)概述struts源自于apache的jakarta工程,是一個開源
5、代碼工程(/)?,F(xiàn)在struts最新的版本是1.2,而jBuilder自帶的版本是1.02。struts是一個完全遵照MVC模型設(shè)計的,web層的框架。struts與MVC模式struts是一個完全遵照MVC模型設(shè)方t的,web層的框架。在struts中,使用到了jsp、javabean、taglib和servlet技術(shù)。下圖是一個描述了struts框架的應(yīng)用請求的執(zhí)行路徑:Figure1J:TheStmtsimplementationof(heMVC這個過程大體可以被分成5個基本步驟:1 view發(fā)起一個請求2 ActionServlet(se
6、rvlet技術(shù)實現(xiàn))接受這個請求,它根據(jù)一份xml文件來得到處理這個請求的Action對象,并將請求發(fā)送給這個Action對象。3 Action對象接受這個請求,并調(diào)用model(EJB)去處理這個請求,并將處理結(jié)果返回給ActionServlet。4 ActionServlet根據(jù)Action的返回結(jié)果中的信息,決定將處理結(jié)果返回給對應(yīng)的view。5 view得到處理結(jié)果,并將他顯示給用戶。3.1 THEMODELStruts框架提供Action作為model的一種實現(xiàn)。Action是繼承org.apache.struts.action.Action的類,他用來處理用戶的請求,并將處理結(jié)果封
7、裝在HttpServletRequest中,返回給ActionServlet。3.2 THEVIEWStruts用JSP、taglib和javabean技術(shù)去實現(xiàn)view。JSP用來顯示視圖;struts通過使用自己定義的一組taglib來控制請求的流程、輔助處理結(jié)果的顯示;javabean用來保存用戶在JSP頁面中的輸入數(shù)據(jù),他用來方便的向Action傳遞用戶輸入數(shù)據(jù)。3.3 THECONTROLLERStruts用org.apache.struts.action.ActionServlet去實現(xiàn)controller的功能。這個servlet接收所有JSP頁面發(fā)送的請求,根據(jù)一份配置文件得到
8、處理相應(yīng)用戶請求的Action,并調(diào)用Action去處理用戶的請求。當(dāng)Action處理結(jié)束后,ActionServlet接受處理結(jié)果,并根據(jù)同樣的配置文件將處理結(jié)果發(fā)送當(dāng)相應(yīng)的JSPM面。4Struts主要技術(shù)介紹4.1 相關(guān)技術(shù)學(xué)習(xí)Struts,首先要了解一下以下相關(guān)技術(shù)。(有些部分只提供相關(guān)的資料鏈接,不做講解)。4.1.1 JavaBeans大多數(shù)JavaBeans是由JavaBeans來編寫的. TheJavaBeansComponentArchitectureD,includingalinktodownloadtheJavaBeans1.01Specification TheJava
9、BeanTrailintheJavaTutorial JavaBeansComponentsinJSPPagesintheJavaWebServicesTutorial4.1.2 反射和內(nèi)省反射機制是一種決定一個對象哪些成員域和成員方法被采用的過程。內(nèi)省技術(shù)是反射機制的一種特殊機制,Structs使用內(nèi)省技術(shù)轉(zhuǎn)換HTTP參數(shù)為JavaBean的屬性,讀取JavaBean屬性裝配HTML字段。 TheReflectionTrail Chapter8oftheJavaBeansAPISpecification4.1.3 屬性文件和ResourceBundles 屬性文件屬性文件主要用
10、來設(shè)置程序?qū)傩裕瑢傩晕募暮缶Y名為.properties,屬性文件的格式類似于以下內(nèi)容:book=mycomputerbookpages=120authors=zhfseminar=使用屬性文件java.util包中Properties類用來管理一個Key/value對,Properties類提供了以下方法:load()方法:Loadingkey/valuepairsintoaPropertiesobjectformaStream從一個輸入流中加載getProperty()方法:Retrievingavaluefromitskey通過關(guān)鍵字來獲得值list()方法:Listi
11、ngthekeysandtheirvalues歹!J舉Save(T法:Savingthepropertiestoastream保存屬性具體例子如下importjava.util.*;importjava.io.*;publicclassusePropertiespublicstaticvoidmain(Stringargs)tryPropertiesdefaultProps=newProperties();FileInputStreamfile=newFileInputStream("perties");defaultProps.load(file);fil
12、e.close();defaultProps.list(System.out);System.out.println("getProperty(Stringkey,Stringdefault)="+defaultProps.getProperty("book");FileOutputStreamout=newFileOutputStream("appProperties");defaultProps.store(out,"nocomment-");out.close();catch(Exceptione)e.pri
13、ntStackTrace(); 使用本地化數(shù)據(jù)使用本地化數(shù)據(jù),需要建立多個屬性文件,假設(shè)我們系統(tǒng)中需要支持德文和法文,我們的默認(rèn)屬性文件為LabelsBperties文件,那么我們需要建立彳惠文和法文所對應(yīng)的屬性文件:LabelBundle_pertiesLabelBundle_perties# LabelsBperties內(nèi)容s1=computers2=disks3=monitors4=keyboard# LabelsBundle_perties內(nèi)容si=Computers2=Plattes3=Monito
14、rs4=Tastatur# LabelsBundle_perties內(nèi)容si=Computerfrs2=Plattefrs3=Monitorfrs4=Tastaturfr ResoureBundle和Locale通過ResourceBundle結(jié)合Locale對象可以選擇屬性文件:下面我們給一個具體的例子importjava.util.*;importjava.io.*;publicclassResourceBundleDemopublicstaticvoidmain(String口args)采用了德國設(shè)置LocalecurrentLocal=Locale.GERMA
15、N;ResourceBundlelabels=ResourceBundle.getBundle("LabelsBundle”,currentLocal);StringmyValue=labels.getString("s2”);System.out.println("Local=GERMAN;S2="+myValue);采用了法國設(shè)置currentLocal=Locale.FRENCH;labels=ResourceBundle.getBundle("LabelsBundle",currentLocal);myValue=labels
16、.getString("s2”);System.out.println("Local=FRENCH;S2="+myValue);)更多的內(nèi)容可以查看: UsingPropertiestoManageProgramAttributesinTheJavaTutorial AbouttheResourceBundleClassintheJavaTutorial4.1.4JSP和JSP標(biāo)簽庫Jsp中提供了一些標(biāo)準(zhǔn)的標(biāo)簽:useBean,setProperty/getProperty,include,forward,plugin使用例子如:<jsp:useBeanid
17、="bookname"scope="page'class="test.book'7>這些標(biāo)準(zhǔn)的標(biāo)簽,為操作JavaBean和相應(yīng)請求等提供便利,除此之外,JSP技術(shù)允許我們自己封裝特有的標(biāo)簽,來簡化應(yīng)用程序開發(fā)。有經(jīng)驗的開發(fā)者可以利用標(biāo)簽處理表單,訪問數(shù)據(jù)庫或其他企業(yè)服務(wù)(如e-mail或目錄服務(wù)等)。 標(biāo)簽的主要技術(shù)可以在JSP頁面中設(shè)置標(biāo)簽的參數(shù)。可以訪問JSP頁面中所有的對象??梢垣@得JSP頁面的Response對象。標(biāo)簽之間互相通訊。標(biāo)簽可以被嵌套,實現(xiàn)標(biāo)簽的多層使用。 標(biāo)簽的使用為了能夠在jsp
18、頁面中使用一個標(biāo)簽,我們需要變現(xiàn)一個實現(xiàn)了TagSupport類的java程序,然后通過tld文件,定義該標(biāo)簽的屬性,然后通過web.xml聲明這個tld文件,最后才可以在JSP頁面中使用標(biāo)簽的。下面我還是根據(jù)例子來簡單講一下詳Z田代碼下src/taguse目錄下。.1 定制標(biāo)簽類packagecom.zhfelva.tag;importjavax.servlet.jsp.*;importjavax.servlet.jsp.tagext.*;importjava.io.*;/*一個顯示當(dāng)前時間的標(biāo)簽*/publicclassCurrentTimeTagextendsTagSupp
19、ortpublicintdoStartTag()tryJspWriterout=pageContext.getOut();java.util.Datedt=newjava.util.Date(System.currentTimeMillis();out.print(dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds();catch(IOExceptionioe)System.out.println("ErrorinCurrentTimeTag:"+ioe);return(SKIP_B
20、ODY);.2 編寫標(biāo)簽定義文件放于WEB-INFtaglibmytaglib.tld<?xmlversion="1.0"encoding="ISO-8859-1"?><!DOCTYPEtaglibPUBLIC"-/SunMicrosystems,Inc./DTDJSPTagLibrary1.1/EN""<!-ataglibrarydescriptor-><taglib><tlibversion>1.0</tlibversion><jspv
21、ersion>1.1</jspversion><shortname>currenttime</shortname><uri></uri><info>Ataglibraryforshowcurrenttime</info><tag><name>CurrentTime</name><tagclass>com.zhfelva.tag.CurrentTimeTag</tagclass><bodycontent>EMPTY</bodyco
22、ntent><info>showcurrenttime</info></tag></taglib>.3 在web.xml中進行配置一個網(wǎng)頁應(yīng)用程序要在web.xml中聲明他要使用的標(biāo)簽庫:<?xmlversion="1.0"encoding="gb2312"?><!DOCTYPEweb-appPUBLIC"-/SunMicrosystems,Inc./DTDWebApplication2.3/EN""<web-app><t
23、aglib><taglib-uri>my-taglib</taglib-uri><taglib-location>/WEB-INF/taglib/mytaglib.tld</taglib-location></taglib></web-app>.4 簡單標(biāo)簽的使用以上配置做好之后,就可以在JSP頁面中使用標(biāo)簽了:currenttime.jsp< %pagecontentType="text/html;charset=gb2312"%>< %tagliburi=&qu
24、ot;my-taglib"prefix="mytag"%><HTML><HEAD>< TITLE>顯示當(dāng)前時間-JSP/TagLib</TITLE></HEAD><BODY>< H1>顯示當(dāng)前時間-JSP/TagLib</H1><mytag:CurrentTime/></BODY></HTML>也顯示當(dāng)前時間-J5P/Tagliti-Mozilla文件(日編輯(日查看9轉(zhuǎn)到叵)書箋(中工具(工)窗口(緲幫助(H)G主頁瞰/直貼組
25、織,最新版本/最新中文版本/建造全球最為顯示當(dāng)前時間-JSP/TagLib11:51:6滁皿、,函苜完成一畫臥Struts中真正將標(biāo)簽庫應(yīng)用了起來,大家可以從中看到標(biāo)簽庫的強大功能。更多的內(nèi)容可以查看: TheJavaServerPagesT TheJSP1.1and1.2S JavaServerPagesTechnologyintheJavaWebServicesTutorialcCustomTagsinJSPPagesintheJavaWebServicesTutorial4.1.5XML相關(guān)技術(shù)XML技術(shù),由于時間關(guān)系,這里,相關(guān)的內(nèi)容非常多,而且很重要,相信大家也都熟悉這里就不做講述了
26、。4.2主要技術(shù)4.2.1 Struts體系結(jié)構(gòu)HTTPActionStruts體系圖控制:通過Struts體系圖大家可以看到有一個XML文件Struts-config.xml,與之相關(guān)聯(lián)的是Controller,在Struts中,承擔(dān)MVC中Controller角色的是一個Servlet,叫ActionServletoActionServlet是一個通用的控制組件。這個控制組件提供了處理所有發(fā)送到Struts的HTTP請求的入口點。它截取和分發(fā)這些請求到相應(yīng)的動作類(這些動彳類都是Action類的子類)。另外控制組件也負(fù)責(zé)用相應(yīng)的請求參數(shù)填充ActionFrom(通常稱之為FromBean)
27、,并傳給動作類(通常稱之為ActionBean)。動作類實現(xiàn)核心商業(yè)邏輯,它可以訪問javabean或調(diào)用EJB。最后動作類把控制權(quán)傳給后續(xù)的JSP文件,后者生成視圖。所有這些控制邏輯利用Struts-config.xml文件來配置。視圖:主要由JSP生成頁面完成視圖,Struts提供豐富的JSP標(biāo)簽庫:Html,Bean,Logic,Template等,這有利于分開表現(xiàn)邏輯和程序邏輯。模型:模型以一個或多個javabean的形式存在。這些bean分為三類:ActionForm、Action、JavaBeanorEJBActionForm通常稱之為FormBean,封裝了來自于Client的用
28、戶請求信息,如表單信息。Action通常稱之為ActionBean,獲取從ActionSevlet傳來的FormBean,取出FormBean中的相關(guān)信息,并做出相關(guān)的處理,一般是調(diào)用JavaBean或EJB等。流程:在Struts中,用戶的請求一般以*do作為請求服務(wù)名,所有的*.do請求均被指向ActionSevlet,ActionSevlet根據(jù)Struts-config.xml中的配置信息,將用戶請求封裝成一個指定名稱的FormBean,并將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應(yīng)的業(yè)務(wù)操作,如文件操作,數(shù)據(jù)庫操作等。每一個*.do均有對應(yīng)的
29、FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。4.2.2 Struts的基本組件包整個struts大約有15包,近200個類所組成,而且數(shù)量還在不斷的擴展。在此我們不能一一介紹,只能列舉幾個主要的簡要的介紹一下。下表說明了目前strutsapi中基本的幾個組件包,包括action,actions,taglib。圖片(5)則顯現(xiàn)了這幾個組件包之間的關(guān)系。其中action是整個strutsframework的核心org.apache.struts.action基本上,控制整個strutsframework的運行的核心類、組件都在這個包中,比如我們上
30、面提到的控制器ActionServlet,Action,ActionForm,ActionMapping等等。struts1.1比1.0多了DynaActionForm類。增加了動態(tài)擴展生成FormBean功能org.apache.struts.actions這個包是主要作用是提供客戶的http請求和業(yè)務(wù)邏輯處理之間的特定適配器轉(zhuǎn)換功能,而10-版本中的部分動態(tài)增刪FromBean的類,也在struts1.1中被Action包的DynaActionForm組件所取代org.apache.struts.taglib這不是一個包,而是是一個客戶標(biāo)簽類的集合。下面包括BeanTags,HTMLTag
31、s,LogicTags,NestedTags,TemplateTags這幾個用于構(gòu)建用戶界面的標(biāo)簽類。Struts的基本組件關(guān)系圖對于Struts如何控制、處理客戶請求,讓我們通過對struts的四個核心組件介紹來具體說明。這幾個組件就是:ActionServlet。ActionClasses,ActionMapping(此處包括ActionForward),ActionFromBean。4.2.3 StrutsActionServletActionServlet繼承自javax.servlet.http.HttpServlet類,其在Strutsframework中扮演的角色是控制器,參看上
32、面的“Struts體系圖”??刂破鰽ctionServlet主要負(fù)責(zé)將客戶的HTTP青求信息組裝后,根據(jù)配置文件的指定描述,轉(zhuǎn)發(fā)到適當(dāng)?shù)奶幚砥鳌0凑誗ervelt的標(biāo)準(zhǔn),所有得Servlet必須在web配置文件(web.xml)聲明。同樣,ActoinServlet必須在WebApplication配置文件(web.xml)中描述,有關(guān)配置信息,后面將會介紹。當(dāng)用戶向服務(wù)器端提交請求的時候,實際上信息是首先發(fā)送到控制器ActionServlet,一旦控制器獲得了請求,其就會將請求信息傳交給一些輔助類(helpclasses)處理。這些輔助類知道如何去處理與請求信息所對應(yīng)的業(yè)務(wù)操作。在Strut
33、s中,這個輔助類就是org.apache.struts.action.Action。通常開發(fā)者需要自己繼承Aciton類,從而實現(xiàn)自己的Action實例。4.2.4 StrutsActionClassesAction類所作的工作,正如它的名稱一樣,就是具體的業(yè)務(wù)操作。Action類中最為常用的是execute()方法。publicActionForwardexecute(ActionMappingmapping,ActionFormform,javax.servlet.ServletRequestrequest,javax.servlet.ServletResponseresponse)thr
34、owsjava.io.IOException,javax.servlet.ServletException當(dāng)Controller收到客戶的請求的時候,就會將請求轉(zhuǎn)移到一個Action實例,然后會調(diào)用這個Action實例的execute()方法。StrutsFramework為應(yīng)用系統(tǒng)中的每一個Action類只創(chuàng)建一個實例。所有的用戶都使用這一個實例,Action類運行在一個多線程的環(huán)境中。注意,客戶自己繼承的Action子類,必須重寫execute()方法,因為Action類在默認(rèn)情況下是返回null的。4.2.5 StrutsActionMapping上面講到了一個客戶請求是如何被控制器轉(zhuǎn)發(fā)
35、和處理的,但是,控制器如何知道什么樣的信息轉(zhuǎn)發(fā)到什么樣的Action類呢?這就需要一些與動作和請求信息相對應(yīng)的映射配置說明。在struts中,這些配置映射信息是存儲在特定的XML文件(struts-con巾g.xml)。這些配置信息在系統(tǒng)啟動的時候被讀入內(nèi)存,供strutsframework在運行期間使用。在內(nèi)存中,每個<action>元素都與org.apache.struts.action.ActionMapping類的個實例對應(yīng)。下表就顯示了一個登陸的配置映射。<action-mappings><actionpath="/logonAction&qu
36、ot;type="com.test.LogonAction"name="LogonForm"scope="request"input="logoncheck.jsp"validate="false"><forwardname="welcome"path="/welcome.jsp"/><forwardname="failure"path="/logon_failure.jsp"/><
37、;/action></action-mappings>Path:這個屬性用來和JSP頁面中,調(diào)用<html:form>時的action屬性相對應(yīng),它將JSP頁面和處理這個JSP頁面的Action對象對應(yīng)起來。Type:對應(yīng)的Action子類的完整類名。Name:對應(yīng)的ActionForm的名稱。他與下面將描述的<form-bean>元素的name屬性相應(yīng)。Scope:這個屬性表示相對應(yīng)的ActionFormbean的scope屬性。它的值可以是"page"、“request"、"session"和&qu
38、ot;application“。分別對應(yīng)javabean的"page"、“request"、asession”和aapplication”屬性。Input:這個屬性表示如果對應(yīng)的ActionForm的validate方法返回值的ActionErrors非空,即ActionForm的屬性沒有通過校驗,則跳轉(zhuǎn)到當(dāng)前的頁面。Validate:是否調(diào)用FormBean的validate。方法來驗證,關(guān)閉它之后就不會報出錯誤信息了。True表示需要調(diào)用validate方法;false表示不需要調(diào)用validate方法。forward:定義可能的跳轉(zhuǎn)路徑。Name屬性表示Ac
39、tion類的execute方法中,生成的返回結(jié)果時的參數(shù);path表示將要跳轉(zhuǎn)到的頁面的路徑。上面的配置表示:當(dāng)可以通過/logonAction.do提交請求信息的時候,控制器將信息委托com.test.LogonAction處理。調(diào)用LogonAction實例的execute。方法。同時將Mapping實例和所對應(yīng)的LogonFormBean信息傳入。其中name=LogonForm使用的form-bean元素所聲明的ActionFormBean。有關(guān)form-bean的聲明如下顯示。<form-beans><form-beanname="LoginForm&qu
40、ot;type="com.test.LoginForm"/></form-beans><form-bean>有兩個屬性:name:這個ActionForm的名字,他與被JSP頁面中的<HTML:form>元素的name屬性應(yīng)該是相同的。比如,如果在一個JSP頁面中需要生成一個ActionForm對象,這個對象的名字(就是name屬性)是"LoginForm”,則JSP頁面中的<HTML:form>元素的name屬性也應(yīng)該是“LoginForm”。Type:這個ActionForm對象的完整類名。這個屬性和JSP
41、頁面中的<HTML:form>元素的type屬性是相對應(yīng)的。在此稍稍說一下有關(guān)global-forwards的概念。其在配置文件中描述了整個應(yīng)用系統(tǒng)可以使用的ActionForward,而不是僅僅是一個特定的Action。<global-forwards><forwardname="logout"path="/logout.do"/><forwardname="error"path="/error.jsp"/></global-forwards><g
42、lobal-forwards>元素用來表示全局的跳轉(zhuǎn)頁面。和<action>元素一樣,他有無數(shù)個<forward>元素。當(dāng)一個Action對象的execute方法執(zhí)行完畢以后,如果他返回的ActionForward對象沒有在這個<action>元素的<forward>子元素中有對應(yīng)值的話,他將要查找<global-forwards>中的<forward>元素,并跳轉(zhuǎn)到相應(yīng)頁面。前面我們講過Struts采用屬性文件來保存應(yīng)用程序的信息,那么,Struts如何知道屬性文件的路徑呢,也在struts-config.xml文
43、件來配置:message-resourcesparameter="test.ApplicationResources"/>message-resourced素用來表示ApplicationRperties文件的位置。這個元素有一個屬性parameter,這個屬性用來表示ApplicationRperties文件的存放地點,但有意思的是,他是用一個類名來來表示存放路徑的。比如"com.ApplicationResources"是表示存放在WEB-INF/classes/com路徑下面的Applicati
44、onRperties文件。上圖表示的文件路徑為WEB-INF/classes/test/ApplicationRperties。注意:以上所述的這些元素在struts-config.xml文件中的位置也是有先后順序的。它們的順序是:<form-beans>< global-forwards><actions>< message-resources>4.2.6StrutsActionFormBean在上面講解ActionServlet,ActionClasses和ActionMapping的時候,我們
45、都提到了ActionFormBean的概念。ActionForm的主要功能就是為Action的操作提供提交表單相映射的數(shù)據(jù)。對于每一個客戶請求,Strutsframework在處理ActionForm的時候,一般需要經(jīng)歷如下幾個步驟:(1)檢查Action的映射,確定Action中已經(jīng)配置了對ActionForm的映射(2)根據(jù)name屬性,查找formbean的配置信息(3)檢查Action的formbean的使用范圍,確定在此范圍下,是否已經(jīng)有此formbean的實例。(4)假如當(dāng)前范圍下,已經(jīng)存在了此formbean的實例,而是對當(dāng)前請求來說,是同一種類型的話,那么就重用。(5)否則,就
46、重新構(gòu)建一個formbean的實例(6)formbean的reset()方法備調(diào)用(7)調(diào)用對應(yīng)的setter方法,對狀態(tài)屬性賦值(8)如果validatede的屬性北設(shè)置為true,那么就調(diào)用formbean的validate。方4.3例子講解在這一部分,我將根據(jù)一個簡單的例子去詳細(xì)的介紹一下struts框架的具體用法。4.3.1 環(huán)境安裝 利用Jbuilder8.0使用Struts1.1(版本)目前Jbuilder中默認(rèn)帶的都是struts1.(0fi本,我們使用的是strutsl.1版本,所以需要手動的配置相關(guān)的類庫第一步:Struts1.1版本的獲得可以通過訪問jakar
47、的方式來下載,也可以從我機器的共享目錄拷貝:IP:50或機器名zhfUser:guestPWD:空內(nèi)容:src文件夾下有Jarkarta-struts-1.1-rc1Jarkarta-struts-1.1-rc1-srcExample_struts(例子文件源代碼,可以用Jbuilder直接打開)Properties(屬性文件使用例子)Taguse(taglib例子)還有一些資料。第二步:Jbuilder配置Struts1.1首先將Struts1.1文件(包括源碼)拷貝至jbuilder/thirdparty目錄下:-101x1修thirdixsr
48、tr文單日境強直租也收施®工且切物颯4JS1-僅|©頻.國好快0觸|昆里X色|國|地址|laiDfog-ammjbuldet切中rdpBfty二I介轉(zhuǎn)到名航大小類3Cjjbukiet1Pjbin國CjdefaultsdrQcbclet困口extrasfflOi2mcwdd.0.4由Q田王HO他F亡IpatchFO3優(yōu);亡|remote由.二k2srcS口templates由匚CDCoan-2.Q.3-war由匚Jhttpunit-l.-H.l由Cjiakarteacectu5B13-1.3向Mj(MrHjiP<hfijhc*1l.iH.?OcjKoon-Z.J-ar_
49、|httjpunit-i.4.iOstart印tattusT34總I二Jjflfcnrta-struts-l.O.ZQjakifta-struts-j.l-rclIJafcata-struts-l.1-rcl-src二Jjakata=l:d中bsOjaknrta-tonKat-3.3.10必用去3怔恥七以明國-建國'IJakata-tQmcat-4»1.24-LE-Jckl4junta.aOrebfW>ard-vI=Il2wap-2_3_"luddAII_xnaxisIlii不對象<可用班盤空間;瓦09GBloWI巨跳前打開jbuilder,選擇tool
50、s/configurelibraries,在彈出的窗口上點擊new按鈕Name:strutsl.1Location:Jbuilder點擊Ok,回到剛才的界面,你會看到多出的一項struts1.1,選中它,在右邊的class標(biāo)簽中點擊Add按鈕,將所帶的所有jar包添加進去,最后的效果如下圖:然后選擇FrameWork標(biāo)簽,在其中的Framework上選擇Struts即可(這里Jbuilder會自動識別版本的) 利用Jbuilder創(chuàng)建支持Structl.1的工程:easyuse首先建立一個jbuilder工程文件,名稱可以自己定,這里我使用的然后建立一個war文件,名稱可以自己定
51、,這里我使用的easyuse注意在下面的選項中使用Struts1.1(Struts1.1)Frameworks這時程序的項目瀏覽器內(nèi)容如下easyusejpx£(UProjectSource>由8testITIAdditionalSettingsi-目easyuse+,口easyuse.warOESE3KB巴slrUts-config.xml0叫Deploymentdescriptors一場Rootdirectory©bookview.jsp司creerteBook.jsp芭ApplicationRperties我們可以看到一個Strutsl.
52、1節(jié)點出現(xiàn)在樹形圖中,證明你前面的操作是正確的。利用Jbuilder支持的Stucts對象創(chuàng)建向?qū)В篧eb標(biāo)簽下的其他對象。當(dāng)我們點擊新建按鈕之后,我們可以看到在StrutsConverterActionFormActionJSPfromActionForm大家可以跟著向?qū)б徊揭徊絹聿僮鳌?.3.2程序編寫任務(wù)描述。這是Struts的一個簡單應(yīng)用TitlcPPage-slQ1SublhL*“第a、1國畫|用能函.:createBook.jsp-輸入一本書的標(biāo)題和頁碼。用Struts稿單座用-Mozilla文件瀛創(chuàng)日直著世)轉(zhuǎn)到也)書簽色)工具(口葡口)幫助歸)后退I
53、,VWJF這是Struts的一個簡單應(yīng)用ti11e|zhanghaifengSubmitI熱口力國越II靠成干固質(zhì)title參數(shù)。bookview.jsp-正常運轉(zhuǎn)之后,此界面將會獲得createBook.jsp傳來的再次提交之后,又回到了creatbook.jsp界面,一個循環(huán)過程。 ActionForm類為了便于講述,我在講解內(nèi)容寫入代碼中。packagetest;importjava.util.*;importorg.apache.struts.action.*;importorg.apache.struts.validator.ValidatorForm;importja
54、vax.servlet.http.*;publicclassBookActionFormextendsActionForm/這里要求所有的自己編寫的FormBean必須繼承ActionFormprivateStringtitle=""privateintpages=0;/這里的兩個私有屬性字段,對應(yīng)了createBook.jsp中的兩個文本框,Struts會自動給它們賦/值的publicvoidsetTitle(Stringtitle)this.title=title;publicStringgetTitle()returnthis.title;publicvoidsetP
55、ages(intpages)this.pages=pages;publicintgetPages()returnthis.pages;/Stuts會自動調(diào)用ActionForm的validate。方法,來對輸入信息進行校驗。/validate()方法返回為ActionErrors,這如java的Exception處理機制。publicActionErrorsvalidate(ActionMappingactionMapping,HttpServletRequesthttpServletRequest)ActionErrorserrors=newActionErrors();if(title=n
56、ull)|(title.length()<3)errors.add("Title",newActionError("error.book.title");if(pages<1)errors.add("Page",newActionError("error.book.page");returnerrors;publicvoidreset(ActionMappingactionMapping,HttpServletRequesthttpServletRequest)title=null;pages=0;4.
57、3.2.3 Struts-config.xml這是Struts核心文件,Struts-config.xml集中了所有頁面的導(dǎo)航定義。對于大型的WEB項目,通過此配置文件即可迅速把握其脈絡(luò),這不管是對于前期的開發(fā),還是后期的維護或升級都是大有裨益的。掌握Struts-config.xml是掌握Struts的關(guān)鍵所在。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstruts-configPUBLIC"-/ApacheSoftwareFoundation/DTDStrutsConfigu
58、ration1.1/EN""/struts/dtds/struts-config_1_1.dtd"><struts-config>/FormBean的聲明<form-beans><form-beanname="bookActionForm"type="test.BookActionForm"/></form-beans>/公共跳轉(zhuǎn)<global-forwards><forwardname="boo
59、kCreated"path="/bookview.jsp"/><forwardname="first"path="/createBook.jsp"/></global-forwards>/action申明<action-mappings><actionpath="/createBook"type="test.BookAction"attribute="bookActionForm"name="bookActi
60、onForm"scope="request"validate="true"input="/createBook.jsp"/></action-mappings>/屬性文件聲明<message-resourcesparameter="test.ApplicationResources"/></struts-config> Action類packagetest;importorg.apache.struts.action.*;importjavax.servlet.http.*;publicclassBookActionextendsAction/這里要求所有的自己編寫的Action子類必須繼承ActionpublicActionForwardexecute(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpSer
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生物科技產(chǎn)品研發(fā)轉(zhuǎn)讓合同4篇
- 二零二五版寬帶網(wǎng)絡(luò)設(shè)備安裝與調(diào)試服務(wù)協(xié)議3篇
- 2023四年級數(shù)學(xué)下冊 七 小數(shù)的加法和減法(小數(shù)的加減混合運算1)說課稿 西師大版
- 二零二五年度三人跨境電商合作協(xié)議范本3篇
- 主播與經(jīng)紀(jì)公司2025年度獨家代理合同3篇
- 專項腳手架搭建及租賃服務(wù)協(xié)議(2024年)版B版
- 主題13人類面臨的主要環(huán)境問題 單元說課稿2023-2024學(xué)年高中地理中圖中華地圖版必修二
- 第10課 影響世界的工業(yè)革命 說課稿- 2023-2024學(xué)年高一下學(xué)期統(tǒng)編版(2019)必修中外歷史綱要下001
- 專業(yè)酒店家具訂購協(xié)議樣本版A版
- 二零二四農(nóng)田灌溉設(shè)施共建共享合作合同書3篇
- MT/T 199-1996煤礦用液壓鉆車通用技術(shù)條件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力學(xué)性能試驗第1部分:桌類強度和耐久性
- 第三方在線糾紛解決機制(ODR)述評,國際商法論文
- 第5章-群體-團隊溝通-管理溝通
- 腎臟病飲食依從行為量表(RABQ)附有答案
- 深基坑-安全教育課件
- 園林施工管理大型園林集團南部區(qū)域養(yǎng)護標(biāo)準(zhǔn)圖例
- 排水許可申請表
- 低血糖的觀察和護理課件
- 計量檢定校準(zhǔn)技術(shù)服務(wù)合同協(xié)議書
評論
0/150
提交評論