版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章物聯(lián)網(wǎng)中間件物聯(lián)網(wǎng)中間件根本概念5.1物聯(lián)網(wǎng)中間件關(guān)鍵技術(shù)5.2物聯(lián)網(wǎng)中間件編程實例5.3haoiot來源:好物聯(lián)網(wǎng)中國最大物聯(lián)網(wǎng)論壇:bbs.haoiot5.1物聯(lián)網(wǎng)中間件根本概念
5.1.1物聯(lián)網(wǎng)中間件的定義和分類5.1.2物聯(lián)網(wǎng)中間件的根本組成和特點 5.1.3物聯(lián)網(wǎng)中間件舉例5.1.1物聯(lián)網(wǎng)中間件的定義和分類
1.中間件定義:獨立的系統(tǒng)軟件或效力程序。運用于客戶機、效力器的操作系統(tǒng),管理計算機資源和網(wǎng)絡通訊。銜接兩個獨立運用程序或獨立系統(tǒng)的軟件,使相銜接的系統(tǒng)即使具有不同的接口,利用中間件依然能相互交換信息。執(zhí)行的關(guān)鍵途徑是信息傳送。2.中間件表示圖3.中間件開展史最早具有中間件技術(shù)思想及功能的軟件是IBM的CICS,而CICS不是分布式環(huán)境的產(chǎn)物,因此人們普通把Tuxedo作為第一個嚴厲意義上的中間件產(chǎn)品。
3.中間件開展史 Tuxedo是1984年在當時屬于AT&T的貝爾實驗室開發(fā)完成的,由于分布式處置當時并沒有在商業(yè)運用上獲得像今天一樣的勝利,Tuxedo在很長一段時期里只是實驗室產(chǎn)品,后來被Novell收買,在經(jīng)過Novell并不勝利的商業(yè)推行之后,1995年被如今的BEA公司收買。3.中間件開展史 BEA公司1995年收買Tuxedo才成為一個真正的中間件廠商。IBM的中間件MQSeries也是20世紀90年代的產(chǎn)品,其他許多中間件產(chǎn)品也都是最近幾年才成熟起來。4.中間件主要特點滿足大量運用的需求運轉(zhuǎn)于多種硬件和OS平臺支持分布計算,提供跨網(wǎng)絡、硬件和OS平臺的透明的運用或效力的交互支持規(guī)范的協(xié)議支持規(guī)范的接口5.什么是物聯(lián)網(wǎng)中間件 在物聯(lián)網(wǎng)中采用中間件技術(shù),以實現(xiàn)多個系統(tǒng)和多種技術(shù)之間的資源共享,最終組成一個資源豐富、功能強大的效力系統(tǒng)。6.物聯(lián)網(wǎng)中間件的分類 基于目的和實現(xiàn)機制的不同,業(yè)內(nèi)將中間件分為以下幾類:遠程過程調(diào)用中間件〔RemoteProcedureCall〕面向音訊的中間件〔Message-OrientedMiddleware〕對象懇求代理中間件〔ObjectRequestBrokers〕 幾類中間件可向上提供不同方式的通訊效力,在這些根本的通訊平臺之上,可構(gòu)筑各種框架,為運用程序提供不同領(lǐng)域內(nèi)的效力,如事務處置監(jiān)控器、分布數(shù)據(jù)訪問、對象事務管理器等。7.物聯(lián)網(wǎng)中間件開展的三個階段運用程序中間件階段〔ApplicationMiddleware〕架構(gòu)中間件階段〔InfrastructureMiddleware〕處理方案中間件階段〔SolutionMiddleware〕。目前,物聯(lián)網(wǎng)中間件最主要的代表是RFID中間件,其他的還有嵌入式中間件、數(shù)字電視中間件、通用中間件、M2M物聯(lián)網(wǎng)中間件等。下面,重點引見一下RFID中間件。 RFID中間件扮演RFID標簽和運用程序之間的中介角色,從運用程序端運用中間件所提供一組通用的運用程序接口〔API〕,即能連到RFID讀寫器,讀取RFID標簽數(shù)據(jù)。 這樣一來,即使存儲RFID標簽數(shù)據(jù)的數(shù)據(jù)庫軟件或后端運用程序添加或改由其他軟件取代,或者讀寫RFID讀寫器種類添加等情況發(fā)生時,運用端不需修正也能處置,省去多對多銜接的維護復雜性問題。8.RFID中間件的三大類開展階段〔1〕運用程序中間件開展階段〔2〕根底架構(gòu)中間件開展階段〔3〕處理方案中間件〔SolutionMiddleware〕開展階段。
5.1.2物聯(lián)網(wǎng)中間件的根本組成和特點
根本組成:實現(xiàn)全球物品的一致編碼,給物品打上電子標簽。要實現(xiàn)每個小的運用環(huán)境或系統(tǒng)的規(guī)范化以及它們之間的通訊,必需設(shè)置一個通用的平臺和接口,也就是中間件。以RFID為例,以下圖描畫了中間件在系統(tǒng)中的位置和作用。物聯(lián)網(wǎng)特點:〔1〕獨立于架構(gòu)?!?〕數(shù)據(jù)流?!?〕處置流?!?〕規(guī)范化?!?〕ASPIRE特征:輕量級、可重新編程、智能、適宜當前規(guī)范、可晉級、平安性高、完好。ASPIRE的處理方法是完全開源和免版權(quán)費用,這大大降低了總的開發(fā)本錢。5.1.3物聯(lián)網(wǎng)中間件舉例
〔2〕Hydra定位于操作系統(tǒng)和運用之間的中間件層。中間件包含了眾多軟件組成部分,它們被設(shè)計用于處置各種義務,以完成一個有效利用本錢的智能物聯(lián)網(wǎng)運用開發(fā)過程。可以在新的和曾經(jīng)存在的分布式設(shè)備網(wǎng)絡上協(xié)作。5.1.3物聯(lián)網(wǎng)中間件舉例
〔2〕Hydra它是基于語義方式驅(qū)動的架構(gòu)。Hydra中間件利于實現(xiàn)環(huán)境感知行為和處理在資源受限設(shè)備中處置數(shù)據(jù)的耐久性問題。Hydra平安框架部署了一個規(guī)那么框架。虛擬化構(gòu)造。5.1.3物聯(lián)網(wǎng)中間件舉例
5.2物聯(lián)網(wǎng)中間件關(guān)鍵技術(shù)
5.2.1web效力5.2.2嵌入式中間件技術(shù) 5.2.3萬維物聯(lián)網(wǎng)5.2.4上下文感知技術(shù)Web效力〔WebServices〕就是一種可以經(jīng)過Web描畫、發(fā)布、定位和調(diào)用的模塊化運用。Web效力可以執(zhí)行多種功能,從簡單的懇求到復雜的業(yè)務過程。一旦Web效力被部署,其他的運用程序或是Web效力就可以發(fā)現(xiàn)并且調(diào)用這個部署的效力。5.2.1web效力
Web效力〔WebServices〕向外界提供一個可以經(jīng)過Web進展調(diào)用的API〔ApplicationProgrammingInterface,運用程序編程接口〕,可以用編程的方法經(jīng)過Web來調(diào)用這個運用程序。我們把調(diào)用這個WebServices的運用程序叫做客戶。WebServices舉例:
創(chuàng)建一個WebServices,功能是前往當前的天氣情況。WebServices定義: 建立可互操作的分布式運用程序的平臺。WebServices平臺是一套規(guī)范,它定義了運用程序如何在Web上實現(xiàn)互操作性。WebServices為實現(xiàn)物聯(lián)網(wǎng)的運用與效力提供了一個根本的框架。 WebServices經(jīng)過簡單對象訪問協(xié)議〔SimpleObjectAccessProtocol,SOAP〕來調(diào)用。 SOAP是一種輕量級的音訊協(xié)議,它允許用任何言語編寫的任何類型的對象在任何平臺之上相互通訊。
SOA〔Service-OrientedArchitecture,面向效力的體系構(gòu)造〕是一個組件模型,它將運用程序的不同功能單元經(jīng)過這些效力之間定義的接口和協(xié)議聯(lián)絡起來。 接口是采用中立的方式進展定義的,它應該獨立于實現(xiàn)效力的硬件平臺、操作系統(tǒng)和編程言語。這使得構(gòu)建在各種這樣的系統(tǒng)中的效力可以用一種一致和通用的方式進展交互。這種具有中立的接口定義的特征稱為效力之間的松耦合。松耦合系統(tǒng)的優(yōu)勢主要有兩點:一點是它具有很高的靈敏性另一點是當組成整個運用程序的每個效力的內(nèi)部構(gòu)造和實現(xiàn)逐漸地發(fā)生改動時,它可以繼續(xù)存在 嵌入式系統(tǒng)是以運用為中心,以計算機技術(shù)為根底,并且軟硬件可裁剪,適用于運用系統(tǒng)對功能、可靠性、本錢、體積、功耗有嚴厲要求的公用計算機系統(tǒng)。5.2.2嵌入式中間技術(shù)效力
嵌入式中間件是在嵌入式運用程序和操作系統(tǒng)、硬件平臺之間嵌入的一個中間層,通常定義成一組較為完好的、規(guī)范的運用程序接口。。1.嵌入式Web嵌入式Web效力主要具有以下優(yōu)點?!?〕一致的客戶界面〔2〕平臺獨立性〔3〕高可擴展性〔4〕并行性與分布性1.嵌入式WebWeb效力器 對Web效力器而言,在物理設(shè)備上是指存放那些供客戶訪問的信息資源的計算機或嵌入式系統(tǒng);在軟件上是指可以按照客戶的懇求將信息資源傳送給客戶的運用程序。1.嵌入式WebWeb客戶端 對Web客戶端而言,在物理設(shè)備上是指客戶所運用的本地計算機或者嵌入式設(shè)備;在軟件上是指可以接受Web效力器上的信息資源并展現(xiàn)給客戶的運用程序。 嵌入式Web效力器技術(shù)的中心是HTTP協(xié)議引擎。嵌入式Web效力器經(jīng)過CGI接口和數(shù)據(jù)動態(tài)顯示技術(shù),可以在HTML文件或表格中插入運轉(zhuǎn)代碼,供RAM讀取/寫入數(shù)據(jù)。典型的嵌入式Web效力器系統(tǒng)模型 CGI是通用網(wǎng)關(guān)接口〔CommonGatewayInterface〕的縮寫。它是Web效力器主機與外部擴展運用程序交互的一種規(guī)范接口。 它提供了將參數(shù)傳送給程序并將結(jié)果前往給閱讀器的一種機制。CGI任務流程表示圖 CGI程序可以經(jīng)過以下兩種調(diào)用方式來獲取客戶懇求的內(nèi)容: 一是經(jīng)過URL直接調(diào)用 二經(jīng)過交互式表單〔Form〕來調(diào)用。1.JAVAVM 除了利用Web實現(xiàn)中間件外,JavaVM〔Java虛擬機〕以其良好的跨平臺特性成為了物聯(lián)網(wǎng)中間件的重要平臺。Java編譯執(zhí)行流程圖 每個Java
VM都有兩種機制,一個是裝載具有適宜稱號的類〔類或是接口〕,叫做類裝載子系統(tǒng);另一個是擔任執(zhí)行包含在已裝載的類或接口中的指令,叫做運轉(zhuǎn)引擎。 每個Java
VM又包括方法區(qū)、Java堆、Java棧、程序計數(shù)器和本地方法棧這5個部分,這幾個部分和類裝載機制與運轉(zhuǎn)引擎機制一同組成JavaVM的體系構(gòu)造。JavaVM體系構(gòu)造圖 近幾年來隨著物聯(lián)網(wǎng)的興起,越來越多的研討正在思索將Web技術(shù)與物聯(lián)網(wǎng)技術(shù)相結(jié)合。 基于這樣的思想就產(chǎn)生了萬維物聯(lián)網(wǎng)〔WebofThings〕的概念。5.2.3萬維物聯(lián)網(wǎng)
WebofThings具有以下特性:〔1〕運用HTTP作為運用協(xié)議,HTTP不僅是用來銜接傳感器和網(wǎng)絡的傳輸協(xié)議。〔2〕經(jīng)過REST接口〔或RESTAPI〕將智能設(shè)備的同步功能開放出來。〔3〕智能設(shè)備的異步功能開放采用廣為接受的Web聚合規(guī)范?!?〕前端利用Web的呈現(xiàn)方式,提供直觀、友好的用戶體驗?!?〕開放平臺。 經(jīng)過WebofThings,可以為物聯(lián)網(wǎng)運用帶來了眾多便利,以以下舉其幾點優(yōu)勢:減少智能設(shè)備安裝、整合、執(zhí)行和維護開銷;加快智能設(shè)備安裝和移除速度;對智能設(shè)備可進展挪動和暫時安裝;任何時辰、任何地點都可以提供實時信息效力;加強可視化、可預見、可預告和維護日程的才干;確保各類運用有效和高效率執(zhí)行。WebofThings的根本框架由以下3部分組成:〔1〕網(wǎng)絡節(jié)點集成接口〔IntegrationInterfaceofNetworkNode〕〔2〕基于REST風格終端節(jié)點〔TerminalNodesBasedonRESTStyle〕對智能設(shè)備可進展挪動和暫時安裝;〔3〕網(wǎng)絡Mashup功能〔WebMashupFunction〕加強可視化、可預見、可預告和維護日程的才干;基于REST風格的WebofThings架構(gòu) 上下文感知技術(shù)是用來描畫一種信息空間和物理空間相交融的重要支撐技術(shù),它可以運用戶可用的計算環(huán)境和軟件資源動態(tài)地順應相關(guān)的歷史形狀信息,從而根據(jù)環(huán)境的變化自動地采取符合用戶需求或者設(shè)定的行動。5.2.4上下文感知技術(shù)
上下文感知系統(tǒng)首先必需知道整個物理環(huán)境、計算環(huán)境、用戶形狀等方面的靜態(tài)和動態(tài)信息,即上下文〔context〕。 上下文才干的獲取依賴于上下文感知技術(shù),主要包括上下文的采集、建模、推理及交融等。上下文感知技術(shù)是實現(xiàn)效力自發(fā)性和無縫挪動性的關(guān)鍵?!?〕上下文采集 上下文的運用領(lǐng)域不同,上下文的采集方法也有所不同。通常情況下,有3種方法:傳感類上下文、派生出的上下文〔根據(jù)信息記錄和用戶設(shè)定〕、明確提供的上下文。 采集技術(shù)屬于物聯(lián)網(wǎng)感知層的技術(shù)?!?〕上下文建模 要正確地利用上下文信息,必需對獲得的上下文信息進展建模。上下文信息模型反映了設(shè)計者對上下文的了解,決議了運用什么方法把物理世界里面的一些無意義和無規(guī)律的數(shù)據(jù)轉(zhuǎn)化成計算世界里的邏輯構(gòu)造言語,為實現(xiàn)上下文的正確運轉(zhuǎn)打下根底。〔3〕上下文推理 系統(tǒng)中的一切上下文信息構(gòu)成上下文知識庫,基于這些知識庫,可以進展上下文的推理。 實現(xiàn)推理普通有兩種方式,一是將邏輯規(guī)那么用程序編碼實現(xiàn),二是采用基于規(guī)那么的推理系統(tǒng)?!?〕上下文交融 在上下文感知計算中,要獲得延續(xù)的上下文的處理方法,必需結(jié)合相關(guān)的上下文效力從而聚集上下文信息,稱為上下文交融。 這種上下文的交融類似于目前已被廣泛運用的傳感器交融,其關(guān)鍵在于處置不同上下文效力邊境之間的無縫交融。5.3物聯(lián)網(wǎng)中間件編程實例5.3.1利用RubyonRails開發(fā)基于 REST風格的中間件5.3.2用J2EE開發(fā)WebService中間件5.3.1利用RubyonRails開發(fā)基于REST風格的中間件RubyonRails,簡稱RoR或Rails,是一個運用Ruby言語寫的開源網(wǎng)絡運用框架,能使開發(fā)變得更加容易,目前我們用其努力于Web運用的開發(fā)、部署和維護。
像其他Web框架一樣,Rails采用MVC的開發(fā)框架。但相比于其他框架,Rails更加簡單易用。這是由于:1、Ruby言語的特性:自然、簡介、快速,有豐富的類庫,并且全面地支持面向?qū)ο蟮某绦蛟O(shè)計。2、Rails的根本設(shè)計原那么:“不要反復他本人〞〔Don’tRepeatYourself,簡稱DRY〕以及“慣例重于配置〞。
Rails是一種矯捷的框架,它強調(diào)與客戶的交互,隨時預備“呼應變化〞。 Rails提倡測試驅(qū)動開發(fā),一切的Rails運用內(nèi)嵌對于測試的支持。1.RubyonRails開發(fā)環(huán)境搭建RubyonRails可以運轉(zhuǎn)在各種操作系統(tǒng)下,其平臺是獨立的??偟膩碚f,要安裝運轉(zhuǎn)一個Rails運用需求以下組件?!?〕Ruby解釋器:我們在此運用Ruby-1.8.6。這個版本的解析器可以很好的滿足Rails以及后續(xù)一些RubyGems的要求。〔2〕RubyGems:它是一個規(guī)范的Ruby程序包管理器,可以很方便的在線安裝各種Ruby程序包,包括Rails等?!?〕RubyonRails框架:為簡單起見,我們采用gem自動進展安裝,在撰寫本書時Rails的最新版本為2.3.8?!?〕數(shù)據(jù)庫:Rails的最新版本默許是采用SQLite3的數(shù)據(jù)庫,在此為了通用性思索,我們采用最常用的MySQL數(shù)據(jù)庫?!?〕一些必要的庫:采用MySQL數(shù)據(jù)庫只需求安裝mysqlgem包即可。假設(shè)運用Rails默許的數(shù)據(jù)庫那么需安裝sqlite3-rubygem包。下面我們主要引見在Windows下安裝部署Rails的詳細過程。由于很多程序針對Windows平臺都有很方便的一鍵式安裝,所以在Windows下安裝Rails還是很輕松的?!?〕安裝Ruby解釋器。可以從Ruby官網(wǎng)〔/en/downloads/〕上下載Ruby-1.8.6One-Click的安裝包。 為了檢驗能否安裝勝利,可以從Windows的開場菜單點擊“運轉(zhuǎn)〞,輸入“cmd〞,啟動Windows命令提示符,然后輸入“ruby–v〞〔回車〕,如能正確顯示Ruby程序的版本號那么證明安裝勝利?!?〕安裝RubyGems??梢詮腞ubyForge〔/〕或是RubyGems的官網(wǎng)〔/〕上下載最新的安裝包。下載完成后將該緊縮包進展解壓,我們假設(shè)解壓后根目錄為${dir}目錄;然后啟動命令提示符,并切換到${dir}中,然后輸入rubysetup.rb運轉(zhuǎn)RubyGems的安裝程序。為了驗證能否安裝勝利,可以從Windows命令提示符中輸入“gem–v〞〔回車〕;如能正確顯示RubyGems的版本號那么安裝勝利?!?〕安裝RubyonRails。在命令提示符中輸入“geminstallrails〞〔回車〕,然后將會在線安裝Rails的程序以及Rails的一些依賴包。安裝完成后可以經(jīng)過“rails–v〞命令查看Rails的版本號來驗證能否安裝勝利。〔4〕MySQL數(shù)據(jù)庫。在MySQL官網(wǎng)上下載最新的MySQL-5.1版本的安裝程序,然后進展安裝即可。詳細安裝過程也可參考官方的安裝闡明〔dev.mysql/doc/refman/5.1/
zh/installing.html〕?!?〕安裝mysqlgem包。在命令提示符中輸入“geminstallmysql〞進展在線安裝。 至此Rails的安裝過程就曾經(jīng)全部完成。在Linux下的安裝也大同小異,主要是安裝Ruby和mysql時略有不同,其他安裝步驟都和Windows下安裝一樣。2.RubyonRails編程實例下面的章節(jié)將簡單引見一個關(guān)于溫度的Rails物聯(lián)網(wǎng)中間件實例。Rails是一個網(wǎng)絡運用框架,它可以很方便地處置各種運用懇求,客戶端和Rails效力器之間采用一致的REST接口,它們經(jīng)過HTTP協(xié)議來向效力器端發(fā)送懇求?!纠绲南到y(tǒng)整體架構(gòu)圖如圖5-8所示。在該例如中溫度傳感器也以為是Rails效力器的一個客戶端,它會實時地向效力器端發(fā)送數(shù)據(jù),效力器會把這些數(shù)據(jù)處置后保管到數(shù)據(jù)庫中以供閱讀器或其他客戶端調(diào)用。效力器的另一種客戶端是閱讀器或是手機Widget運用,這些客戶可以向效力器端發(fā)送懇求來獲取本人所關(guān)懷的數(shù)據(jù)?!纠缰胁捎肦EST的方式來進展效力器端的設(shè)計,我們將溫度〔temperature〕看做一種資源,每個資源有相應的id、溫度值、更新時間、設(shè)備稱號等信息。本例如中對于溫度資源的操作只包括Put和Get兩種操作,這兩種操作分別經(jīng)過HTTP的Post和Get懇求來完成。詳細為溫度傳感器經(jīng)過Post懇求向效力器上傳溫度數(shù)據(jù),而閱讀器經(jīng)過Get懇求來從效力器獲得溫度數(shù)據(jù)的記錄。對于REST中的其他資源操作如Update、Destroy等操作在本例如中可以不需求,所以進展了省略。RubyonRails是支持一切的REST操作的,可以經(jīng)過scaffold來進展實現(xiàn)。假定對于這種資源的Put操作對應HTTP的Post懇求,懇求的URL為{root_
dir}/temperature/post_temperature;獲取資源的Get操作對應HTTP的Get懇求,懇求的URL為{root_dir}/temperature/index?!诖死缰胁捎胢ysql數(shù)據(jù)庫,其實由于Rails對于不同數(shù)據(jù)庫接口有很好的封裝和適配,采用不同的數(shù)據(jù)庫不會對代碼產(chǎn)生太大影響。針對該例如,數(shù)據(jù)庫中只建立一張表來進展數(shù)據(jù)的存儲。表的構(gòu)造如表5-1所示,其中id字段用于標識每條記錄,value字段記錄溫度值,time字段記錄上傳的時間,device_id字段記錄上傳數(shù)據(jù)的設(shè)備標識。圖5-8溫度傳感中間件系統(tǒng)架構(gòu)表示圖表5-1溫度表構(gòu)造idvaluetimedevice_id〔1〕建立工程。建立一個稱號為smart_sensor的工程,首先在命令提示符中進入待建工程的目錄,在此運用F:\example目錄,然后輸入rails--database=mysqlsmart_sensor,如圖5-9所示。圖5-9建立smart_sensor工程本例如的實現(xiàn)步驟包括以下幾步:此時修正smart_sensor\config\database.yml文件,在這個文件中會有3個數(shù)據(jù)庫配置選項,分別為development、test、production,在此只修正development選項即可,修正成如下格式。 development: adapter:mysql encoding:utf8 reconnect:false database:smart_sensor_development pool:5 username:root password:mysql host:localhost〔2〕建立數(shù)據(jù)庫。需求修正的主要是username和password,修正成mysql數(shù)據(jù)庫的用戶名和密碼即可。然后在命令行根目錄smart_sensor下執(zhí)行rakedb:create來建立數(shù)據(jù)庫,數(shù)據(jù)庫稱號默以為smart_sensor_development,如圖5-10所示。下面的命令如沒有特別闡明均是在smart_sensor根目錄下執(zhí)行的。圖5-10建立數(shù)據(jù)庫下面需求建立根本的數(shù)據(jù)表,在Rails中數(shù)據(jù)表是由一個Model來管理的,可以用Rails的命令來建立根本的Model。在根目錄下輸入rubyscript\generatemodeltemperature,如圖5-11所示。圖5-11建立根本的Model〔3〕建立根本的Model類。此時在db\migrate目錄下會生成一個xxx_create_temperatures.rb的文件,翻開該文件并修正成如下結(jié)果。這里主要是設(shè)置數(shù)據(jù)表的各個字段的類型以及其他細節(jié)。classCreateTemperatures<ActiveRecord::Migrationdefself.upcreate_table:temperaturesdo|t|
#establishthedatatablet.decimal:value,:precision=>4,:scale=>1t.datetime:timeeger:device_idt.timestampsendenddefself.downdrop_table:temperaturesendend然后執(zhí)行rakedb:migrate命令將temperatures表的構(gòu)造寫入數(shù)據(jù)庫??刂破鞯墓δ苤饕菍ν獠康膽┣筮M展處置并前往相應的結(jié)果。此處可以經(jīng)過Rails的根本命令來建立根本的控制器。在根目錄下輸入命令rubyscript\generatecontrollertemperatureindex,如圖5-12所示。圖5-12生成根本的控制器〔4〕建立temperature控制器。
classTemperatureController<ApplicationController#listallthetemperaturesinthedatabasedefindex@temperatures=Temperature.allrespond_todo|format|format.html#index.html.erbformat.xml{render:xml=>@temperatures}endend然后修正app\controllers\temperature_controller.rb文件以真正實現(xiàn)該例如需求的方法。在此我們將實現(xiàn)index方法以輸出一切的temperature數(shù)據(jù),并且添加一個添加數(shù)據(jù)的方法以把傳感器發(fā)來的數(shù)據(jù)存入數(shù)據(jù)庫,詳細修正如下。#processthepostrequestandstorethedatainthedatabasedefpost_temperaturebegin#constructaninstanceofTemperaturea_temperature=Temperature.new(:value=>params[:value],:time=>params[:time],:device_id=>params[:device_id])#storea_temperatureinthedatabasea_temperature.saverescue#returnFailiffailsstorethedatarender:text=>"Fail"returnend#returnOKifallsuccessrender:text=>"OK"returnendend這里添加了兩個方法,index和post_temperature。其中index方法用于輸出當前存入數(shù)據(jù)庫的一切溫度的記錄,post_temperature方法是用來處置傳感器發(fā)來的提交數(shù)據(jù)的懇求,并把這些溫度數(shù)據(jù)存入數(shù)據(jù)庫,執(zhí)行勝利那么前往“OK〞,否那么前往“Fail〞。在此由于index方法會前往一個html文件,來控制前往結(jié)果的顯示。在Rails中會在views目錄下對前往的頁面文件進展集中的管理。在此需求修正app\views\
temperature\index.html.erb文件,修正結(jié)果如下?!?〕修正view頁面。<divid="temperature-list"><h1>Listingtemperatures</h1><table><%fortemperaturein@temperatures%><tr><td> <%=temperature.id%></td><td> <%=temperature.value%></td><td> <%=temperature.time%></td><td> <%=temperature.device_id%></td></tr><%end%></table></div>為了讓Rails當收到某個懇求時知道該調(diào)用哪個控制器下的哪個方法來進展處置,在此需求修正Rails的路由以符合該例如的要求。在Rails中修正路由也非常簡單,只需求修正config\routes.rb文件即可。在該文件的最后曾經(jīng)有兩條默許的路由格式,需求修正這些路由規(guī)那么以符合我們的需求,詳細如下。 map.connect'temperature/post_temperature',:controller=>"temperature",
:action=>"post_temperature",:conditions=>{:method=>:post} map.connect':controller/:action' map.connect':controller/:action.:format’〔6〕修正路由。①當收到發(fā)往temperature/post_temperature這個途徑的Post懇求時調(diào)用temperature控制器的post_temperature方法來進展處置。②當收到:controller/:action格式的路由時,那么將第一個參數(shù)作為controller,第二個作為action。例如發(fā)送temperature/index,此時那么會采用temperature控制器的index方法來進展處置。這里解釋一下這3條路由分別的含義。③前面與〔2〕一樣,另外添加了:format參數(shù)用來控制前往的格式,例如發(fā)送temperature/index.html那么采用temperature控制器的index方法,采用html格式的前往結(jié)果。假設(shè)發(fā)送temperature/index.xml那么以xml格式前往結(jié)果。路由的匹配規(guī)那么是從上向下依次進展匹配,假設(shè)遇到匹配的規(guī)那么,那么采用該規(guī)那么,并且停頓向下匹配。
在此我們采用外部客戶自動POST數(shù)據(jù)的方式來向Server發(fā)送懇求。Rails中為了防止惡意的POST數(shù)據(jù),采用了認證授權(quán)的機制來防止這種攻擊,類似我們?nèi)缃癫捎玫腜OST的方式進展上傳數(shù)據(jù),那么會引發(fā)RailsActionController::Invalid
AuthenticityToken異常,并且不會對我們的POST操作進展處置。我們在此需求禁用該認證機制,方法也很簡單,只需修正app\controllers\application_controller.rb文件即可,修正結(jié)果如下?!?〕修正控制器的認證過濾器。classApplicationController<ActionController::Basehelper:all#includeallhelpers,allthetimeprotect_from_forgery#SeeActionController::RequestForgeryProtectionfordetails
#allowuploadthedatadirectlyskip_before_filter:verify_authenticity_token
#Scrubsensitiveparametersfromyourlog#filter_parameter_logging:passwordend接下來我們對本實例的功能進展測試,包括兩部分:數(shù)據(jù)上傳和數(shù)據(jù)顯示。
①數(shù)據(jù)上傳。我們采用Curl來發(fā)送HTTP的POST懇求。Curl工具是Linux下的默許工具,如今也有Windows版的,可以直接在Curl的官網(wǎng)進展下載〔curl.haxx.se/download.html〕,在此我們選用Win32-Generic的禁用SSL的版本?!?〕功能測試。首先開啟一個終端,在根目錄下輸入rubyscript/server,啟動WEBrick的效力器。然后在curl的解壓目錄下輸入curl–d“value=25.8&time=2021-06-09%2021:30:21&device_id=T1101〞localhost:3000/temperature/post_temperature。然后可以收到來自效力器端的OK的前往,如圖5-13所示。同時也可以查看效力器終端的log來分析懇求處置的過程。圖5-13發(fā)送POST懇求首先在根目錄下輸入rubysrcript/server來啟動效力器〔假設(shè)曾經(jīng)啟動效力器可跳過此步驟〕。然后在閱讀器地址欄輸入httplocalhost:3000/temperature或httplocalhost:3000/
temperature/index.html來顯示當前數(shù)據(jù)庫中保管的溫度數(shù)據(jù),如圖5-14所示。他也可以采用XML的格式來顯示這些數(shù)據(jù),只需求在閱讀器地址欄輸入httplocalhost:3000/
temperature/index.xml即可,如圖5-15所示。②數(shù)據(jù)顯示。圖5-14HTML顯示當前數(shù)據(jù)庫中的數(shù)據(jù)圖5-15XML顯示當前數(shù)據(jù)庫中的數(shù)據(jù)5.3.2用J2EE開發(fā)WebService中間件J2EE〔Java2PlatformEnterpriseEdition〕是一套全然不同于傳統(tǒng)運用開發(fā)的技術(shù)架構(gòu),包含諸多組件,可簡化和規(guī)范運用系統(tǒng)的開發(fā)與部署,進而提高可移植性、平安性與反復利用價值。5.3.2用J2EE開發(fā)WebService中間件 J2EE中心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、效力架構(gòu)及技術(shù)層次,均有相通的規(guī)范與規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺之間存在良好的兼容性,處理了過去企業(yè)后端運用的信息產(chǎn)品彼此之間無法兼容,企業(yè)內(nèi)部或外部難以互通的窘境。輕量級J2EE組件SSH〔Struts、Spring、Hibernate〕是目前J2EE快速開發(fā)的最正確組合。 Struts實現(xiàn)了MVC方式的非常成熟的Web運用組件,廣泛運用于各種Web運用系統(tǒng)的表現(xiàn)層中。Hibernate是成熟的ORM組件,主要用于實現(xiàn)數(shù)據(jù)耐久化功能,最大作用在于構(gòu)筑了面向?qū)ο驤ava言語與關(guān)系型數(shù)據(jù)庫之間的橋梁,使得可以直接經(jīng)過對Java對象的耐久化操作完成對數(shù)據(jù)的耐久化操作。 Spring那么作為輕量級J2EE框架,其中心是一個功能強大的IoC容器,在此容器的根底上又提供了對AOP的支持,以及對耐久層和表現(xiàn)層的封裝實現(xiàn)。簡而言之,Struts用來做控制,是MVC方式的控制層;Hibernate用來做耐久化,也是數(shù)據(jù)庫層,對數(shù)據(jù)庫進展封裝;Spring用來整合J2EE各層之間的中間層,提高了層與層之間的松耦合,使得各層之間成為對立的模塊。1.J2EE開發(fā)環(huán)境搭建J2EE快速開發(fā)的最正確組合SSH架構(gòu),其中以Struts為例,實現(xiàn)了J2EE開發(fā)WebService案例。需求安裝和配置的軟件,包括Tomcat、Struts及其插件等,詳細實現(xiàn)步驟如下。Tomcat效力器現(xiàn)有最新版本6.0.29,可在/download-60.cgi官方網(wǎng)站下載。對于Windows操作系統(tǒng),可以下載zip格式或者exe格式兩種格式文件。zip格式文件解壓即可運用,也可以選擇其他格式的文件,以6.0.18版本為例,如圖5-16所示。〔1〕版本與下載地址。Tomcat安裝過程包括以下幾個步驟。圖5-16Tomcat效力器下載界面安裝Tomcat后,在“我的電腦〞->“屬性〞->“高級〞->“環(huán)境變量〞->“系統(tǒng)變量〞中添加以下環(huán)境變量〔假定Tomcat安裝在c:\tomcat〕?!?〕配置環(huán)境變量。CATALINA_HOME:c:\tomcatCATALINA_BASE:c:\tomcatTOMCAT_HOME:c:\tomcat然后修正環(huán)境變量classpath,把Tomcat安裝目錄common\lib下的servlet.jar加載到classpath中,修正后的classpath如下所示。 classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA
_HOME%\lib\servlet-api.jar見到Tomcat歡迎頁面,那么闡明安裝勝利,可進入下一步驟?!?〕啟動Tomcat,IE中訪問httplocalhost:8080。Tomcat安裝目錄的webapps,可以見到ROOT、examples、tomcat-docs之類Tomcat自帶的文件目錄,并拷貝ROOT目錄下的WEB-INF目錄。在webapps目錄下新建一個目錄,命名myapp,并將上一步拷貝的WEB-INF目錄粘貼到此目錄下。在myapp下新建jsp測試頁面,文件名為index.jsp,文件內(nèi)容如下?!?〕創(chuàng)建屬于本人的jspapp目錄。重啟Tomcat。翻開閱讀器,輸入httplocalhost:8080/myapp/index.jsp,假設(shè)頁面上顯示出當前的時間,那么闡明安裝配置勝利。 <html> <body> <center> Nowtimeis:<%=new java.util.Date()%> </center> </body> </html>Struts的安裝過程包括以下幾個步驟。①版本和下載網(wǎng)址Struts最新版本是2.0.12,官方網(wǎng)站下載地址/download.cgi#struts2021,下載struts-2.0.12-all.zip〔91MB〕即可,其他文件均包含在此文檔中?!?〕測試Javabean。由于struts1.x和struts2有很大區(qū)別,而現(xiàn)今許多書都是針對struts1.x所寫。在struts1.x版本中struts-config.xml是重要的配置文件,而在struts2中,它變成了struts.xml,而且文件的描畫內(nèi)容和struts-config.xml也有所差別,所以須小心謹慎。而且許多資料一開場就直接用IDE環(huán)境〔如MyEclipse〕來呈現(xiàn)Struts功能框架,使得我們在了解Struts框架時,也會有些疑惑。②安裝與配置由于Tomcat效力器可用記事本等小型的文本編輯器來實現(xiàn)jsp編寫,而假設(shè)讀者沒有集成完備、功能強大的MyEclipseIDE,能夠還需求下載和安裝,這樣必然會讓人覺得比較費事和費時。實踐上,只需弄清楚了Struts構(gòu)造,完全可以用記事本來實現(xiàn)Struts的功能框架。下面的章節(jié)將以HelloInternet為例,來引領(lǐng)讀者進入J2EE開發(fā)WebService的大門,并在今后的深化研討與開發(fā)中,結(jié)合物聯(lián)網(wǎng)的背景,開發(fā)出更多功能豐富的物聯(lián)網(wǎng)創(chuàng)新運用。2.J2EE編程實例用J2EE實現(xiàn)WebService實例時,以Struts框架實現(xiàn)工程Struts2_HelloInternet為例,詳細實現(xiàn)過程及步驟如下?!?〕在webapps目錄下建立目錄Struts2_HelloInternet,完善目錄構(gòu)造,如圖5-17所示。圖5-17J2EE實例框架圖〔2〕在Lib目錄中添加以下jar文件:commons-logging-1.0.4.jar,freemarker-2.3.8.jar,ognl-2.6.11.jar,struts2-core-2.0.12.jar,xwork-2.0.6.jar。〔3〕配置Web.xml文件,內(nèi)容如下。<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4"
xmlns="java.sun/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/j2ee
java.sun/xml/ns/j2ee/web-app_2_4.xsd"><display-name>Struts2.0HelloInternet</display-name><!--配置web.xml文件,對標簽filter、filter-mapping、welcome-file-list進展相關(guān)配置--><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><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>〔4〕配置struts.xml文件,內(nèi)容如下。<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><!--配置struts.xml文件--><struts><includefile="struts-default.xml"/><packagename="tutorial"extends="struts-default"><actionname="HelloInternet"class="tutorial.HelloInternet"><!--當動作發(fā)生時,實現(xiàn)HelloInternet
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度集合大合集人員管理篇
- 單位管理制度匯編大合集人力資源管理
- 《家具導購圣經(jīng)》課件
- 單位管理制度分享匯編職員管理篇十篇
- 單位管理制度分享大全職工管理十篇
- 2024教科室工作計劃
- 單位管理制度呈現(xiàn)合集職工管理篇十篇
- 《投資管理復習》課件
- 《市場考察報告》課件
- 《廣告效果的測定》課件
- 西安信息職業(yè)大學《工程管理導論》2023-2024學年第一學期期末試卷
- 浙江省杭州市拱墅區(qū)2023-2024學年六年級(上)期末數(shù)學試卷
- 突發(fā)事件及自救互救學習通超星期末考試答案章節(jié)答案2024年
- 期末質(zhì)量評價(試題)-2024-2025學年一年級上冊數(shù)學人教版
- 生產(chǎn)與運作管理第5版配套教材電子課件(完整版)
- 偉大的《紅樓夢》智慧樹知到期末考試答案章節(jié)答案2024年北京大學
- 凈水廠課程設(shè)計
- (完整版)八年級上綜合性學習-我們的互聯(lián)網(wǎng)時代-練習卷(含答案)
- 地災治理全套表格
- 2021國家開放大學電大本科《流行病學》期末試題及答案
- 中國銀行_境外匯款申請表模板(練手)
評論
0/150
提交評論