物聯(lián)網(wǎng)技術(shù)與應(yīng)用電子教案_第1頁
物聯(lián)網(wǎng)技術(shù)與應(yīng)用電子教案_第2頁
物聯(lián)網(wǎng)技術(shù)與應(yīng)用電子教案_第3頁
物聯(lián)網(wǎng)技術(shù)與應(yīng)用電子教案_第4頁
物聯(lián)網(wǎng)技術(shù)與應(yīng)用電子教案_第5頁
已閱讀5頁,還剩123頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章物聯(lián)網(wǎng)中間件物聯(lián)網(wǎng)中間件根本概念5.1物聯(lián)網(wǎng)中間件關(guān)鍵技術(shù)5.2物聯(lián)網(wǎng)中間件編程實(shí)例5.3haoiot來源:好物聯(lián)網(wǎng)中國(guó)最大物聯(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)中間件的根本組成和特點(diǎn) 5.1.3物聯(lián)網(wǎng)中間件舉例5.1.1物聯(lián)網(wǎng)中間件的定義和分類

1.中間件定義:獨(dú)立的系統(tǒng)軟件或效力程序。運(yùn)用于客戶機(jī)、效力器的操作系統(tǒng),管理計(jì)算機(jī)資源和網(wǎng)絡(luò)通訊。銜接兩個(gè)獨(dú)立運(yùn)用程序或獨(dú)立系統(tǒng)的軟件,使相銜接的系統(tǒng)即使具有不同的接口,利用中間件依然能相互交換信息。執(zhí)行的關(guān)鍵途徑是信息傳送。2.中間件表示圖3.中間件開展史最早具有中間件技術(shù)思想及功能的軟件是IBM的CICS,而CICS不是分布式環(huán)境的產(chǎn)物,因此人們普通把Tuxedo作為第一個(gè)嚴(yán)厲意義上的中間件產(chǎn)品。

3.中間件開展史 Tuxedo是1984年在當(dāng)時(shí)屬于AT&T的貝爾實(shí)驗(yàn)室開發(fā)完成的,由于分布式處置當(dāng)時(shí)并沒有在商業(yè)運(yùn)用上獲得像今天一樣的勝利,Tuxedo在很長(zhǎng)一段時(shí)期里只是實(shí)驗(yàn)室產(chǎn)品,后來被Novell收買,在經(jīng)過Novell并不勝利的商業(yè)推行之后,1995年被如今的BEA公司收買。3.中間件開展史 BEA公司1995年收買Tuxedo才成為一個(gè)真正的中間件廠商。IBM的中間件MQSeries也是20世紀(jì)90年代的產(chǎn)品,其他許多中間件產(chǎn)品也都是最近幾年才成熟起來。4.中間件主要特點(diǎn)滿足大量運(yùn)用的需求運(yùn)轉(zhuǎn)于多種硬件和OS平臺(tái)支持分布計(jì)算,提供跨網(wǎng)絡(luò)、硬件和OS平臺(tái)的透明的運(yùn)用或效力的交互支持規(guī)范的協(xié)議支持規(guī)范的接口5.什么是物聯(lián)網(wǎng)中間件 在物聯(lián)網(wǎng)中采用中間件技術(shù),以實(shí)現(xiàn)多個(gè)系統(tǒng)和多種技術(shù)之間的資源共享,最終組成一個(gè)資源豐富、功能強(qiáng)大的效力系統(tǒng)。6.物聯(lián)網(wǎng)中間件的分類 基于目的和實(shí)現(xiàn)機(jī)制的不同,業(yè)內(nèi)將中間件分為以下幾類:遠(yuǎn)程過程調(diào)用中間件〔RemoteProcedureCall〕面向音訊的中間件〔Message-OrientedMiddleware〕對(duì)象懇求代理中間件〔ObjectRequestBrokers〕 幾類中間件可向上提供不同方式的通訊效力,在這些根本的通訊平臺(tái)之上,可構(gòu)筑各種框架,為運(yùn)用程序提供不同領(lǐng)域內(nèi)的效力,如事務(wù)處置監(jiān)控器、分布數(shù)據(jù)訪問、對(duì)象事務(wù)管理器等。7.物聯(lián)網(wǎng)中間件開展的三個(gè)階段運(yùn)用程序中間件階段〔ApplicationMiddleware〕架構(gòu)中間件階段〔InfrastructureMiddleware〕處理方案中間件階段〔SolutionMiddleware〕。目前,物聯(lián)網(wǎng)中間件最主要的代表是RFID中間件,其他的還有嵌入式中間件、數(shù)字電視中間件、通用中間件、M2M物聯(lián)網(wǎng)中間件等。下面,重點(diǎn)引見一下RFID中間件。 RFID中間件扮演RFID標(biāo)簽和運(yùn)用程序之間的中介角色,從運(yùn)用程序端運(yùn)用中間件所提供一組通用的運(yùn)用程序接口〔API〕,即能連到RFID讀寫器,讀取RFID標(biāo)簽數(shù)據(jù)。 這樣一來,即使存儲(chǔ)RFID標(biāo)簽數(shù)據(jù)的數(shù)據(jù)庫軟件或后端運(yùn)用程序添加或改由其他軟件取代,或者讀寫RFID讀寫器種類添加等情況發(fā)生時(shí),運(yùn)用端不需修正也能處置,省去多對(duì)多銜接的維護(hù)復(fù)雜性問題。8.RFID中間件的三大類開展階段〔1〕運(yùn)用程序中間件開展階段〔2〕根底架構(gòu)中間件開展階段〔3〕處理方案中間件〔SolutionMiddleware〕開展階段。

5.1.2物聯(lián)網(wǎng)中間件的根本組成和特點(diǎn)

根本組成:實(shí)現(xiàn)全球物品的一致編碼,給物品打上電子標(biāo)簽。要實(shí)現(xiàn)每個(gè)小的運(yùn)用環(huán)境或系統(tǒng)的規(guī)范化以及它們之間的通訊,必需設(shè)置一個(gè)通用的平臺(tái)和接口,也就是中間件。以RFID為例,以下圖描畫了中間件在系統(tǒng)中的位置和作用。物聯(lián)網(wǎng)特點(diǎn):〔1〕獨(dú)立于架構(gòu)?!?〕數(shù)據(jù)流?!?〕處置流?!?〕規(guī)范化?!?〕ASPIRE特征:輕量級(jí)、可重新編程、智能、適宜當(dāng)前規(guī)范、可晉級(jí)、平安性高、完好。ASPIRE的處理方法是完全開源和免版權(quán)費(fèi)用,這大大降低了總的開發(fā)本錢。5.1.3物聯(lián)網(wǎng)中間件舉例

〔2〕Hydra定位于操作系統(tǒng)和運(yùn)用之間的中間件層。中間件包含了眾多軟件組成部分,它們被設(shè)計(jì)用于處置各種義務(wù),以完成一個(gè)有效利用本錢的智能物聯(lián)網(wǎng)運(yùn)用開發(fā)過程。可以在新的和曾經(jīng)存在的分布式設(shè)備網(wǎng)絡(luò)上協(xié)作。5.1.3物聯(lián)網(wǎng)中間件舉例

〔2〕Hydra它是基于語義方式驅(qū)動(dòng)的架構(gòu)。Hydra中間件利于實(shí)現(xiàn)環(huán)境感知行為和處理在資源受限設(shè)備中處置數(shù)據(jù)的耐久性問題。Hydra平安框架部署了一個(gè)規(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)用的模塊化運(yùn)用。Web效力可以執(zhí)行多種功能,從簡(jiǎn)單的懇求到復(fù)雜的業(yè)務(wù)過程。一旦Web效力被部署,其他的運(yùn)用程序或是Web效力就可以發(fā)現(xiàn)并且調(diào)用這個(gè)部署的效力。5.2.1web效力

Web效力〔WebServices〕向外界提供一個(gè)可以經(jīng)過Web進(jìn)展調(diào)用的API〔ApplicationProgrammingInterface,運(yùn)用程序編程接口〕,可以用編程的方法經(jīng)過Web來調(diào)用這個(gè)運(yùn)用程序。我們把調(diào)用這個(gè)WebServices的運(yùn)用程序叫做客戶。WebServices舉例:

創(chuàng)建一個(gè)WebServices,功能是前往當(dāng)前的天氣情況。WebServices定義: 建立可互操作的分布式運(yùn)用程序的平臺(tái)。WebServices平臺(tái)是一套規(guī)范,它定義了運(yùn)用程序如何在Web上實(shí)現(xiàn)互操作性。WebServices為實(shí)現(xiàn)物聯(lián)網(wǎng)的運(yùn)用與效力提供了一個(gè)根本的框架。 WebServices經(jīng)過簡(jiǎn)單對(duì)象訪問協(xié)議〔SimpleObjectAccessProtocol,SOAP〕來調(diào)用。 SOAP是一種輕量級(jí)的音訊協(xié)議,它允許用任何言語編寫的任何類型的對(duì)象在任何平臺(tái)之上相互通訊。

SOA〔Service-OrientedArchitecture,面向效力的體系構(gòu)造〕是一個(gè)組件模型,它將運(yùn)用程序的不同功能單元經(jīng)過這些效力之間定義的接口和協(xié)議聯(lián)絡(luò)起來。 接口是采用中立的方式進(jìn)展定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)效力的硬件平臺(tái)、操作系統(tǒng)和編程言語。這使得構(gòu)建在各種這樣的系統(tǒng)中的效力可以用一種一致和通用的方式進(jìn)展交互。這種具有中立的接口定義的特征稱為效力之間的松耦合。松耦合系統(tǒng)的優(yōu)勢(shì)主要有兩點(diǎn):一點(diǎn)是它具有很高的靈敏性另一點(diǎn)是當(dāng)組成整個(gè)運(yùn)用程序的每個(gè)效力的內(nèi)部構(gòu)造和實(shí)現(xiàn)逐漸地發(fā)生改動(dòng)時(shí),它可以繼續(xù)存在 嵌入式系統(tǒng)是以運(yùn)用為中心,以計(jì)算機(jī)技術(shù)為根底,并且軟硬件可裁剪,適用于運(yùn)用系統(tǒng)對(duì)功能、可靠性、本錢、體積、功耗有嚴(yán)厲要求的公用計(jì)算機(jī)系統(tǒng)。5.2.2嵌入式中間技術(shù)效力

嵌入式中間件是在嵌入式運(yùn)用程序和操作系統(tǒng)、硬件平臺(tái)之間嵌入的一個(gè)中間層,通常定義成一組較為完好的、規(guī)范的運(yùn)用程序接口。。1.嵌入式Web嵌入式Web效力主要具有以下優(yōu)點(diǎn)?!?〕一致的客戶界面〔2〕平臺(tái)獨(dú)立性〔3〕高可擴(kuò)展性〔4〕并行性與分布性1.嵌入式WebWeb效力器 對(duì)Web效力器而言,在物理設(shè)備上是指存放那些供客戶訪問的信息資源的計(jì)算機(jī)或嵌入式系統(tǒng);在軟件上是指可以按照客戶的懇求將信息資源傳送給客戶的運(yùn)用程序。1.嵌入式WebWeb客戶端 對(duì)Web客戶端而言,在物理設(shè)備上是指客戶所運(yùn)用的本地計(jì)算機(jī)或者嵌入式設(shè)備;在軟件上是指可以接受Web效力器上的信息資源并展現(xiàn)給客戶的運(yùn)用程序。 嵌入式Web效力器技術(shù)的中心是HTTP協(xié)議引擎。嵌入式Web效力器經(jīng)過CGI接口和數(shù)據(jù)動(dòng)態(tài)顯示技術(shù),可以在HTML文件或表格中插入運(yùn)轉(zhuǎn)代碼,供RAM讀取/寫入數(shù)據(jù)。典型的嵌入式Web效力器系統(tǒng)模型 CGI是通用網(wǎng)關(guān)接口〔CommonGatewayInterface〕的縮寫。它是Web效力器主機(jī)與外部擴(kuò)展運(yùn)用程序交互的一種規(guī)范接口。 它提供了將參數(shù)傳送給程序并將結(jié)果前往給閱讀器的一種機(jī)制。CGI任務(wù)流程表示圖 CGI程序可以經(jīng)過以下兩種調(diào)用方式來獲取客戶懇求的內(nèi)容: 一是經(jīng)過URL直接調(diào)用 二經(jīng)過交互式表單〔Form〕來調(diào)用。1.JAVAVM 除了利用Web實(shí)現(xiàn)中間件外,JavaVM〔Java虛擬機(jī)〕以其良好的跨平臺(tái)特性成為了物聯(lián)網(wǎng)中間件的重要平臺(tái)。Java編譯執(zhí)行流程圖 每個(gè)Java

VM都有兩種機(jī)制,一個(gè)是裝載具有適宜稱號(hào)的類〔類或是接口〕,叫做類裝載子系統(tǒng);另一個(gè)是擔(dān)任執(zhí)行包含在已裝載的類或接口中的指令,叫做運(yùn)轉(zhuǎn)引擎。 每個(gè)Java

VM又包括方法區(qū)、Java堆、Java棧、程序計(jì)數(shù)器和本地方法棧這5個(gè)部分,這幾個(gè)部分和類裝載機(jī)制與運(yùn)轉(zhuǎn)引擎機(jī)制一同組成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〕運(yùn)用HTTP作為運(yùn)用協(xié)議,HTTP不僅是用來銜接傳感器和網(wǎng)絡(luò)的傳輸協(xié)議?!?〕經(jīng)過REST接口〔或RESTAPI〕將智能設(shè)備的同步功能開放出來?!?〕智能設(shè)備的異步功能開放采用廣為接受的Web聚合規(guī)范?!?〕前端利用Web的呈現(xiàn)方式,提供直觀、友好的用戶體驗(yàn)?!?〕開放平臺(tái)。 經(jīng)過WebofThings,可以為物聯(lián)網(wǎng)運(yùn)用帶來了眾多便利,以以下舉其幾點(diǎn)優(yōu)勢(shì):減少智能設(shè)備安裝、整合、執(zhí)行和維護(hù)開銷;加快智能設(shè)備安裝和移除速度;對(duì)智能設(shè)備可進(jìn)展挪動(dòng)和暫時(shí)安裝;任何時(shí)辰、任何地點(diǎn)都可以提供實(shí)時(shí)信息效力;加強(qiáng)可視化、可預(yù)見、可預(yù)告和維護(hù)日程的才干;確保各類運(yùn)用有效和高效率執(zhí)行。WebofThings的根本框架由以下3部分組成:〔1〕網(wǎng)絡(luò)節(jié)點(diǎn)集成接口〔IntegrationInterfaceofNetworkNode〕〔2〕基于REST風(fēng)格終端節(jié)點(diǎn)〔TerminalNodesBasedonRESTStyle〕對(duì)智能設(shè)備可進(jìn)展挪動(dòng)和暫時(shí)安裝;〔3〕網(wǎng)絡(luò)Mashup功能〔WebMashupFunction〕加強(qiáng)可視化、可預(yù)見、可預(yù)告和維護(hù)日程的才干;基于REST風(fēng)格的WebofThings架構(gòu) 上下文感知技術(shù)是用來描畫一種信息空間和物理空間相交融的重要支撐技術(shù),它可以運(yùn)用戶可用的計(jì)算環(huán)境和軟件資源動(dòng)態(tài)地順應(yīng)相關(guān)的歷史形狀信息,從而根據(jù)環(huán)境的變化自動(dòng)地采取符合用戶需求或者設(shè)定的行動(dòng)。5.2.4上下文感知技術(shù)

上下文感知系統(tǒng)首先必需知道整個(gè)物理環(huán)境、計(jì)算環(huán)境、用戶形狀等方面的靜態(tài)和動(dòng)態(tài)信息,即上下文〔context〕。 上下文才干的獲取依賴于上下文感知技術(shù),主要包括上下文的采集、建模、推理及交融等。上下文感知技術(shù)是實(shí)現(xiàn)效力自發(fā)性和無縫挪動(dòng)性的關(guān)鍵。〔1〕上下文采集 上下文的運(yùn)用領(lǐng)域不同,上下文的采集方法也有所不同。通常情況下,有3種方法:傳感類上下文、派生出的上下文〔根據(jù)信息記錄和用戶設(shè)定〕、明確提供的上下文。 采集技術(shù)屬于物聯(lián)網(wǎng)感知層的技術(shù)?!?〕上下文建模 要正確地利用上下文信息,必需對(duì)獲得的上下文信息進(jìn)展建模。上下文信息模型反映了設(shè)計(jì)者對(duì)上下文的了解,決議了運(yùn)用什么方法把物理世界里面的一些無意義和無規(guī)律的數(shù)據(jù)轉(zhuǎn)化成計(jì)算世界里的邏輯構(gòu)造言語,為實(shí)現(xiàn)上下文的正確運(yùn)轉(zhuǎn)打下根底?!?〕上下文推理 系統(tǒng)中的一切上下文信息構(gòu)成上下文知識(shí)庫,基于這些知識(shí)庫,可以進(jìn)展上下文的推理。 實(shí)現(xiàn)推理普通有兩種方式,一是將邏輯規(guī)那么用程序編碼實(shí)現(xiàn),二是采用基于規(guī)那么的推理系統(tǒng)?!?〕上下文交融 在上下文感知計(jì)算中,要獲得延續(xù)的上下文的處理方法,必需結(jié)合相關(guān)的上下文效力從而聚集上下文信息,稱為上下文交融。 這種上下文的交融類似于目前已被廣泛運(yùn)用的傳感器交融,其關(guān)鍵在于處置不同上下文效力邊境之間的無縫交融。5.3物聯(lián)網(wǎng)中間件編程實(shí)例5.3.1利用RubyonRails開發(fā)基于 REST風(fēng)格的中間件5.3.2用J2EE開發(fā)WebService中間件5.3.1利用RubyonRails開發(fā)基于REST風(fēng)格的中間件RubyonRails,簡(jiǎn)稱RoR或Rails,是一個(gè)運(yùn)用Ruby言語寫的開源網(wǎng)絡(luò)運(yùn)用框架,能使開發(fā)變得更加容易,目前我們用其努力于Web運(yùn)用的開發(fā)、部署和維護(hù)。

像其他Web框架一樣,Rails采用MVC的開發(fā)框架。但相比于其他框架,Rails更加簡(jiǎn)單易用。這是由于:1、Ruby言語的特性:自然、簡(jiǎn)介、快速,有豐富的類庫,并且全面地支持面向?qū)ο蟮某绦蛟O(shè)計(jì)。2、Rails的根本設(shè)計(jì)原那么:“不要反復(fù)他本人〞〔Don’tRepeatYourself,簡(jiǎn)稱DRY〕以及“慣例重于配置〞。

Rails是一種矯捷的框架,它強(qiáng)調(diào)與客戶的交互,隨時(shí)預(yù)備“呼應(yīng)變化〞。 Rails提倡測(cè)試驅(qū)動(dòng)開發(fā),一切的Rails運(yùn)用內(nèi)嵌對(duì)于測(cè)試的支持。1.RubyonRails開發(fā)環(huán)境搭建RubyonRails可以運(yùn)轉(zhuǎn)在各種操作系統(tǒng)下,其平臺(tái)是獨(dú)立的??偟膩碚f,要安裝運(yùn)轉(zhuǎn)一個(gè)Rails運(yùn)用需求以下組件。〔1〕Ruby解釋器:我們?cè)诖诉\(yùn)用Ruby-1.8.6。這個(gè)版本的解析器可以很好的滿足Rails以及后續(xù)一些RubyGems的要求?!?〕RubyGems:它是一個(gè)規(guī)范的Ruby程序包管理器,可以很方便的在線安裝各種Ruby程序包,包括Rails等?!?〕RubyonRails框架:為簡(jiǎn)單起見,我們采用gem自動(dòng)進(jìn)展安裝,在撰寫本書時(shí)Rails的最新版本為2.3.8。〔4〕數(shù)據(jù)庫:Rails的最新版本默許是采用SQLite3的數(shù)據(jù)庫,在此為了通用性思索,我們采用最常用的MySQL數(shù)據(jù)庫。〔5〕一些必要的庫:采用MySQL數(shù)據(jù)庫只需求安裝mysqlgem包即可。假設(shè)運(yùn)用Rails默許的數(shù)據(jù)庫那么需安裝sqlite3-rubygem包。下面我們主要引見在Windows下安裝部署Rails的詳細(xì)過程。由于很多程序針對(duì)Windows平臺(tái)都有很方便的一鍵式安裝,所以在Windows下安裝Rails還是很輕松的?!?〕安裝Ruby解釋器??梢詮腞uby官網(wǎng)〔/en/downloads/〕上下載Ruby-1.8.6One-Click的安裝包。 為了檢驗(yàn)?zāi)芊癜惭b勝利,可以從Windows的開場(chǎng)菜單點(diǎn)擊“運(yùn)轉(zhuǎn)〞,輸入“cmd〞,啟動(dòng)Windows命令提示符,然后輸入“ruby–v〞〔回車〕,如能正確顯示Ruby程序的版本號(hào)那么證明安裝勝利?!?〕安裝RubyGems。可以從RubyForge〔/〕或是RubyGems的官網(wǎng)〔/〕上下載最新的安裝包。下載完成后將該緊縮包進(jìn)展解壓,我們假設(shè)解壓后根目錄為${dir}目錄;然后啟動(dòng)命令提示符,并切換到${dir}中,然后輸入rubysetup.rb運(yùn)轉(zhuǎn)RubyGems的安裝程序。為了驗(yàn)證能否安裝勝利,可以從Windows命令提示符中輸入“gem–v〞〔回車〕;如能正確顯示RubyGems的版本號(hào)那么安裝勝利?!?〕安裝RubyonRails。在命令提示符中輸入“geminstallrails〞〔回車〕,然后將會(huì)在線安裝Rails的程序以及Rails的一些依賴包。安裝完成后可以經(jīng)過“rails–v〞命令查看Rails的版本號(hào)來驗(yàn)證能否安裝勝利。〔4〕MySQL數(shù)據(jù)庫。在MySQL官網(wǎng)上下載最新的MySQL-5.1版本的安裝程序,然后進(jìn)展安裝即可。詳細(xì)安裝過程也可參考官方的安裝闡明〔dev.mysql/doc/refman/5.1/

zh/installing.html〕?!?〕安裝mysqlgem包。在命令提示符中輸入“geminstallmysql〞進(jìn)展在線安裝。 至此Rails的安裝過程就曾經(jīng)全部完成。在Linux下的安裝也大同小異,主要是安裝Ruby和mysql時(shí)略有不同,其他安裝步驟都和Windows下安裝一樣。2.RubyonRails編程實(shí)例下面的章節(jié)將簡(jiǎn)單引見一個(gè)關(guān)于溫度的Rails物聯(lián)網(wǎng)中間件實(shí)例。Rails是一個(gè)網(wǎng)絡(luò)運(yùn)用框架,它可以很方便地處置各種運(yùn)用懇求,客戶端和Rails效力器之間采用一致的REST接口,它們經(jīng)過HTTP協(xié)議來向效力器端發(fā)送懇求?!纠绲南到y(tǒng)整體架構(gòu)圖如圖5-8所示。在該例如中溫度傳感器也以為是Rails效力器的一個(gè)客戶端,它會(huì)實(shí)時(shí)地向效力器端發(fā)送數(shù)據(jù),效力器會(huì)把這些數(shù)據(jù)處置后保管到數(shù)據(jù)庫中以供閱讀器或其他客戶端調(diào)用。效力器的另一種客戶端是閱讀器或是手機(jī)Widget運(yùn)用,這些客戶可以向效力器端發(fā)送懇求來獲取本人所關(guān)懷的數(shù)據(jù)?!纠缰胁捎肦EST的方式來進(jìn)展效力器端的設(shè)計(jì),我們將溫度〔temperature〕看做一種資源,每個(gè)資源有相應(yīng)的id、溫度值、更新時(shí)間、設(shè)備稱號(hào)等信息。本例如中對(duì)于溫度資源的操作只包括Put和Get兩種操作,這兩種操作分別經(jīng)過HTTP的Post和Get懇求來完成。詳細(xì)為溫度傳感器經(jīng)過Post懇求向效力器上傳溫度數(shù)據(jù),而閱讀器經(jīng)過Get懇求來從效力器獲得溫度數(shù)據(jù)的記錄。對(duì)于REST中的其他資源操作如Update、Destroy等操作在本例如中可以不需求,所以進(jìn)展了省略。RubyonRails是支持一切的REST操作的,可以經(jīng)過scaffold來進(jìn)展實(shí)現(xiàn)。假定對(duì)于這種資源的Put操作對(duì)應(yīng)HTTP的Post懇求,懇求的URL為{root_

dir}/temperature/post_temperature;獲取資源的Get操作對(duì)應(yīng)HTTP的Get懇求,懇求的URL為{root_dir}/temperature/index。※在此例如中采用mysql數(shù)據(jù)庫,其實(shí)由于Rails對(duì)于不同數(shù)據(jù)庫接口有很好的封裝和適配,采用不同的數(shù)據(jù)庫不會(huì)對(duì)代碼產(chǎn)生太大影響。針對(duì)該例如,數(shù)據(jù)庫中只建立一張表來進(jìn)展數(shù)據(jù)的存儲(chǔ)。表的構(gòu)造如表5-1所示,其中id字段用于標(biāo)識(shí)每條記錄,value字段記錄溫度值,time字段記錄上傳的時(shí)間,device_id字段記錄上傳數(shù)據(jù)的設(shè)備標(biāo)識(shí)。圖5-8溫度傳感中間件系統(tǒng)架構(gòu)表示圖表5-1溫度表構(gòu)造idvaluetimedevice_id〔1〕建立工程。建立一個(gè)稱號(hào)為smart_sensor的工程,首先在命令提示符中進(jìn)入待建工程的目錄,在此運(yùn)用F:\example目錄,然后輸入rails--database=mysqlsmart_sensor,如圖5-9所示。圖5-9建立smart_sensor工程本例如的實(shí)現(xiàn)步驟包括以下幾步:此時(shí)修正smart_sensor\config\database.yml文件,在這個(gè)文件中會(huì)有3個(gè)數(shù)據(jù)庫配置選項(xiàng),分別為development、test、production,在此只修正development選項(xiàng)即可,修正成如下格式。 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ù)庫稱號(hào)默以為smart_sensor_development,如圖5-10所示。下面的命令如沒有特別闡明均是在smart_sensor根目錄下執(zhí)行的。圖5-10建立數(shù)據(jù)庫下面需求建立根本的數(shù)據(jù)表,在Rails中數(shù)據(jù)表是由一個(gè)Model來管理的,可以用Rails的命令來建立根本的Model。在根目錄下輸入rubyscript\generatemodeltemperature,如圖5-11所示。圖5-11建立根本的Model〔3〕建立根本的Model類。此時(shí)在db\migrate目錄下會(huì)生成一個(gè)xxx_create_temperatures.rb的文件,翻開該文件并修正成如下結(jié)果。這里主要是設(shè)置數(shù)據(jù)表的各個(gè)字段的類型以及其他細(xì)節(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ù)庫??刂破鞯墓δ苤饕菍?duì)外部的懇求進(jìn)展處置并前往相應(yīng)的結(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文件以真正實(shí)現(xiàn)該例如需求的方法。在此我們將實(shí)現(xiàn)index方法以輸出一切的temperature數(shù)據(jù),并且添加一個(gè)添加數(shù)據(jù)的方法以把傳感器發(fā)來的數(shù)據(jù)存入數(shù)據(jù)庫,詳細(xì)修正如下。#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這里添加了兩個(gè)方法,index和post_temperature。其中index方法用于輸出當(dāng)前存入數(shù)據(jù)庫的一切溫度的記錄,post_temperature方法是用來處置傳感器發(fā)來的提交數(shù)據(jù)的懇求,并把這些溫度數(shù)據(jù)存入數(shù)據(jù)庫,執(zhí)行勝利那么前往“OK〞,否那么前往“Fail〞。在此由于index方法會(huì)前往一個(gè)html文件,來控制前往結(jié)果的顯示。在Rails中會(huì)在views目錄下對(duì)前往的頁面文件進(jìn)展集中的管理。在此需求修正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當(dāng)收到某個(gè)懇求時(shí)知道該調(diào)用哪個(gè)控制器下的哪個(gè)方法來進(jìn)展處置,在此需求修正Rails的路由以符合該例如的要求。在Rails中修正路由也非常簡(jiǎn)單,只需求修正config\routes.rb文件即可。在該文件的最后曾經(jīng)有兩條默許的路由格式,需求修正這些路由規(guī)那么以符合我們的需求,詳細(xì)如下。 map.connect'temperature/post_temperature',:controller=>"temperature",

:action=>"post_temperature",:conditions=>{:method=>:post} map.connect':controller/:action' map.connect':controller/:action.:format’〔6〕修正路由。①當(dāng)收到發(fā)往temperature/post_temperature這個(gè)途徑的Post懇求時(shí)調(diào)用temperature控制器的post_temperature方法來進(jìn)展處置。②當(dāng)收到:controller/:action格式的路由時(shí),那么將第一個(gè)參數(shù)作為controller,第二個(gè)作為action。例如發(fā)送temperature/index,此時(shí)那么會(huì)采用temperature控制器的index方法來進(jìn)展處置。這里解釋一下這3條路由分別的含義。③前面與〔2〕一樣,另外添加了:format參數(shù)用來控制前往的格式,例如發(fā)送temperature/index.html那么采用temperature控制器的index方法,采用html格式的前往結(jié)果。假設(shè)發(fā)送temperature/index.xml那么以xml格式前往結(jié)果。路由的匹配規(guī)那么是從上向下依次進(jìn)展匹配,假設(shè)遇到匹配的規(guī)那么,那么采用該規(guī)那么,并且停頓向下匹配。

在此我們采用外部客戶自動(dòng)POST數(shù)據(jù)的方式來向Server發(fā)送懇求。Rails中為了防止惡意的POST數(shù)據(jù),采用了認(rèn)證授權(quán)的機(jī)制來防止這種攻擊,類似我們?nèi)缃癫捎玫腜OST的方式進(jìn)展上傳數(shù)據(jù),那么會(huì)引發(fā)RailsActionController::Invalid

AuthenticityToken異常,并且不會(huì)對(duì)我們的POST操作進(jìn)展處置。我們?cè)诖诵枨蠼迷撜J(rèn)證機(jī)制,方法也很簡(jiǎn)單,只需修正app\controllers\application_controller.rb文件即可,修正結(jié)果如下?!?〕修正控制器的認(rèn)證過濾器。classApplicationController<ActionController::Basehelper:all#includeallhelpers,allthetimeprotect_from_forgery#SeeActionController::RequestForgeryProtectionfordetails

#allowuploadthedatadirectlyskip_before_filter:verify_authenticity_token

#Scrubsensitiveparametersfromyourlog#filter_parameter_logging:passwordend接下來我們對(duì)本實(shí)例的功能進(jìn)展測(cè)試,包括兩部分:數(shù)據(jù)上傳和數(shù)據(jù)顯示。

①數(shù)據(jù)上傳。我們采用Curl來發(fā)送HTTP的POST懇求。Curl工具是Linux下的默許工具,如今也有Windows版的,可以直接在Curl的官網(wǎng)進(jìn)展下載〔curl.haxx.se/download.html〕,在此我們選用Win32-Generic的禁用SSL的版本?!?〕功能測(cè)試。首先開啟一個(gè)終端,在根目錄下輸入rubyscript/server,啟動(dòng)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所示。同時(shí)也可以查看效力器終端的log來分析懇求處置的過程。圖5-13發(fā)送POST懇求首先在根目錄下輸入rubysrcript/server來啟動(dòng)效力器〔假設(shè)曾經(jīng)啟動(dòng)效力器可跳過此步驟〕。然后在閱讀器地址欄輸入httplocalhost:3000/temperature或httplocalhost:3000/

temperature/index.html來顯示當(dāng)前數(shù)據(jù)庫中保管的溫度數(shù)據(jù),如圖5-14所示。他也可以采用XML的格式來顯示這些數(shù)據(jù),只需求在閱讀器地址欄輸入httplocalhost:3000/

temperature/index.xml即可,如圖5-15所示。②數(shù)據(jù)顯示。圖5-14HTML顯示當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)圖5-15XML顯示當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)5.3.2用J2EE開發(fā)WebService中間件J2EE〔Java2PlatformEnterpriseEdition〕是一套全然不同于傳統(tǒng)運(yùn)用開發(fā)的技術(shù)架構(gòu),包含諸多組件,可簡(jiǎn)化和規(guī)范運(yùn)用系統(tǒng)的開發(fā)與部署,進(jìn)而提高可移植性、平安性與反復(fù)利用價(jià)值。5.3.2用J2EE開發(fā)WebService中間件 J2EE中心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、效力架構(gòu)及技術(shù)層次,均有相通的規(guī)范與規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺(tái)之間存在良好的兼容性,處理了過去企業(yè)后端運(yùn)用的信息產(chǎn)品彼此之間無法兼容,企業(yè)內(nèi)部或外部難以互通的窘境。輕量級(jí)J2EE組件SSH〔Struts、Spring、Hibernate〕是目前J2EE快速開發(fā)的最正確組合。 Struts實(shí)現(xiàn)了MVC方式的非常成熟的Web運(yùn)用組件,廣泛運(yùn)用于各種Web運(yùn)用系統(tǒng)的表現(xiàn)層中。Hibernate是成熟的ORM組件,主要用于實(shí)現(xiàn)數(shù)據(jù)耐久化功能,最大作用在于構(gòu)筑了面向?qū)ο驤ava言語與關(guān)系型數(shù)據(jù)庫之間的橋梁,使得可以直接經(jīng)過對(duì)Java對(duì)象的耐久化操作完成對(duì)數(shù)據(jù)的耐久化操作。 Spring那么作為輕量級(jí)J2EE框架,其中心是一個(gè)功能強(qiáng)大的IoC容器,在此容器的根底上又提供了對(duì)AOP的支持,以及對(duì)耐久層和表現(xiàn)層的封裝實(shí)現(xiàn)。簡(jiǎn)而言之,Struts用來做控制,是MVC方式的控制層;Hibernate用來做耐久化,也是數(shù)據(jù)庫層,對(duì)數(shù)據(jù)庫進(jìn)展封裝;Spring用來整合J2EE各層之間的中間層,提高了層與層之間的松耦合,使得各層之間成為對(duì)立的模塊。1.J2EE開發(fā)環(huán)境搭建J2EE快速開發(fā)的最正確組合SSH架構(gòu),其中以Struts為例,實(shí)現(xiàn)了J2EE開發(fā)WebService案例。需求安裝和配置的軟件,包括Tomcat、Struts及其插件等,詳細(xì)實(shí)現(xiàn)步驟如下。Tomcat效力器現(xiàn)有最新版本6.0.29,可在/download-60.cgi官方網(wǎng)站下載。對(duì)于Windows操作系統(tǒng),可以下載zip格式或者exe格式兩種格式文件。zip格式文件解壓即可運(yùn)用,也可以選擇其他格式的文件,以6.0.18版本為例,如圖5-16所示?!?〕版本與下載地址。Tomcat安裝過程包括以下幾個(gè)步驟。圖5-16Tomcat效力器下載界面安裝Tomcat后,在“我的電腦〞->“屬性〞->“高級(jí)〞->“環(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歡迎頁面,那么闡明安裝勝利,可進(jìn)入下一步驟?!?〕啟動(dòng)Tomcat,IE中訪問httplocalhost:8080。Tomcat安裝目錄的webapps,可以見到ROOT、examples、tomcat-docs之類Tomcat自帶的文件目錄,并拷貝ROOT目錄下的WEB-INF目錄。在webapps目錄下新建一個(gè)目錄,命名myapp,并將上一步拷貝的WEB-INF目錄粘貼到此目錄下。在myapp下新建jsp測(cè)試頁面,文件名為index.jsp,文件內(nèi)容如下。〔4〕創(chuàng)建屬于本人的jspapp目錄。重啟Tomcat。翻開閱讀器,輸入httplocalhost:8080/myapp/index.jsp,假設(shè)頁面上顯示出當(dāng)前的時(shí)間,那么闡明安裝配置勝利。 <html> <body> <center> Nowtimeis:<%=new java.util.Date()%> </center> </body> </html>Struts的安裝過程包括以下幾個(gè)步驟。①版本和下載網(wǎng)址Struts最新版本是2.0.12,官方網(wǎng)站下載地址/download.cgi#struts2021,下載struts-2.0.12-all.zip〔91MB〕即可,其他文件均包含在此文檔中。〔5〕測(cè)試Javabean。由于struts1.x和struts2有很大區(qū)別,而現(xiàn)今許多書都是針對(duì)struts1.x所寫。在struts1.x版本中struts-config.xml是重要的配置文件,而在struts2中,它變成了struts.xml,而且文件的描畫內(nèi)容和struts-config.xml也有所差別,所以須小心謹(jǐn)慎。而且許多資料一開場(chǎng)就直接用IDE環(huán)境〔如MyEclipse〕來呈現(xiàn)Struts功能框架,使得我們?cè)诹私釹truts框架時(shí),也會(huì)有些疑惑。②安裝與配置由于Tomcat效力器可用記事本等小型的文本編輯器來實(shí)現(xiàn)jsp編寫,而假設(shè)讀者沒有集成完備、功能強(qiáng)大的MyEclipseIDE,能夠還需求下載和安裝,這樣必然會(huì)讓人覺得比較費(fèi)事和費(fèi)時(shí)。實(shí)踐上,只需弄清楚了Struts構(gòu)造,完全可以用記事本來實(shí)現(xiàn)Struts的功能框架。下面的章節(jié)將以HelloInternet為例,來引領(lǐng)讀者進(jìn)入J2EE開發(fā)WebService的大門,并在今后的深化研討與開發(fā)中,結(jié)合物聯(lián)網(wǎng)的背景,開發(fā)出更多功能豐富的物聯(lián)網(wǎng)創(chuàng)新運(yùn)用。2.J2EE編程實(shí)例用J2EE實(shí)現(xiàn)WebService實(shí)例時(shí),以Struts框架實(shí)現(xiàn)工程Struts2_HelloInternet為例,詳細(xì)實(shí)現(xiàn)過程及步驟如下?!?〕在webapps目錄下建立目錄Struts2_HelloInternet,完善目錄構(gòu)造,如圖5-17所示。圖5-17J2EE實(shí)例框架圖〔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?!?〕配置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文件,對(duì)標(biāo)簽filter、filter-mapping、welcome-file-list進(jìn)展相關(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"><!--當(dāng)動(dòng)作發(fā)生時(shí),實(shí)現(xiàn)HelloInternet

溫馨提示

  • 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)論