

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 基于JAVA的學習管理系統(tǒng)(LMS)</p><p><b> —前臺程序設(shè)計</b></p><p> [摘要] 學習管理系統(tǒng)是指通過計算機、網(wǎng)絡(luò)等數(shù)字化方法進行學習與教學的系統(tǒng),它充分利用IT技術(shù)為教學活動提供了一個具有全新溝通機制與資源豐富的學習環(huán)境,實現(xiàn)了一種新的學習方式。本系統(tǒng)是基于Java平臺,Struts框架,MVC設(shè)計模式實現(xiàn)
2、的。提供了一個簡潔、高效、穩(wěn)定的在線學習管理系統(tǒng),旨在為教師、學生的教與學提供一個方便的交流平臺。</p><p> 首先本文對系統(tǒng)所采用的JSP,Struts,JSTL和Ajax技術(shù)的概念,原理進行了簡要的介紹,接下來對系統(tǒng)Web界面的設(shè)計和實現(xiàn)作了詳細的介紹。系統(tǒng)web界面即前臺部分由10個功能模塊組成,包括announcement,calendar,course,fourm,homework,resour
3、ce,email,option,login和grade模塊。本文詳細介紹了各個模塊的頁面表單設(shè)計,頁面流程等。在web 用戶界面部分開發(fā)過程中,采用了大量的struts和jstl標簽,使得頁面顯得簡潔,高效而又不失美觀。</p><p> 最后,本文對系統(tǒng)的運行結(jié)果做了大致的介紹,包括對主要用戶界面的詳細說明。</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標簽庫10</p><p> 1.
11、2 JSP的介紹22</p><p> 1.2.1 JSP的概念和體系結(jié)構(gòu)23</p><p> 1.2.2 JSP標簽庫25</p><p> 1.2.3 JSP的優(yōu)缺點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的標簽介紹28</p><p> 1.3.3 JSTL的優(yōu)缺點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)缺點29</p><p> 1.4
13、.3 Ajax的框架介紹30</p><p> 第二章 系統(tǒng)總體設(shè)計32</p><p> 2.1 系統(tǒng)目標32</p><p> 2.2 系統(tǒng)特性32</p><p> 2.3 Web UI模塊設(shè)計32</p><p> 第三章 系統(tǒng)詳細設(shè)計34</p><p> 3.
14、1 Web UI詳細設(shè)計34</p><p> 3.1.1 announcement模塊詳細設(shè)計34</p><p> 3.1.2 calendar模塊詳細設(shè)計34</p><p> 3.1.3 course模塊詳細設(shè)計35</p><p> 3.1.4 forum模塊詳細設(shè)計37</p><p>
15、 3.1.5 homework模塊詳細設(shè)計38</p><p> 3.1.6 resource模塊詳細設(shè)計39</p><p> 3.1.7 email模塊詳細設(shè)計39</p><p> 3.1.8 option模塊詳細設(shè)計40</p><p> 3.1.9 login模塊詳細設(shè)計41</p><p>
16、; 3.1.10 grade模塊詳細設(shè)計41</p><p> 第四章 運行結(jié)果44</p><p><b> 結(jié)論53</b></p><p><b> 致謝語54</b></p><p><b> [參考文獻]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> 學習管理系統(tǒng)是一個教育單位不可缺少的部分,它的內(nèi)容對于學校的決策者和
28、管理者來說都至關(guān)重要,所以學習管理系統(tǒng)應(yīng)該能夠為用戶提供充足的信息和快捷的查詢手段。但一直以來人們使用傳統(tǒng)人工的方式管理教學活動,這種管理方式存在著許多缺點,如:效率低、保密性差。另外,時間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找、更新和維護都帶來了不少的困難。隨著科學技術(shù)的不斷提高,計算機科學日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。作為計算機應(yīng)用的一部分,使用計算機對教學活動進行管理
29、,具有著手工管理所無法比擬的優(yōu)點。例如,檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點能夠極大地提高學生教學活動管理的效率,也是企業(yè)的科學化、正規(guī)化管理,與世界接軌的重要條件。因此,開發(fā)這樣一套管理軟件成為很有必要的事情,在下面的各章中我們將以開發(fā)一套學習管理系統(tǒng)為例,談?wù)勂溟_發(fā)過程和所涉及到的問題及解決方法。</p><p> 本系統(tǒng)基于Java平臺,Struts框架和MVC設(shè)計
30、模式來實現(xiàn),整個系統(tǒng)由客戶端(前臺)和服務(wù)器端(后臺)程序組成,并通過對Java,Struts網(wǎng)絡(luò)編程技術(shù)的詳細介紹,深入地探討了該學習管理系統(tǒng)的設(shè)計與實現(xià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組成。基于Struts構(gòu)架的web應(yīng)用程序基本上符合JSP Model2的設(shè)計標準,可以說是MVC設(shè)計模式的一種變化類型。根據(jù)上面對framework的描述,我們很容易理解為什么說Struts是一個web framwork,而不僅僅是一些標記庫的組合。但 Struts 也包含了豐富的標
32、記庫和獨立于該框架工作的實用程序類。Struts有其自己的控制器(Controller),同時整合了其他的一些技術(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ā)。按照J2EE Architecture的標準,struts應(yī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)客戶請求時候,各個部分工作的原理。</p><p> 圖1-2 Struts體系結(jié)構(gòu)</p><p> 從視圖角度(Vie
35、w)</p><p> 首先,Struts提供了Java類org.apache.struts.action.ActionForm,Java開發(fā)者將該類細分來創(chuàng)建表單bean。在運行時,該bean有兩種用法:</p><p> ― 當JSP準備相關(guān)的HTML,表單以進行顯示時,JSP將訪問該bean(它保存要放入表單中的值)。那些值是從業(yè)務(wù)邏輯或者是從先前的用戶輸入來提供的。</
36、p><p> ― 當從Web瀏覽器中返回用戶輸入時,該bean將驗證并保存該輸入以供業(yè)務(wù)邏輯或(如果驗證失敗的話)后續(xù)重新顯示使用。</p><p> 其次,Struts提供了許多定制JSP標記,它們的使用簡單,但是它們在隱藏信息方面功能強大。例如,除了bean名稱和給定bean中每個段的名稱之外,頁面設(shè)計者不需要知道有關(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這幾個組件協(xié)調(diào)完成(也許這幾個組件,應(yīng)該劃分到模型中的業(yè)務(wù)邏輯一塊)。其中,Action扮演了真正的控制邏輯的實現(xiàn)者,而ActionMapping和ActionForward則指定了不同業(yè)務(wù)邏輯或流程的運行方向。</p><p> Struts的基本組件包</p><p> 整個struts大約有15包,近200
39、個類所組成,而且數(shù)量還在不斷的擴展。在此我們不能一一介紹,只能列舉幾個主要的簡要的介紹一下。下表說明了目前struts api中基本的幾個組件包,包括action、actions、config、util、taglib、validator。下圖則顯現(xiàn)了這幾個組件包之間的關(guān)系。其中action是整個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的四個核心組件介紹來具體說明。這幾個組件就是:ActionServlet,Action Classes,Action Mapping(此處包括ActionForward),Action
41、From Bean。</p><p> Struts ActionServlet控制器對象</p><p> ActionServlet繼承自javax.servlet.http.HttpServlet類,其在Struts framework中扮演的角色是中心控制器。它提供一個中心位置來處理全部的終端請求??刂破鰽ctionServlet主要負責將HTTP的客戶請求信息組裝后,根據(jù)配置
42、文件的指定描述,轉(zhuǎn)發(fā)到適當?shù)奶幚砥鳌?lt;/p><p> 按照Servelt的標準,所有得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的模式存在并映射到這個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> 一個該模式的請求URI符合如下格式: </p><p> http://www.my_site_name.com/mycontext/actionName.do</p><p> 中心控制器為所有的表示層請求提供了一個集中的訪問點。這個控制器提供的抽
46、象概念減輕了開發(fā)者建立公共應(yīng)用系統(tǒng)服務(wù)的困難,如管理視圖、會話及表單數(shù)據(jù)。它也提供一個通用機制如錯誤及異常處理,導航,國際化,數(shù)據(jù)驗證,數(shù)據(jù)轉(zhuǎn)換等。</p><p> 當用戶向服務(wù)器端提交請求的時候,實際上信息是首先發(fā)送到控制器ActionServlet,一旦控制器獲得了請求,其就會將請求信息傳交給一些輔助類(help classes)處理。這些輔助類知道如何去處理與請求信息所對應(yīng)的業(yè)務(wù)操作。在Struts中,
47、這個輔助類就是org.apache.struts.action.Action。通常開發(fā)者需要自己繼承Aciton類,從而實現(xiàn)自己的Action實例。</p><p> Struts Action Classes </p><p> ActionServlet把全部提交的請求都被控制器委托到RequestProcessor對象。RequestProcessor使用struts-confi
48、g.xml文件檢查請求URI找到動作Action標示符。</p><p> 一個Action 類的角色,就像客戶請求動作和業(yè)務(wù)邏輯處理之間的一個適配器(Adaptor),其功能就是將請求與業(yè)務(wù)邏輯分開。這樣的分離,使得客戶請求和Action類之間可以有多個點對點的映射。而且Action類通常還提供了其它的輔助功能,比如:認證(authorization)、日志(logging)和數(shù)據(jù)驗證(validation)
49、。</p><p> Action最為常用的是execute()方法。(注意,以前的perform方法在struts1.1中已經(jīng)不再支持),還有一個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> 當Controller收到客戶的請求的時候,在將請求轉(zhuǎn)移到一個Action實例時,如果這個實例不存在,控制器會首先創(chuàng)建,然后會調(diào)用這個Action實例的execute()方法。Struts Framework為應(yīng)用系統(tǒng)中的每一個Action類只創(chuàng)建一個實例。因為所有的用戶都使用這一個實例,所以你必須確定你的Action 類運行在一個多線程的環(huán)境中。下圖顯示了一個execute()方法如
55、何被訪問:</p><p> 圖1-4 Action實例的execute()方法</p><p> 注意,客戶自己繼承的Action子類,必須重寫execute()方法,因為Action類在默認情況下是返回null的。</p><p> Struts Action Mapping</p><p> 上面講到了一個客戶請求是如何被控制
56、器轉(zhuǎn)發(fā)和處理的,但是,控制器如何知道什么樣的信息轉(zhuǎn)發(fā)到什么樣的Action類呢?這就需要一些與動作和請求信息相對應(yīng)的映射配置說明。在struts 中,這些配置映射信息是存儲在特定的XML文件(比如struts-config.xml)。 </p><p> 這些配置信息在系統(tǒng)啟動的時候被讀入內(nèi)存,供struts framework在運行期間使用。在內(nèi)存中,每一個<action>元素都與org.apa
57、che.struts.action.ActionMapping類的一個實例對應(yīng)。下表就顯示了一個登陸的配置映射。</p><p> 上面的配置表示:當可以通過/logonAction.do(此處假設(shè)配置的控制器映射為*.do)提交請求信息的時候,控制器將信息委托com.test.LogonAction處理。調(diào)用LogonAction實例的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> 同時將Mapping實例
59、和所對應(yīng)的LogonForm Bean信息傳入。其中name=LogonForm,使用的form-bean元素所聲明的ActionForm Bean。有關(guān)form-bean的申明如下顯示。</p><p> 使用ActionForward導航</p><p> 元素<forward>則表示了當Action實例的execute()方法運行完畢或,控制器根據(jù)Mapping可將響
60、應(yīng)信息轉(zhuǎn)到適當?shù)牡胤?。如上面現(xiàn)實,如果客戶登陸成功,則調(diào)用welcome forward,將成功信息返回到/welcome.jsp頁面。在你的execute()方法的結(jié)尾可以使用下面的實例代碼而返回welcome forward。當然你的welcome forward必須在action元素屬性中定義,正如上面所聲明的那樣。</p><p> return (mapping.findForward("w
61、elcome"));</p><p> ActionForward對象是配置對象。這些配置對象擁有獨一無二的標識以允許它們按照有意義的名稱如“success”,“failure”等來檢索。ActionForward對象封裝了向前進的URL路徑且被請求處理器用于識別目標視圖。ActionForward對象建立自<forward>元素位于struts-config.xml。下面是一個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é)果,當傳遞一個值匹配指定于<forward>元素中name屬性的值的時候,下一個視圖可以在execute(…)方法中被開發(fā)者用方便的方法org.apache.struts.actio
65、n.ActionMapping.findForward(…)選擇。ActionMapping.findForward(…)方法既從它的本地范圍又從全局范圍提供一個ActionForward對象,該對象返回至RequestProcessor以RequestDispatcher.forward(…)或response.sendRedirect(…)調(diào)用下一個視圖。當<forward>元素有redirect=“false”屬性或r
66、edirect屬性不存在的時候,RequestDispatcher.forward(…)被執(zhí)行;當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因為HttpServletResponse.sendRedirect(…)中解釋URL采用”/”開頭相對于servlet容器根目錄。</p><p> 如果redirect=false, URI建立如/path因為ServletContext.getRequestDisp
68、tacher(…)采用虛擬目錄相關(guān)URL。</p><p> 在此稍稍說一下有關(guān)global-forwards的概念。其在配置文件中描述了整個應(yīng)用系統(tǒng)可以使用的ActionForward,而不是僅僅是一個特定的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> 一個應(yīng)用系統(tǒng)的消息轉(zhuǎn)移(或者說狀態(tài)轉(zhuǎn)移)的非持久性數(shù)據(jù)存儲,是由ActionForm Bean的負責保持的。ActionForm派生的對象用于保存請求對象的參數(shù),因此它們和用戶緊密聯(lián)系。一個ActionForm類被RequestProcessor建立。這是發(fā)生在已完成向前進到一個URL,該URL為映射到控制器servlet而不是JSP和相應(yīng)的動作映射指定的表單屬性的。在
71、這個情況下,如果沒有在指定的活動范圍內(nèi)找到,RequestProcessor將嘗試尋找可能導致創(chuàng)建一個新ActionForm對象的表單bean。該ActionForm對象在指定的活動范圍內(nèi)被用<action>元素的name屬性找到;</p><p> RequestProcessor將隨后重新安排表單屬性,用請求時參數(shù)填充表單,隨即調(diào)用表單對象的validate(…)方法以履行服務(wù)器端用戶輸入驗證。
72、僅當ActionMapping對象中validate屬性被設(shè)為true時,validate(…)方法被調(diào)用;這就是默認的行為。request.getParameterValues(parameterName)被用于得到一個String[]對象,它用來表單填充;驗證的結(jié)果應(yīng)該是一個ActionErrors對象,用org.apache.struts.taglib.html.ErrorsTag來顯示驗證錯誤給用戶。ActionForm也可以被
73、用于為當前用戶保存即將被一個視圖引用的中間模型狀態(tài)。</p><p> 當一個表單對象被RequestProcessor找到,它被傳遞到請求處理器的execute(…)方法。一個ActionForm對象也可以被請求處理器建立。表單對象建立目的是提供中間模型狀態(tài)給使用請求范圍JSP;這將確保對象不會在有效性過期后仍然存在。默認的,所有的表單都被保存為會話范圍。會話中表單對象脫離有效性的存在可能導致浪費內(nèi)存,同樣的
74、,請求處理器必須跟蹤保存在會話中的表單對象的生命周期。一個好的捕獲表單數(shù)據(jù)的實踐是為橫跨多用戶交互的相關(guān)表單用一個單獨的表單bean。表單bean也可以在反饋的時候用來儲存能夠被自定義標簽改變的中間模型狀態(tài)。在視圖中標簽用法避免結(jié)合Java代碼,因此要成一個好的任務(wù)劃分,web生產(chǎn)組主要處理標志,而應(yīng)用開發(fā)組主要處理Java代碼。標簽因素退出訪問中間模型狀態(tài)的邏輯;當訪問嵌套的對象或當通過聚集列舉時這個邏輯可能很復雜。</p>
75、;<p> Struts的其他組件</p><p> Struts framework本身提供了很多可擴展的組件或sub framework,方便開發(fā)人員在其構(gòu)架上構(gòu)建web層的應(yīng)用系統(tǒng)。比如upload、collections、logging等等。讓我們來看看兩個比較重要的組件: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ù)提交的驗證。將原本需要在ActionFrom Bean的validate()進行的驗證通過配置文件的描述進行
77、驗證。</p><p> 有關(guān)其詳細信息,請參考http://home.earthlink.net/~dwinterfeldt 。個人建議對于小型應(yīng)用系統(tǒng)可以采用這種配置方式,但是對于應(yīng)用系統(tǒng)中有大量web層表單應(yīng)用的系統(tǒng),并且業(yè)務(wù)需求變動比較大的,使用validation framework 可能會加重開發(fā)難度、系統(tǒng)維護難度。可以借鑒validation framework的Javascript Valida
78、tor Tag。 </p><p> 1.1.3 Struts標簽庫</p><p><b> 定制JSP標記</b></p><p> Struts提供了用來封裝邏輯的各種定制JSP標記,因此頁面設(shè)計者可以將主要精力花在頁面的可視特征上,而不必主要考慮Java語法或其它JSP語法,在下列標識庫描述符中引用了Struts標記:</p
79、><p> Struts-bean.tld</p><p> 使訪問bean以及新bean的定義更容易,,為了實現(xiàn)國際化,應(yīng)使用不同的屬性文件</p><p> struts-html.tld</p><p> 提供顯示HTML對象(例如,表單、按鈕和復選框)的簡便方法</p><p> struts-logic
80、.tld</p><p> 支持邏輯構(gòu)造,以便可以有條件地顯示文本或者作為處理循環(huán)的結(jié)果來顯示文本</p><p> struts-template.tld</p><p> 支持使用在運行時可以修改的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> 每個<taglib>偽指令都
82、具有與基于 web.xml的< taglib>標記中的URL相匹配的URL。另外JSP中的每個 struts標記都使用一個使標記與特定標記庫描述符相關(guān)的前綴:</p><p> ― 沒有嵌套內(nèi)容的標記可以采用以下格式:</p><p> <prefix:tagName attributesAndValues/></p><p> ― 嵌套內(nèi)容是在
83、一對標記之間嵌套的:</p><p> <prefix:tagName attributesAndValues /></p><p> </prefix:tagName></p><p> prefix:在JSP taglib偽指令中指定的前綴</p><p> tagNam:標記的名稱,如標記庫描述符中所述;
84、描述符條目指定提供標記邏輯的Jave類</p><p> attributesAndValues:― 系列屬性與值的配對(是必需的或者是可選的),每個配對都包括一種屬性、一個等號(沒有前導或結(jié)尾空白)和一個引起來的字符串</p><p> 文件resource.jsp包含bean:message標記的幾個實例。以下是標記的示例用法:</p><p> <
85、bean:message key=“market. text. title”/></p><p><b> 資源束</b></p><p> 在最簡單的情況下,bean:message標記解析為存儲在根據(jù)屬性文件創(chuàng)建的資源束中的字符串:</p><p> ― 屬性文件的名稱是用來調(diào)用ActoinServlet的web.xml “ap
86、plication”參數(shù)的值。如:</p><p> \WEB-INF\classes\ApplicationResources.properties</p><p> ― 消息標記中的key屬性指向?qū)傩晕募械摹版I-字符串”對;在本例中,指向下面的“鍵-字符串”對:</p><p> market. text.title=Current Market Con
87、ditions</p><p> 可以采用各種方法來定制bean:message標記,以便(例如)JSP在運行時引用不同的屬性文件。標記提供了一種方法來支持多種語言以及最多將四個替代值插入到字符串中來代替{0}、{1}等等。</p><p> 僅當指定的對象或值存在時,logic:present 標記才會導致顯示嵌套的文本。在register.jsp中,僅當操作類創(chuàng)建了作為 ticke
88、rBean引用(在任何作用域中)的 Java bean 時才為用戶提供HTML表行。 Struts標記為如下所示:</p><p> <logic:present name=“tickerBean”></p><p> -->nested content for presentation<--</p><p> </logic:p
89、resent></p><p> Struts標記允許很方便地訪問Java bean內(nèi)容。例如,以下標記將解析為存儲在 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標記來完成的。 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 標記解析為HTML FORM 標記并導致html: text 標記引用適當?shù)谋韱蝏ean;特別是在 path=“/
92、register”的 Struts配置文件的 <action>標記中標識的表單 bean。</p><p> html:text標記建立HTML輸入字段。例如,以下標記確保在HTML輸入字段與表單bean的用戶名字段之間傳送信息:</p><p> <html:text property=“username”size=“40”/></p><
93、p> JSP視窗組件所使用的 struts標記庫由四類標記組成:</p><p> Bean標記:用來在JSP頁中管理bean</p><p> 邏輯標記:用來在JSP頁中控制流程</p><p> HTML標記:用來生成HTML標記,在表單中顯示數(shù)據(jù),使用會話ID對URL進行編程</p><p> 模板標記:使用動
94、態(tài)模板構(gòu)造普通格式的頁</p><p><b> Bean標記</b></p><p> 這個標記庫中包含用于定義新bean、訪問bean及其屬性的標記。Struts框架提供了多種自定義標記用來在JSP頁中處理JavaBean。這些標記被封裝在一個普通的標記庫中,在文件struts-bean.tld中定義了它的標記庫描述器。Bean標記庫將標記定義在四個子類別中:
95、</p><p> 創(chuàng)建和復制bean的標記</p><p><b> 腳本變量定義標記</b></p><p><b> bean翻譯標記</b></p><p><b> 消息國際化標記</b></p><p><b> Bean
96、復制標記</b></p><p> 可定義新bean,可復制現(xiàn)有bean,還可從現(xiàn)有bean復制屬性。</p><p> <bean:define>標記用來:</p><p><b> 定義新字符串常數(shù)</b></p><p> 將現(xiàn)有的bean復制到新定義的bean對象</p>
97、;<p> 復制現(xiàn)有bean的屬性來創(chuàng)建新的bean</p><p> 例如:定義一個bean:</p><p> <bean:define id=”test” value=”this is a test”/></p><p> 源bean在頁作用域中被拷貝大哦請求作用域中的另一個bean:</p><p>
98、 <bean:define id=”targetBean” name=”sourceBean”</p><p> scope=”page” toScope=”request”/></p><p><b> 定義腳本變量的標記</b></p><p> 從多種資源中定義和生成腳本變量,這些資源包括cookie,請求參數(shù),HTT
99、P標頭等等。例如:</p><p> <bean:cookie id=”myCookie” name=”userName”/></p><p> 腳本變量名稱是myCookie,用來創(chuàng)建這個屬性的cookie的名稱是userName。</p><p> <bean:header id=”myHeader” name=”Accept-Langu
100、age”/></p><p> 腳本變量名稱是myHeader,請求標頭的名稱是Accept-Language。</p><p> <bean:parameter id=”myParameter” name=”myParameter”></p><p> 腳本變量名稱是myPatameter,它保存的請求參數(shù)的名稱也是myParameter。
101、</p><p> <bean:include>標記將對一個資源的響應(yīng)進行檢索,并引入一個腳本變量和字符串類型的頁作用域?qū)傩浴_@個資源可以是一個頁,一個ActionForward或一個外部URL。與<jsp:include>的不同是資源的響應(yīng)被存儲到一個頁作用域的bean中,而不是寫入到輸出流。例如:</p><p> <bean:include id=”
102、myInclude” page=”MyJsp?x=1”/></p><p> 腳本變量的名稱是myInclude,要檢索的響應(yīng)來自資源MyJsp?x=1。</p><p> <bean:resource>標記將檢索web應(yīng)用中的資源,并引入一個腳本變量和InputStream或字符串類型的頁作用域?qū)傩浴H绻跈z索資源時發(fā)生問題,就會產(chǎn)生一個請求時間異常。例如:<
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> 標記庫中定義了<bean:write>標記,用來將bean的屬性輸送到封裝的JSP頁寫入器。這個標記與<jsp:getProperty>類似,例如:</p><p> <bean:write name=”myBean” property=”myProperty” scope=”request” filter=”true”/></p>
105、<p> myBean的屬性myProperty將會被顯示,作用域為請求,如果發(fā)現(xiàn)任何HTML特殊字符都將被轉(zhuǎn)化為相應(yīng)的實體引用。</p><p><b> 消息標記和國際化</b></p><p> struts框架支持國際化和本地化。用戶在他們的計算機中定義自己所在的區(qū)域,當web應(yīng)用程序需要輸出一條消息時,它將引用一個資源文件,在這個文件中所有
106、的消息都使用了適當?shù)恼Z言。一個應(yīng)用程序可能提供了很多資源文件,每個文件提供了用不同語言編寫的消息。如果沒有找到所選語言的資源文件,就將使用默認的資源文件。</p><p> struts框架對國際化的支持是使用<bean:message>標記,以及使用java.util數(shù)據(jù)包中定義的Locale和ResourceBundle類來實現(xiàn)Java2平臺對這些任務(wù)的支持。Java.text.MessageF
107、ormat類定義的技術(shù)可以支持消息的格式。利用此功能,開發(fā)人員不需了解這些類的細節(jié)就可進行國際化和設(shè)置消息的格式。</p><p> 用struts實現(xiàn)國際化和本地化:</p><p> 第一步要定義資源文件的名稱,這個文件會包含用默認語言編寫的在程序中會出現(xiàn)的所有消息。這些消息以“關(guān)鍵字-值”的形式存儲,如下:</p><p> error.validati
108、on.location = The entered location is invalid</p><p> 這個文件需要存儲在類的路徑下,而且它的路徑要作為初始化參數(shù)傳送給ActionServlet作為參數(shù)進行傳遞時,路徑的格式要符合完整Java類的標準命名規(guī)范。比如,如果資源文件存儲在WEB-INF\classes目錄中,文件名是ApplicationResources.properties,那么需要傳遞的
109、參數(shù)值是ApplicationResources。如果文件在WEB-INF\classes\com\test中,那么參數(shù)值就應(yīng)該是com.test. ApplicationResources。</p><p> 為了實現(xiàn)國際化,所有的資源文件必須都存儲在基本資源文件所在的目錄中?;举Y源文件包含的是用默認地區(qū)語言-本地語言編寫的消息。如果基本資源文件的名稱是ApplicationResources.proper
110、ties,那么用其他特定語言編寫的資源文件的名稱就應(yīng)該是ApplicationResources_xx.properties(xx為ISO編碼,如英語是en)。因此這些文件應(yīng)包含相同的關(guān)鍵字,但關(guān)鍵字的值是用特定語言編寫的。</p><p> ActionServlet的區(qū)域初始化參數(shù)必須與一個true值一起傳送,這樣ActionServlet就會在用戶會話中的Action.LOCALE_KEY關(guān)鍵字下存儲一個
111、特定用戶計算機的區(qū)域?qū)ο蟆,F(xiàn)在可以運行一個國際化的web站點,它可以根據(jù)用戶計算機上的設(shè)置的區(qū)域自動以相應(yīng)的語言顯示。</p><p> 我們還可以使用特定的字符串來替換部分消息,就象用java.text.MessageFormat的方法一樣:</p><p> error.invalid.number = The number {0} is valid</p><
112、p> 我們可以把字符串{0}替換成任何我們需要的數(shù)字。例如:資源文件中定義了一個消息:</p><p> info.myKey = The numbers entered are {0},{1},{2},{3}</p><p> 我們可使用下面的消息標記:</p><p> <bean:message key=”info.myKey” arg0=
113、”5” arg1=”6” arg2=”7” arg3=”8”/></p><p> 這個信息標記輸出到JSP頁會顯示為:The numbers entered are 5,6,7,8</p><p><b> 邏輯標記</b></p><p> 邏輯庫的標記能夠用來處理外觀邏輯而不需要使用scriptlet.Struts邏輯標簽庫包
114、含的標記能夠有條件地產(chǎn)生輸出文本,在對象集合中循環(huán)從而重復地產(chǎn)生輸出文本,以及應(yīng)用程序流程控制。它也提供了一組在JSP頁中處理流程控制的標記。這些標記封裝在文件名為struts-logic。tld的標記包中。邏輯標記庫定義的標記能夠執(zhí)行下列三個功能:</p><p><b> 條件邏輯</b></p><p><b> 重復</b></
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的學習管理系統(tǒng)(lms)——后臺程序設(shè)計-畢業(yè)論文
- java程序設(shè)計畢業(yè)論文
- 基于flash的c語言程序設(shè)計學習系統(tǒng)設(shè)計與實現(xiàn)【畢業(yè)論文】
- java程序設(shè)計課程論文
- c程序設(shè)計畢業(yè)論文
- 高校教材征訂系統(tǒng)程序設(shè)計-畢業(yè)論文
- 基于java的倉庫管理系統(tǒng)畢業(yè)論文
- 基于java的餐飲管理系統(tǒng)畢業(yè)論文
- 基于java的餐飲管理系統(tǒng)畢業(yè)論文
- 畢業(yè)論文---基于java的餐飲管理系統(tǒng)
- 基于java的圖書管理系統(tǒng)的設(shè)計畢業(yè)論文
- java程序設(shè)計
- java 程序設(shè)計 編程 實例 初步學習
- 基于java的學生信息管理系統(tǒng)設(shè)計-畢業(yè)論文
- 基于java的圖書館管理系統(tǒng)設(shè)計(畢業(yè)論文)
- 基于java酒店管理系統(tǒng)的設(shè)計與實現(xiàn)_畢業(yè)論文
- 最新基于java的餐飲管理系統(tǒng)(畢業(yè)論文)
- 畢業(yè)論文(基于java的圖書管理系統(tǒng))
- 基于vc手寫數(shù)字識別程序設(shè)計_畢業(yè)論文設(shè)計
- 基于java的酒店管理系統(tǒng)設(shè)計與實現(xiàn)畢業(yè)論文
評論
0/150
提交評論