2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩65頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  基于JAVA的學(xué)習(xí)管理系統(tǒng)(LMS)</p><p><b>  —前臺(tái)程序設(shè)計(jì)</b></p><p>  [摘要] 學(xué)習(xí)管理系統(tǒng)是指通過計(jì)算機(jī)、網(wǎng)絡(luò)等數(shù)字化方法進(jìn)行學(xué)習(xí)與教學(xué)的系統(tǒng),它充分利用IT技術(shù)為教學(xué)活動(dòng)提供了一個(gè)具有全新溝通機(jī)制與資源豐富的學(xué)習(xí)環(huán)境,實(shí)現(xiàn)了一種新的學(xué)習(xí)方式。本系統(tǒng)是基于Java平臺(tái),Struts框架,MVC設(shè)計(jì)模式實(shí)現(xiàn)

2、的。提供了一個(gè)簡潔、高效、穩(wěn)定的在線學(xué)習(xí)管理系統(tǒng),旨在為教師、學(xué)生的教與學(xué)提供一個(gè)方便的交流平臺(tái)。</p><p>  首先本文對系統(tǒng)所采用的JSP,Struts,JSTL和Ajax技術(shù)的概念,原理進(jìn)行了簡要的介紹,接下來對系統(tǒng)Web界面的設(shè)計(jì)和實(shí)現(xiàn)作了詳細(xì)的介紹。系統(tǒng)web界面即前臺(tái)部分由10個(gè)功能模塊組成,包括announcement,calendar,course,fourm,homework,resour

3、ce,email,option,login和grade模塊。本文詳細(xì)介紹了各個(gè)模塊的頁面表單設(shè)計(jì),頁面流程等。在web 用戶界面部分開發(fā)過程中,采用了大量的struts和jstl標(biāo)簽,使得頁面顯得簡潔,高效而又不失美觀。</p><p>  最后,本文對系統(tǒng)的運(yùn)行結(jié)果做了大致的介紹,包括對主要用戶界面的詳細(xì)說明。</p><p>  關(guān)鍵詞:Struts JSTL Ajax</p

4、><p>  JAVA based learn management system (LMS)</p><p>  —foreground module design </p><p>  [Abstract] Learning Management System implements a nearly new way to study through computer

5、 and network to do teaching and studying activity. Learning Management Systsem relies on IT technology, this supplies students and teachers an environment with rich resources and convenient way to communicate with each o

6、ther. This system is based on Java platform, so it can run on every OS.</p><p>  First, the concept and architecture of JSP, STRUTS, JSTL, AJAX, which used in this system was introduced. And then the detail

7、designing of the web UI part was introduced. The web UI part is consisted of 10 models, such as announcement, calendar, course, fourm, homework, resource, email, option, login and grade model. The disignning and implemen

8、ting of each model was introduced, readers can read the detail of designning of the web forms and the data flow of the web pages in this article also. In </p><p>  At last, the running results of this system

9、, and the detail of each result were introduced.</p><p>  Keywords: Struts JSTL Ajax </p><p><b>  目錄</b></p><p><b>  引言1</b></p><p>  第一章 St

10、ruts,JSP,JSTL,Ajax概述2</p><p>  1.1 Struts框架的介紹2</p><p>  1.1.1 Struts的概念和體系結(jié)構(gòu)2</p><p>  1.1.2 Struts框架的工作原理和組件4</p><p>  1.1.3 Struts標(biāo)簽庫10</p><p>  1.

11、2 JSP的介紹22</p><p>  1.2.1 JSP的概念和體系結(jié)構(gòu)23</p><p>  1.2.2 JSP標(biāo)簽庫25</p><p>  1.2.3 JSP的優(yōu)缺點(diǎn)26</p><p>  1.3 JSTL的介紹26</p><p>  1.3.1 JSTL的概念和體系結(jié)構(gòu)26</p&g

12、t;<p>  1.3.2 JSTL的標(biāo)簽介紹28</p><p>  1.3.3 JSTL的優(yōu)缺點(diǎn)28</p><p>  1.4 Ajax的介紹29</p><p>  1.4.1 Ajax的概念和體系結(jié)構(gòu)29</p><p>  1.4.2 Ajax的優(yōu)缺點(diǎn)29</p><p>  1.4

13、.3 Ajax的框架介紹30</p><p>  第二章 系統(tǒng)總體設(shè)計(jì)32</p><p>  2.1 系統(tǒng)目標(biāo)32</p><p>  2.2 系統(tǒng)特性32</p><p>  2.3 Web UI模塊設(shè)計(jì)32</p><p>  第三章 系統(tǒng)詳細(xì)設(shè)計(jì)34</p><p>  3.

14、1 Web UI詳細(xì)設(shè)計(jì)34</p><p>  3.1.1 announcement模塊詳細(xì)設(shè)計(jì)34</p><p>  3.1.2 calendar模塊詳細(xì)設(shè)計(jì)34</p><p>  3.1.3 course模塊詳細(xì)設(shè)計(jì)35</p><p>  3.1.4 forum模塊詳細(xì)設(shè)計(jì)37</p><p> 

15、 3.1.5 homework模塊詳細(xì)設(shè)計(jì)38</p><p>  3.1.6 resource模塊詳細(xì)設(shè)計(jì)39</p><p>  3.1.7 email模塊詳細(xì)設(shè)計(jì)39</p><p>  3.1.8 option模塊詳細(xì)設(shè)計(jì)40</p><p>  3.1.9 login模塊詳細(xì)設(shè)計(jì)41</p><p>

16、;  3.1.10 grade模塊詳細(xì)設(shè)計(jì)41</p><p>  第四章 運(yùn)行結(jié)果44</p><p><b>  結(jié)論53</b></p><p><b>  致謝語54</b></p><p><b>  [參考文獻(xiàn)]55</b></p><

17、p><b>  附 錄56</b></p><p><b>  Contents</b></p><p><b>  preface1</b></p><p>  chapter 1 CONCEPT OF STRUTS,JSP,JSTL,AJAX2</p><p>

18、;  1.1 INTRODUCTION OF STRUTS2</p><p>  1.1.1 Concept and Architecture of Struts2</p><p>  1.1.2 Theory and Components of Struts4</p><p>  1.1.3 Tag library of Struts10</p>

19、;<p>  1.2 INTRODUCTION OF JSP22</p><p>  1.2.1 Concept and Architecture of JSP23</p><p>  1.2.2 Tag library of JSP25</p><p>  1.2.3 Advantages and Disadvantages of JSP26

20、</p><p>  1.3 INTRODUCTION OF JSTL26</p><p>  1.3.1 Concept and Architecture of JSTL26</p><p>  1.3.2 Introduction of JSTL's Library28</p><p>  1.3.3 Advantages

21、and Disadvantages of JSTL28</p><p>  1.4 INTRODUCTION TO AJAX29</p><p>  1.4.1 Concept and Architecture of Ajax29</p><p>  1.4.2 Advantages and Disadvantages of Ajax29</p>

22、<p>  1.4.3 Some Useful Ajax Framework30</p><p>  chpter 2 GLOBAL DESIGNING32</p><p>  2.1 TARGET OF SYSTEM32</p><p>  2.2 PREFERENCES OF SYSTEM32</p><p>  2

23、.3 DESIGNING OF WEB UI32</p><p>  chapter 3 DETAIL DESIGNING34</p><p>  3.1 DETAIL DESIGNING OF WEB UI MODULES34</p><p>  3.1.1 Detail Designing of Announcement Module34</p&g

24、t;<p>  3.1.2 Detail Designing of Calendar Module34</p><p>  3.1.3 Detail Designing of Course Module35</p><p>  3.1.4 Detail Designing of Fourm Module37</p><p>  3.1.5 Det

25、ail Designing of Homework Module38</p><p>  3.1.6 Detail Designing of Resource Module39</p><p>  3.1.7 Detail Designing of Email Module39</p><p>  3.1.8 Detail Designing of Optio

26、n Module40</p><p>  3.1.9 Detail Designing of Login Module41</p><p>  3.1.10 Detail Designing of Grade Module41</p><p>  chapter 4 running RESULT44</p><p>  conclus

27、ion53</p><p>  ACKNOWLEDGEMENT54</p><p>  REFERENCES55</p><p>  SUPPLEMENT56</p><p><b>  引言</b></p><p>  學(xué)習(xí)管理系統(tǒng)是一個(gè)教育單位不可缺少的部分,它的內(nèi)容對于學(xué)校的決策者和

28、管理者來說都至關(guān)重要,所以學(xué)習(xí)管理系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄?。但一直以來人們使用傳統(tǒng)人工的方式管理教學(xué)活動(dòng),這種管理方式存在著許多缺點(diǎn),如:效率低、保密性差。另外,時(shí)間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找、更新和維護(hù)都帶來了不少的困難。隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會(huì)的各個(gè)領(lǐng)域并發(fā)揮著越來越重要的作用。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對教學(xué)活動(dòng)進(jìn)行管理

29、,具有著手工管理所無法比擬的優(yōu)點(diǎn)。例如,檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長、成本低等。這些優(yōu)點(diǎn)能夠極大地提高學(xué)生教學(xué)活動(dòng)管理的效率,也是企業(yè)的科學(xué)化、正規(guī)化管理,與世界接軌的重要條件。因此,開發(fā)這樣一套管理軟件成為很有必要的事情,在下面的各章中我們將以開發(fā)一套學(xué)習(xí)管理系統(tǒng)為例,談?wù)勂溟_發(fā)過程和所涉及到的問題及解決方法。</p><p>  本系統(tǒng)基于Java平臺(tái),Struts框架和MVC設(shè)計(jì)

30、模式來實(shí)現(xiàn),整個(gè)系統(tǒng)由客戶端(前臺(tái))和服務(wù)器端(后臺(tái))程序組成,并通過對Java,Struts網(wǎng)絡(luò)編程技術(shù)的詳細(xì)介紹,深入地探討了該學(xué)習(xí)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的過程。用戶可以快捷與方便地登陸用戶端程序,進(jìn)而進(jìn)行網(wǎng)上交流。</p><p>  第一章 Struts,JSP,JSTL,Ajax概述</p><p>  1.1 Struts框架的介紹</p><p>  1

31、.1.1 Struts的概念和體系結(jié)構(gòu)</p><p>  Struts有一組相互協(xié)作的類、Serlvet以及Jsp TagLib組成?;赟truts構(gòu)架的web應(yīng)用程序基本上符合JSP Model2的設(shè)計(jì)標(biāo)準(zhǔn),可以說是MVC設(shè)計(jì)模式的一種變化類型。根據(jù)上面對framework的描述,我們很容易理解為什么說Struts是一個(gè)web framwork,而不僅僅是一些標(biāo)記庫的組合。但 Struts 也包含了豐富的標(biāo)

32、記庫和獨(dú)立于該框架工作的實(shí)用程序類。Struts有其自己的控制器(Controller),同時(shí)整合了其他的一些技術(shù)去實(shí)現(xiàn)模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數(shù)據(jù)訪問技術(shù)相結(jié)合,包括EJB,JDBC和Object Relation Bridge。在視圖層,Struts能夠與JSP, Velocity Templates,XSL等等這些表示層組件想結(jié)合。</p><p>  

33、Struts與Web App的關(guān)系</p><p>  既然struts叫做web framework,那么其肯定主要基于web層的應(yīng)用系統(tǒng)開發(fā)。按照J(rèn)2EE Architecture的標(biāo)準(zhǔn),struts應(yīng)當(dāng)和jsp/servlet一樣,存在于web container一層。</p><p>  圖1-1 Struts與WebApp的關(guān)系</p><p>  Str

34、uts的體系結(jié)構(gòu)</p><p>  我們說struts framework是MVC 模式的體現(xiàn),下面我們就從分別從模型、視圖、控制來看看struts的體系結(jié)構(gòu)(Architecture)。下圖顯示了struts framework的體系響應(yīng)客戶請求時(shí)候,各個(gè)部分工作的原理。</p><p>  圖1-2 Struts體系結(jié)構(gòu)</p><p>  從視圖角度(Vie

35、w)</p><p>  首先,Struts提供了Java類org.apache.struts.action.ActionForm,Java開發(fā)者將該類細(xì)分來創(chuàng)建表單bean。在運(yùn)行時(shí),該bean有兩種用法:</p><p>  ― 當(dāng)JSP準(zhǔn)備相關(guān)的HTML,表單以進(jìn)行顯示時(shí),JSP將訪問該bean(它保存要放入表單中的值)。那些值是從業(yè)務(wù)邏輯或者是從先前的用戶輸入來提供的。</

36、p><p>  ― 當(dāng)從Web瀏覽器中返回用戶輸入時(shí),該bean將驗(yàn)證并保存該輸入以供業(yè)務(wù)邏輯或(如果驗(yàn)證失敗的話)后續(xù)重新顯示使用。</p><p>  其次,Struts提供了許多定制JSP標(biāo)記,它們的使用簡單,但是它們在隱藏信息方面功能強(qiáng)大。例如,除了bean名稱和給定bean中每個(gè)段的名稱之外,頁面設(shè)計(jì)者不需要知道有關(guān)表單bean的更多信息。</p><p>

37、  從模型角度(Model)</p><p>  Struts雖然不直接有助于模型開發(fā)。在Struts中,系統(tǒng)模型的狀態(tài)主要由ActiomForm Bean和值對象體現(xiàn)。</p><p>  從控制器角度(Controller)</p><p>  在Struts framework中, Controller主要是ActionServlet,但是對于業(yè)務(wù)邏輯的操作則

38、主要由Action、ActionMapping、ActionForward這幾個(gè)組件協(xié)調(diào)完成(也許這幾個(gè)組件,應(yīng)該劃分到模型中的業(yè)務(wù)邏輯一塊)。其中,Action扮演了真正的控制邏輯的實(shí)現(xiàn)者,而ActionMapping和ActionForward則指定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向。</p><p>  Struts的基本組件包</p><p>  整個(gè)struts大約有15包,近200

39、個(gè)類所組成,而且數(shù)量還在不斷的擴(kuò)展。在此我們不能一一介紹,只能列舉幾個(gè)主要的簡要的介紹一下。下表說明了目前struts api中基本的幾個(gè)組件包,包括action、actions、config、util、taglib、validator。下圖則顯現(xiàn)了這幾個(gè)組件包之間的關(guān)系。其中action是整個(gè)struts framework的核心</p><p>  表1-1 核心組件包的關(guān)系</p><

40、p>  圖 1-3 struts的基本組件關(guān)系圖</p><p>  1.1.2 Struts框架的工作原理和組件</p><p>  對于Struts 如何控制、處理客戶請求,讓我們通過對struts的四個(gè)核心組件介紹來具體說明。這幾個(gè)組件就是:ActionServlet,Action Classes,Action Mapping(此處包括ActionForward),Action

41、From Bean。</p><p>  Struts ActionServlet控制器對象</p><p>  ActionServlet繼承自javax.servlet.http.HttpServlet類,其在Struts framework中扮演的角色是中心控制器。它提供一個(gè)中心位置來處理全部的終端請求。控制器ActionServlet主要負(fù)責(zé)將HTTP的客戶請求信息組裝后,根據(jù)配置

42、文件的指定描述,轉(zhuǎn)發(fā)到適當(dāng)?shù)奶幚砥鳌?lt;/p><p>  按照Servelt的標(biāo)準(zhǔn),所有得Servlet必須在web配置文件(web.xml)聲明。同樣,ActoinServlet必須在Web Application配置文件(web.xml)中描述,有關(guān)配置信息如下。</p><p><b>  <servlet></b></p><p

43、>  <servlet-name>action</servlet-name></p><p>  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class></p><p>  </servlet></p><p>  全

44、部的請求URI以*.do的模式存在并映射到這個(gè)servlet,其配置如下:</p><p>  <servlet-mapping></p><p>  <servlet-name>action</servlet-name></p><p>  <url-pattern>*.do</url-pattern>&

45、lt;/p><p>  </servlet-mapping></p><p>  一個(gè)該模式的請求URI符合如下格式: </p><p>  http://www.my_site_name.com/mycontext/actionName.do</p><p>  中心控制器為所有的表示層請求提供了一個(gè)集中的訪問點(diǎn)。這個(gè)控制器提供的抽

46、象概念減輕了開發(fā)者建立公共應(yīng)用系統(tǒng)服務(wù)的困難,如管理視圖、會(huì)話及表單數(shù)據(jù)。它也提供一個(gè)通用機(jī)制如錯(cuò)誤及異常處理,導(dǎo)航,國際化,數(shù)據(jù)驗(yàn)證,數(shù)據(jù)轉(zhuǎn)換等。</p><p>  當(dāng)用戶向服務(wù)器端提交請求的時(shí)候,實(shí)際上信息是首先發(fā)送到控制器ActionServlet,一旦控制器獲得了請求,其就會(huì)將請求信息傳交給一些輔助類(help classes)處理。這些輔助類知道如何去處理與請求信息所對應(yīng)的業(yè)務(wù)操作。在Struts中,

47、這個(gè)輔助類就是org.apache.struts.action.Action。通常開發(fā)者需要自己繼承Aciton類,從而實(shí)現(xiàn)自己的Action實(shí)例。</p><p>  Struts Action Classes </p><p>  ActionServlet把全部提交的請求都被控制器委托到RequestProcessor對象。RequestProcessor使用struts-confi

48、g.xml文件檢查請求URI找到動(dòng)作Action標(biāo)示符。</p><p>  一個(gè)Action 類的角色,就像客戶請求動(dòng)作和業(yè)務(wù)邏輯處理之間的一個(gè)適配器(Adaptor),其功能就是將請求與業(yè)務(wù)邏輯分開。這樣的分離,使得客戶請求和Action類之間可以有多個(gè)點(diǎn)對點(diǎn)的映射。而且Action類通常還提供了其它的輔助功能,比如:認(rèn)證(authorization)、日志(logging)和數(shù)據(jù)驗(yàn)證(validation)

49、。</p><p>  Action最為常用的是execute()方法。(注意,以前的perform方法在struts1.1中已經(jīng)不再支持),還有一個(gè)execute()方法,請參考apidoc,在此不在說明。public ActionForward execute(ActionMapping mapping,</p><p>  ActionForm form,<

50、;/p><p>  javax.servlet.ServletRequest request,</p><p>  javax.servlet.ServletResponse response)</p><p>  throws java.io.IOException,javax.servlet.ServletException</p>

51、<p>  <action-mappings></p><p>  <action path="/logonAction"</p><p>  type="com.test.LogonAction"</p><p>  name="LogonForm"</p>

52、<p>  scope="request"</p><p>  input="logoncheck.jsp"</p><p>  validate="false"></p><p>  <forward name="welcome" path="/welc

53、ome.jsp"/></p><p>  <forward name="failure" path="/logon_failure.jsp "/></p><p><b>  </action></b></p><p>  </action-mappings&

54、gt;</p><p>  當(dāng)Controller收到客戶的請求的時(shí)候,在將請求轉(zhuǎn)移到一個(gè)Action實(shí)例時(shí),如果這個(gè)實(shí)例不存在,控制器會(huì)首先創(chuàng)建,然后會(huì)調(diào)用這個(gè)Action實(shí)例的execute()方法。Struts Framework為應(yīng)用系統(tǒng)中的每一個(gè)Action類只創(chuàng)建一個(gè)實(shí)例。因?yàn)樗械挠脩舳际褂眠@一個(gè)實(shí)例,所以你必須確定你的Action 類運(yùn)行在一個(gè)多線程的環(huán)境中。下圖顯示了一個(gè)execute()方法如

55、何被訪問:</p><p>  圖1-4 Action實(shí)例的execute()方法</p><p>  注意,客戶自己繼承的Action子類,必須重寫execute()方法,因?yàn)锳ction類在默認(rèn)情況下是返回null的。</p><p>  Struts Action Mapping</p><p>  上面講到了一個(gè)客戶請求是如何被控制

56、器轉(zhuǎn)發(fā)和處理的,但是,控制器如何知道什么樣的信息轉(zhuǎn)發(fā)到什么樣的Action類呢?這就需要一些與動(dòng)作和請求信息相對應(yīng)的映射配置說明。在struts 中,這些配置映射信息是存儲(chǔ)在特定的XML文件(比如struts-config.xml)。 </p><p>  這些配置信息在系統(tǒng)啟動(dòng)的時(shí)候被讀入內(nèi)存,供struts framework在運(yùn)行期間使用。在內(nèi)存中,每一個(gè)<action>元素都與org.apa

57、che.struts.action.ActionMapping類的一個(gè)實(shí)例對應(yīng)。下表就顯示了一個(gè)登陸的配置映射。</p><p>  上面的配置表示:當(dāng)可以通過/logonAction.do(此處假設(shè)配置的控制器映射為*.do)提交請求信息的時(shí)候,控制器將信息委托com.test.LogonAction處理。調(diào)用LogonAction實(shí)例的execute()方法。</p><p>  &l

58、t;form-beans></p><p>  <form-bean name="LoginForm"</p><p>  type="com.test.LoginForm"/></p><p>  </form-beans></p><p>  同時(shí)將Mapping實(shí)例

59、和所對應(yīng)的LogonForm Bean信息傳入。其中name=LogonForm,使用的form-bean元素所聲明的ActionForm Bean。有關(guān)form-bean的申明如下顯示。</p><p>  使用ActionForward導(dǎo)航</p><p>  元素<forward>則表示了當(dāng)Action實(shí)例的execute()方法運(yùn)行完畢或,控制器根據(jù)Mapping可將響

60、應(yīng)信息轉(zhuǎn)到適當(dāng)?shù)牡胤健H缟厦娆F(xiàn)實(shí),如果客戶登陸成功,則調(diào)用welcome forward,將成功信息返回到/welcome.jsp頁面。在你的execute()方法的結(jié)尾可以使用下面的實(shí)例代碼而返回welcome forward。當(dāng)然你的welcome forward必須在action元素屬性中定義,正如上面所聲明的那樣。</p><p>  return (mapping.findForward("w

61、elcome"));</p><p>  ActionForward對象是配置對象。這些配置對象擁有獨(dú)一無二的標(biāo)識以允許它們按照有意義的名稱如“success”,“failure”等來檢索。ActionForward對象封裝了向前進(jìn)的URL路徑且被請求處理器用于識別目標(biāo)視圖。ActionForward對象建立自<forward>元素位于struts-config.xml。下面是一個(gè)Strut

62、s中<forward>元素例子,屬于<action>元素范圍。</p><p>  <action path="/editCustomerProfile"</p><p>  type="packageName.EditCustomerProfileAction"</p><p>  name=&

63、quot;customerProfileForm" scope="request"></p><p>  <forward name="success" path="/MainMenu.jsp"/></p><p>  <forward name="failure" path=

64、"/CustomerService.jsp"/></p><p>  </action></p><p>  基于執(zhí)行請求處理器的execute(…)方法的結(jié)果,當(dāng)傳遞一個(gè)值匹配指定于<forward>元素中name屬性的值的時(shí)候,下一個(gè)視圖可以在execute(…)方法中被開發(fā)者用方便的方法org.apache.struts.actio

65、n.ActionMapping.findForward(…)選擇。ActionMapping.findForward(…)方法既從它的本地范圍又從全局范圍提供一個(gè)ActionForward對象,該對象返回至RequestProcessor以RequestDispatcher.forward(…)或response.sendRedirect(…)調(diào)用下一個(gè)視圖。當(dāng)<forward>元素有redirect=“false”屬性或r

66、edirect屬性不存在的時(shí)候,RequestDispatcher.forward(…)被執(zhí)行;當(dāng)redirect=“true”是,將調(diào)用sendRedirect(…)方法。下例舉例說明了redirect屬性的用法:</p><p>  <forward name="success" path="/Catalog.jsp" redirect="true&qu

67、ot;/></p><p>  如果redirect=true, URL建立如/contextPath/path因?yàn)镠ttpServletResponse.sendRedirect(…)中解釋URL采用”/”開頭相對于servlet容器根目錄。</p><p>  如果redirect=false, URI建立如/path因?yàn)镾ervletContext.getRequestDisp

68、tacher(…)采用虛擬目錄相關(guān)URL。</p><p>  在此稍稍說一下有關(guān)global-forwards的概念。其在配置文件中描述了整個(gè)應(yīng)用系統(tǒng)可以使用的ActionForward,而不是僅僅是一個(gè)特定的Action。</p><p>  <global-forwards></p><p>  <forward name="log

69、out" path="/logout.do"/></p><p>  <forward name="error" path="/error.jsp"/></p><p>  </global-forwards></p><p>  Struts ActionForm

70、 Bean捕獲表單數(shù)據(jù)</p><p>  一個(gè)應(yīng)用系統(tǒng)的消息轉(zhuǎn)移(或者說狀態(tài)轉(zhuǎn)移)的非持久性數(shù)據(jù)存儲(chǔ),是由ActionForm Bean的負(fù)責(zé)保持的。ActionForm派生的對象用于保存請求對象的參數(shù),因此它們和用戶緊密聯(lián)系。一個(gè)ActionForm類被RequestProcessor建立。這是發(fā)生在已完成向前進(jìn)到一個(gè)URL,該URL為映射到控制器servlet而不是JSP和相應(yīng)的動(dòng)作映射指定的表單屬性的。在

71、這個(gè)情況下,如果沒有在指定的活動(dòng)范圍內(nèi)找到,RequestProcessor將嘗試尋找可能導(dǎo)致創(chuàng)建一個(gè)新ActionForm對象的表單bean。該ActionForm對象在指定的活動(dòng)范圍內(nèi)被用<action>元素的name屬性找到;</p><p>  RequestProcessor將隨后重新安排表單屬性,用請求時(shí)參數(shù)填充表單,隨即調(diào)用表單對象的validate(…)方法以履行服務(wù)器端用戶輸入驗(yàn)證。

72、僅當(dāng)ActionMapping對象中validate屬性被設(shè)為true時(shí),validate(…)方法被調(diào)用;這就是默認(rèn)的行為。request.getParameterValues(parameterName)被用于得到一個(gè)String[]對象,它用來表單填充;驗(yàn)證的結(jié)果應(yīng)該是一個(gè)ActionErrors對象,用org.apache.struts.taglib.html.ErrorsTag來顯示驗(yàn)證錯(cuò)誤給用戶。ActionForm也可以被

73、用于為當(dāng)前用戶保存即將被一個(gè)視圖引用的中間模型狀態(tài)。</p><p>  當(dāng)一個(gè)表單對象被RequestProcessor找到,它被傳遞到請求處理器的execute(…)方法。一個(gè)ActionForm對象也可以被請求處理器建立。表單對象建立目的是提供中間模型狀態(tài)給使用請求范圍JSP;這將確保對象不會(huì)在有效性過期后仍然存在。默認(rèn)的,所有的表單都被保存為會(huì)話范圍。會(huì)話中表單對象脫離有效性的存在可能導(dǎo)致浪費(fèi)內(nèi)存,同樣的

74、,請求處理器必須跟蹤保存在會(huì)話中的表單對象的生命周期。一個(gè)好的捕獲表單數(shù)據(jù)的實(shí)踐是為橫跨多用戶交互的相關(guān)表單用一個(gè)單獨(dú)的表單bean。表單bean也可以在反饋的時(shí)候用來儲(chǔ)存能夠被自定義標(biāo)簽改變的中間模型狀態(tài)。在視圖中標(biāo)簽用法避免結(jié)合Java代碼,因此要成一個(gè)好的任務(wù)劃分,web生產(chǎn)組主要處理標(biāo)志,而應(yīng)用開發(fā)組主要處理Java代碼。標(biāo)簽因素退出訪問中間模型狀態(tài)的邏輯;當(dāng)訪問嵌套的對象或當(dāng)通過聚集列舉時(shí)這個(gè)邏輯可能很復(fù)雜。</p>

75、;<p>  Struts的其他組件</p><p>  Struts framework本身提供了很多可擴(kuò)展的組件或sub framework,方便開發(fā)人員在其構(gòu)架上構(gòu)建web層的應(yīng)用系統(tǒng)。比如upload、collections、logging等等。讓我們來看看兩個(gè)比較重要的組件:validationg framework和struts taglib。有關(guān)其他組件請參考Struts用戶手冊(ht

76、tp://jakarta.apache.org/struts/userGuide)。</p><p>  Validation Framework for Struts</p><p>  在struts 1.1中,新增了validation framework。增加了對form數(shù)據(jù)提交的驗(yàn)證。將原本需要在ActionFrom Bean的validate()進(jìn)行的驗(yàn)證通過配置文件的描述進(jìn)行

77、驗(yàn)證。</p><p>  有關(guān)其詳細(xì)信息,請參考http://home.earthlink.net/~dwinterfeldt 。個(gè)人建議對于小型應(yīng)用系統(tǒng)可以采用這種配置方式,但是對于應(yīng)用系統(tǒng)中有大量web層表單應(yīng)用的系統(tǒng),并且業(yè)務(wù)需求變動(dòng)比較大的,使用validation framework 可能會(huì)加重開發(fā)難度、系統(tǒng)維護(hù)難度??梢越梃bvalidation framework的Javascript Valida

78、tor Tag。 </p><p>  1.1.3 Struts標(biāo)簽庫</p><p><b>  定制JSP標(biāo)記</b></p><p>  Struts提供了用來封裝邏輯的各種定制JSP標(biāo)記,因此頁面設(shè)計(jì)者可以將主要精力花在頁面的可視特征上,而不必主要考慮Java語法或其它JSP語法,在下列標(biāo)識庫描述符中引用了Struts標(biāo)記:</p

79、><p>  Struts-bean.tld</p><p>  使訪問bean以及新bean的定義更容易,,為了實(shí)現(xiàn)國際化,應(yīng)使用不同的屬性文件</p><p>  struts-html.tld</p><p>  提供顯示HTML對象(例如,表單、按鈕和復(fù)選框)的簡便方法</p><p>  struts-logic

80、.tld</p><p>  支持邏輯構(gòu)造,以便可以有條件地顯示文本或者作為處理循環(huán)的結(jié)果來顯示文本</p><p>  struts-template.tld</p><p>  支持使用在運(yùn)行時(shí)可以修改的JSP模板</p><p>  要在JSP文件頂部的<taglib>偽指令如下所示:<%@ taglib uri=“struts-

81、html. tld” prefix=“html”%></p><p>  <%@ taglib uri=“struts-bean.tld”prefix=“bean”%></p><p>  <%@ taglib uri=“struts-logic.tld”prefix=“l(fā)ogic”%></p><p>  每個(gè)<taglib>偽指令都

82、具有與基于 web.xml的< taglib>標(biāo)記中的URL相匹配的URL。另外JSP中的每個(gè) struts標(biāo)記都使用一個(gè)使標(biāo)記與特定標(biāo)記庫描述符相關(guān)的前綴:</p><p>  ― 沒有嵌套內(nèi)容的標(biāo)記可以采用以下格式:</p><p>  <prefix:tagName attributesAndValues/></p><p>  ― 嵌套內(nèi)容是在

83、一對標(biāo)記之間嵌套的:</p><p>  <prefix:tagName attributesAndValues /></p><p>  </prefix:tagName></p><p>  prefix:在JSP taglib偽指令中指定的前綴</p><p>  tagNam:標(biāo)記的名稱,如標(biāo)記庫描述符中所述;

84、描述符條目指定提供標(biāo)記邏輯的Jave類</p><p>  attributesAndValues:― 系列屬性與值的配對(是必需的或者是可選的),每個(gè)配對都包括一種屬性、一個(gè)等號(沒有前導(dǎo)或結(jié)尾空白)和一個(gè)引起來的字符串</p><p>  文件resource.jsp包含bean:message標(biāo)記的幾個(gè)實(shí)例。以下是標(biāo)記的示例用法:</p><p>  <

85、bean:message key=“market. text. title”/></p><p><b>  資源束</b></p><p>  在最簡單的情況下,bean:message標(biāo)記解析為存儲(chǔ)在根據(jù)屬性文件創(chuàng)建的資源束中的字符串:</p><p>  ― 屬性文件的名稱是用來調(diào)用ActoinServlet的web.xml “ap

86、plication”參數(shù)的值。如:</p><p>  \WEB-INF\classes\ApplicationResources.properties</p><p>  ― 消息標(biāo)記中的key屬性指向?qū)傩晕募械摹版I-字符串”對;在本例中,指向下面的“鍵-字符串”對:</p><p>  market. text.title=Current Market Con

87、ditions</p><p>  可以采用各種方法來定制bean:message標(biāo)記,以便(例如)JSP在運(yùn)行時(shí)引用不同的屬性文件。標(biāo)記提供了一種方法來支持多種語言以及最多將四個(gè)替代值插入到字符串中來代替{0}、{1}等等。</p><p>  僅當(dāng)指定的對象或值存在時(shí),logic:present 標(biāo)記才會(huì)導(dǎo)致顯示嵌套的文本。在register.jsp中,僅當(dāng)操作類創(chuàng)建了作為 ticke

88、rBean引用(在任何作用域中)的 Java bean 時(shí)才為用戶提供HTML表行。 Struts標(biāo)記為如下所示:</p><p>  <logic:present name=“tickerBean”></p><p>  -->nested content for presentation<--</p><p>  </logic:p

89、resent></p><p>  Struts標(biāo)記允許很方便地訪問Java bean內(nèi)容。例如,以下標(biāo)記將解析為存儲(chǔ)在 tickerBean中的值:</p><p>  <bean:write name= “tickerBean”property=“DJChange”/></p><p>  tickerBean的源代碼在以下目錄中:</

90、p><p>  Trade\Java Source\tradeCommon\tickerBean.java</p><p>  HTML表單與表單bean之間的數(shù)據(jù)傳送是通過使用html:form 和html:text標(biāo)記來完成的。 register.jsp中的輸入表單是按如下所示構(gòu)建的:</p><p>  <html:form action= “/regist

91、er”></p><p>  -->nested form content with html: text tags<--</p><p>  </html:form action></p><p>  html:form 標(biāo)記解析為HTML FORM 標(biāo)記并導(dǎo)致html: text 標(biāo)記引用適當(dāng)?shù)谋韱蝏ean;特別是在 path=“/

92、register”的 Struts配置文件的 <action>標(biāo)記中標(biāo)識的表單 bean。</p><p>  html:text標(biāo)記建立HTML輸入字段。例如,以下標(biāo)記確保在HTML輸入字段與表單bean的用戶名字段之間傳送信息:</p><p>  <html:text property=“username”size=“40”/></p><

93、p>  JSP視窗組件所使用的 struts標(biāo)記庫由四類標(biāo)記組成:</p><p>  Bean標(biāo)記:用來在JSP頁中管理bean</p><p>  邏輯標(biāo)記:用來在JSP頁中控制流程</p><p>  HTML標(biāo)記:用來生成HTML標(biāo)記,在表單中顯示數(shù)據(jù),使用會(huì)話ID對URL進(jìn)行編程</p><p>  模板標(biāo)記:使用動(dòng)

94、態(tài)模板構(gòu)造普通格式的頁</p><p><b>  Bean標(biāo)記</b></p><p>  這個(gè)標(biāo)記庫中包含用于定義新bean、訪問bean及其屬性的標(biāo)記。Struts框架提供了多種自定義標(biāo)記用來在JSP頁中處理JavaBean。這些標(biāo)記被封裝在一個(gè)普通的標(biāo)記庫中,在文件struts-bean.tld中定義了它的標(biāo)記庫描述器。Bean標(biāo)記庫將標(biāo)記定義在四個(gè)子類別中:

95、</p><p>  創(chuàng)建和復(fù)制bean的標(biāo)記</p><p><b>  腳本變量定義標(biāo)記</b></p><p><b>  bean翻譯標(biāo)記</b></p><p><b>  消息國際化標(biāo)記</b></p><p><b>  Bean

96、復(fù)制標(biāo)記</b></p><p>  可定義新bean,可復(fù)制現(xiàn)有bean,還可從現(xiàn)有bean復(fù)制屬性。</p><p>  <bean:define>標(biāo)記用來:</p><p><b>  定義新字符串常數(shù)</b></p><p>  將現(xiàn)有的bean復(fù)制到新定義的bean對象</p>

97、;<p>  復(fù)制現(xiàn)有bean的屬性來創(chuàng)建新的bean</p><p>  例如:定義一個(gè)bean:</p><p>  <bean:define id=”test” value=”this is a test”/></p><p>  源bean在頁作用域中被拷貝大哦請求作用域中的另一個(gè)bean:</p><p>

98、  <bean:define id=”targetBean” name=”sourceBean”</p><p>  scope=”page” toScope=”request”/></p><p><b>  定義腳本變量的標(biāo)記</b></p><p>  從多種資源中定義和生成腳本變量,這些資源包括cookie,請求參數(shù),HTT

99、P標(biāo)頭等等。例如:</p><p>  <bean:cookie id=”myCookie” name=”userName”/></p><p>  腳本變量名稱是myCookie,用來創(chuàng)建這個(gè)屬性的cookie的名稱是userName。</p><p>  <bean:header id=”myHeader” name=”Accept-Langu

100、age”/></p><p>  腳本變量名稱是myHeader,請求標(biāo)頭的名稱是Accept-Language。</p><p>  <bean:parameter id=”myParameter” name=”myParameter”></p><p>  腳本變量名稱是myPatameter,它保存的請求參數(shù)的名稱也是myParameter。

101、</p><p>  <bean:include>標(biāo)記將對一個(gè)資源的響應(yīng)進(jìn)行檢索,并引入一個(gè)腳本變量和字符串類型的頁作用域?qū)傩浴_@個(gè)資源可以是一個(gè)頁,一個(gè)ActionForward或一個(gè)外部URL。與<jsp:include>的不同是資源的響應(yīng)被存儲(chǔ)到一個(gè)頁作用域的bean中,而不是寫入到輸出流。例如:</p><p>  <bean:include id=”

102、myInclude” page=”MyJsp?x=1”/></p><p>  腳本變量的名稱是myInclude,要檢索的響應(yīng)來自資源MyJsp?x=1。</p><p>  <bean:resource>標(biāo)記將檢索web應(yīng)用中的資源,并引入一個(gè)腳本變量和InputStream或字符串類型的頁作用域?qū)傩?。如果在檢索資源時(shí)發(fā)生問題,就會(huì)產(chǎn)生一個(gè)請求時(shí)間異常。例如:<

103、/p><p>  <bean:resource id=”myResource” name=”/WEB-INF/images/myResource.xml”/></p><p>  腳本變量的名稱是myResource,要檢索的資源的名稱是myResource.xml。</p><p><b>  顯示Bean屬性</b></p&g

104、t;<p>  標(biāo)記庫中定義了<bean:write>標(biāo)記,用來將bean的屬性輸送到封裝的JSP頁寫入器。這個(gè)標(biāo)記與<jsp:getProperty>類似,例如:</p><p>  <bean:write name=”myBean” property=”myProperty” scope=”request” filter=”true”/></p>

105、<p>  myBean的屬性myProperty將會(huì)被顯示,作用域?yàn)檎埱?,如果發(fā)現(xiàn)任何HTML特殊字符都將被轉(zhuǎn)化為相應(yīng)的實(shí)體引用。</p><p><b>  消息標(biāo)記和國際化</b></p><p>  struts框架支持國際化和本地化。用戶在他們的計(jì)算機(jī)中定義自己所在的區(qū)域,當(dāng)web應(yīng)用程序需要輸出一條消息時(shí),它將引用一個(gè)資源文件,在這個(gè)文件中所有

106、的消息都使用了適當(dāng)?shù)恼Z言。一個(gè)應(yīng)用程序可能提供了很多資源文件,每個(gè)文件提供了用不同語言編寫的消息。如果沒有找到所選語言的資源文件,就將使用默認(rèn)的資源文件。</p><p>  struts框架對國際化的支持是使用<bean:message>標(biāo)記,以及使用java.util數(shù)據(jù)包中定義的Locale和ResourceBundle類來實(shí)現(xiàn)Java2平臺(tái)對這些任務(wù)的支持。Java.text.MessageF

107、ormat類定義的技術(shù)可以支持消息的格式。利用此功能,開發(fā)人員不需了解這些類的細(xì)節(jié)就可進(jìn)行國際化和設(shè)置消息的格式。</p><p>  用struts實(shí)現(xiàn)國際化和本地化:</p><p>  第一步要定義資源文件的名稱,這個(gè)文件會(huì)包含用默認(rèn)語言編寫的在程序中會(huì)出現(xiàn)的所有消息。這些消息以“關(guān)鍵字-值”的形式存儲(chǔ),如下:</p><p>  error.validati

108、on.location = The entered location is invalid</p><p>  這個(gè)文件需要存儲(chǔ)在類的路徑下,而且它的路徑要作為初始化參數(shù)傳送給ActionServlet作為參數(shù)進(jìn)行傳遞時(shí),路徑的格式要符合完整Java類的標(biāo)準(zhǔn)命名規(guī)范。比如,如果資源文件存儲(chǔ)在WEB-INF\classes目錄中,文件名是ApplicationResources.properties,那么需要傳遞的

109、參數(shù)值是ApplicationResources。如果文件在WEB-INF\classes\com\test中,那么參數(shù)值就應(yīng)該是com.test. ApplicationResources。</p><p>  為了實(shí)現(xiàn)國際化,所有的資源文件必須都存儲(chǔ)在基本資源文件所在的目錄中?;举Y源文件包含的是用默認(rèn)地區(qū)語言-本地語言編寫的消息。如果基本資源文件的名稱是ApplicationResources.proper

110、ties,那么用其他特定語言編寫的資源文件的名稱就應(yīng)該是ApplicationResources_xx.properties(xx為ISO編碼,如英語是en)。因此這些文件應(yīng)包含相同的關(guān)鍵字,但關(guān)鍵字的值是用特定語言編寫的。</p><p>  ActionServlet的區(qū)域初始化參數(shù)必須與一個(gè)true值一起傳送,這樣ActionServlet就會(huì)在用戶會(huì)話中的Action.LOCALE_KEY關(guān)鍵字下存儲(chǔ)一個(gè)

111、特定用戶計(jì)算機(jī)的區(qū)域?qū)ο蟆,F(xiàn)在可以運(yùn)行一個(gè)國際化的web站點(diǎn),它可以根據(jù)用戶計(jì)算機(jī)上的設(shè)置的區(qū)域自動(dòng)以相應(yīng)的語言顯示。</p><p>  我們還可以使用特定的字符串來替換部分消息,就象用java.text.MessageFormat的方法一樣:</p><p>  error.invalid.number = The number {0} is valid</p><

112、p>  我們可以把字符串{0}替換成任何我們需要的數(shù)字。例如:資源文件中定義了一個(gè)消息:</p><p>  info.myKey = The numbers entered are {0},{1},{2},{3}</p><p>  我們可使用下面的消息標(biāo)記:</p><p>  <bean:message key=”info.myKey” arg0=

113、”5” arg1=”6” arg2=”7” arg3=”8”/></p><p>  這個(gè)信息標(biāo)記輸出到JSP頁會(huì)顯示為:The numbers entered are 5,6,7,8</p><p><b>  邏輯標(biāo)記</b></p><p>  邏輯庫的標(biāo)記能夠用來處理外觀邏輯而不需要使用scriptlet.Struts邏輯標(biāo)簽庫包

114、含的標(biāo)記能夠有條件地產(chǎn)生輸出文本,在對象集合中循環(huán)從而重復(fù)地產(chǎn)生輸出文本,以及應(yīng)用程序流程控制。它也提供了一組在JSP頁中處理流程控制的標(biāo)記。這些標(biāo)記封裝在文件名為struts-logic。tld的標(biāo)記包中。邏輯標(biāo)記庫定義的標(biāo)記能夠執(zhí)行下列三個(gè)功能:</p><p><b>  條件邏輯</b></p><p><b>  重復(fù)</b></

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論