999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于JSON的異構(gòu)Web平臺的設(shè)計與實現(xiàn)

2021-04-06 10:13:48黃秀麗
計算機技術(shù)與發(fā)展 2021年3期
關(guān)鍵詞:頁面實驗室數(shù)據(jù)庫

黃秀麗,陳 志

(1.南京理工大學(xué)紫金學(xué)院,江蘇 南京 210023;2.上海立信會計金融學(xué)院,上海 201209)

0 引 言

隨著互聯(lián)網(wǎng)的發(fā)展,Web平臺的前后端分離已經(jīng)成為必然。前后端發(fā)展的越來越多樣化。Web平臺前端往往需要同時支持手機端、平板電腦和PC端,對于前端應(yīng)用來說,更加注重功能應(yīng)用和良好的用戶體驗。目前,HTML5以及相對應(yīng)的前端框架實現(xiàn)了前端應(yīng)用的大部分功能,而包含開發(fā)語言的傳統(tǒng)前端網(wǎng)頁開發(fā)方式正逐步減少。Web平臺后端則更加集中于數(shù)據(jù)的存儲、分析和加工,同一個Web平臺經(jīng)常要支持多種類型的數(shù)據(jù)庫甚至開發(fā)語言。前后端需要通過一種獨立于語言和平臺的數(shù)據(jù)格式進行通信。

JSON(JavaScript object notation)由Douglas Crockford在2001年提出。JSON作為JavaScript的一個子集,是一種純文本的數(shù)據(jù)交換格式。目前,JSON在網(wǎng)絡(luò)安全、氣象數(shù)據(jù)、位置信息、3D技術(shù)、物聯(lián)網(wǎng)等領(lǐng)域應(yīng)用廣泛[1-6]。在JSON與XML進行數(shù)據(jù)傳輸效率對比時,實驗顯示JSON在數(shù)據(jù)傳輸效率方面明顯優(yōu)于其他數(shù)據(jù)傳輸格式[7-10]。JSON不僅支持傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,也支持NoSQL系統(tǒng)中常用的半結(jié)構(gòu)化數(shù)據(jù)模型,JSON對應(yīng)的查詢語言JSONiq以及JSON的模式形式和邏輯基礎(chǔ)也正在研究中[11]。

隨著Web平臺的發(fā)展,在同一個Web平臺中往往需要用到不同數(shù)據(jù)庫或者編程語言進行不同功能模塊的開發(fā)[12-14]。Java和Python作為目前主流的兩種語言,在數(shù)據(jù)處理和人工智能方面都有各自的優(yōu)勢。Java作為經(jīng)典的面向?qū)ο笳Z言,語法結(jié)構(gòu)嚴謹,應(yīng)用范圍廣泛,已經(jīng)占據(jù)了Web平臺開發(fā)的主流市場。Python作為近年來人工智能比較流行的語言,能夠以更簡潔的語法,更強大的第三方庫強有力地支撐復(fù)雜數(shù)據(jù)分析和智能處理。該文設(shè)計了一種結(jié)合Java和Python兩種語言的異構(gòu)Web平臺,實現(xiàn)了異構(gòu)平臺中的數(shù)據(jù)通信,同時采用了目前應(yīng)用廣泛的JSON作為異構(gòu)Web平臺的數(shù)據(jù)格式。

1 異構(gòu)Web平臺的設(shè)計

1.1 JSON數(shù)據(jù)格式

JSON是一種輕量級的數(shù)據(jù)交換格式,易于閱讀和編寫,也易于機器解析和生成。JSON使用的字符集是UTF-8,有兩種表示結(jié)構(gòu)。一種是通過一對大括號包含的一組“名/值”對的無序組合方式表示數(shù)據(jù),例如:{“name1”:“value1”,“name2”:2020}。“名/值”對通過冒號進行分隔,冒號的前面是名稱,冒號后面是和名稱對應(yīng)的屬性值,屬性值可以是布爾值、數(shù)字、字符串,也可以是JSON對象或JSON數(shù)組,甚至可以是null;另外一種結(jié)構(gòu)是JSON數(shù)組形式,例如:[{“name1”:“value1”},{“name2”:2020}]。在程序中把JSON對象表示為JSON字符串輸出,稱為JSON序列化。把JSON字符串恢復(fù)成JSON對象,就稱為反序列化,也稱為JSON解析。JSON在Web應(yīng)用中有很多優(yōu)點,如傳輸速率快、支持語言多、書寫簡單等。由于它的優(yōu)勢,現(xiàn)在廣泛應(yīng)用在開發(fā)中[15]。

1.2 異構(gòu)Web平臺設(shè)計

Java和Python作為經(jīng)典的面向?qū)ο笳Z言,在Web平臺的開發(fā)中可以發(fā)揮各自的優(yōu)勢,將Java和Python結(jié)合使用已經(jīng)成為很多Web平臺的選擇。目前,Java的Web容器大多是Tomcat,而Python的Web容器有Flask,Djongo等。Tomcat作為經(jīng)典的Web容器已經(jīng)發(fā)展到Tomcat10.0版本,部署方便,運行穩(wěn)定。這里選擇Tomcat作為Web容器,Java作為后端開發(fā)的主要語言,負責(zé)和數(shù)據(jù)庫的持久層進行交互工作。同時通過Java代碼調(diào)用Python的.py文件方法處理Web平臺的異構(gòu)情況。Java和Python之間需要進行數(shù)據(jù)的通信,這里選擇JSON數(shù)據(jù)作為相互通信的數(shù)據(jù)格式。Web平臺的前端采用完全獨立于后端的方式,前端頁面不包含后端開發(fā)語言,完全采用HTML5和前端框架VUE開發(fā),前后端之間通過Jquery和Ajax技術(shù)進行通信,同樣采用JSON數(shù)據(jù)格式進行交互,如圖1所示。

圖1 異構(gòu)Web平臺設(shè)計

Web平臺的視圖層即Web前端頁面,采用獨立于后端的前端語言實現(xiàn),可以增加對前端設(shè)備的兼容性,同時支持手機端、平板電腦、PC端以及不同的操作系統(tǒng)。視圖層通過Ajax和JSON數(shù)據(jù)相結(jié)合的方式與后端通信,減少了前后端開發(fā)的工作難度,可以各自獨立開發(fā),提升開發(fā)效率??刂茖油ㄟ^Servlet進行控制,負責(zé)對前端請求的統(tǒng)一處理,通過業(yè)務(wù)判斷選擇和數(shù)據(jù)庫交互或者是和Python腳本交互。模型層負責(zé)與持久層的數(shù)據(jù)庫進行交互。下面將通過一個實驗室管理系統(tǒng)的核心模塊實現(xiàn)代碼對異構(gòu)Web平臺的具體實現(xiàn)方式進行說明。該實驗室管理系統(tǒng)實現(xiàn)了實驗室的預(yù)約登記,實驗報告的提交和批改,實驗成績的登記和分析功能,通過Java語言的Tomcat8.0容器作為Web開發(fā)平臺,并調(diào)用Python3.6腳本實現(xiàn)成績數(shù)據(jù)的處理。

2 JSON在異構(gòu)開發(fā)語言中的應(yīng)用

2.1 JSON在異構(gòu)開發(fā)語言中的數(shù)據(jù)流分析

在實驗室成績管理模塊中,可以通過Python對學(xué)生成績進行更加全面和直觀的分析。教師用戶在前端頁面通過Ajax提交對特定班級和課程的分析請求。請求參數(shù)通過Tomcat服務(wù)器傳遞給控制層對應(yīng)的Servlet,在Servlet中對前端頁面?zhèn)鬟f的參數(shù)進行判斷,如果需要獲取對應(yīng)的數(shù)據(jù)庫信息,則通過模型層進行查詢并返回對應(yīng)的查詢結(jié)果。Servlet得到查詢結(jié)果以后,通過Gson對象將查詢結(jié)果封裝為JSON字符串,Servlet將JSON字符串作為程序運行參數(shù)傳遞給Python腳本。在這個過程中,數(shù)據(jù)流的傳遞過程如圖2所示。

圖2 成績分析模塊數(shù)據(jù)流圖

在數(shù)據(jù)流圖中可以看到,所有的數(shù)據(jù)集中在控制層進行處理,在異構(gòu)情況中使用JSON數(shù)據(jù)作為通信方式,可以很好地降低系統(tǒng)的耦合度,提高各個模塊的獨立性。

2.2 JSON在異構(gòu)開發(fā)語言中的通信實現(xiàn)

在異構(gòu)語言的Web項目中,需要安裝所有語言的運行環(huán)境。Web項目發(fā)布后,在服務(wù)器中除了安裝Java的運行環(huán)境,同時也要安裝Python的運行環(huán)境和使用到的第三方庫。Python的第三方庫安裝有多種方式,可以通過pip命令直接安裝,也可以通過圖形化開發(fā)軟件Pycharm安裝,或者將庫文件拷貝到安裝目錄site-packages文件夾里。為了更加方便地在服務(wù)器上運行Python腳本,這里推薦通過pip命令直接安裝的方式。以安裝第三方庫Numpy為例,可以在命令行輸入pip3 install numpy完成Numpy庫的安裝。

目前Java調(diào)用Python的方法主要有兩種:第一種是通過Jython的方式,Jython是一種可以在Java代碼中包含Python代碼并且解釋執(zhí)行的語言,但這種方式不能調(diào)用第三方庫;第二種方式是通過Java自帶的Runtime對象調(diào)用Python腳本并傳入JSON參數(shù),這種方式可以調(diào)用第三方庫,前提是在服務(wù)器上安裝了Python的運行環(huán)境和第三方庫。此處采用第二種方式。異構(gòu)Web平臺的控制層分析完教師用戶從頁面提交的成績分析請求后,調(diào)用數(shù)據(jù)庫查詢方法獲取成績數(shù)據(jù)封裝為對象列表,通過Gson對象將Java列表轉(zhuǎn)換為JSON字符串給Python腳本。Java在控制器中調(diào)用Python腳本的具體方式如下。

String result="";

String Scores="";

ArrayList scoreList=(ArrayList) new ScoreImpl().getScoreList();

Gson gs=new Gson();

String gsObject=gs.toJson(scoreList);

String argsForPython[]=new String[] {"python","/root/libpythonPlot/score.py",gsObject};

Process proc;

try {

proc=Runtime.getRuntime().exec(argsForPython);

BufferedReader in=new BufferedReader(new InputStreamReader(proc.getInputStream()));

String line="";

while ((line=in.readLine())!=null) {

result=result+line;

}

in.close();

proc.waitFor();

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

Python腳本的引用方式可以是相對路徑或絕對路徑,但為了避免項目發(fā)布時路徑的變化,更多地采用絕對路徑。Python腳本通過運行參數(shù)接受JSON字符串,并且通過json.loads方法將JSON字符串轉(zhuǎn)換為JSON對象。獲得JSON對象后可以通過下標進行循環(huán)遍歷。

scores=sys.argv[1]

jsonscore=json.loads(scores)

listx=[]

listy=[]

for index in range(len(jsonscore)):

listx.append(index)

listy.append(jsonscore[index-1]['score'])

x=np.array(listx)

y=np.array(listy)

通過Python腳本的運行可以繪制出分數(shù)對應(yīng)的數(shù)據(jù)分析圖,并由前端頁面調(diào)用顯示在網(wǎng)頁上。實現(xiàn)效果如圖3所示。

圖3 Java調(diào)用Python繪圖頁面顯示效果

通過JSON數(shù)據(jù)進行參數(shù)傳遞的方式,可以簡潔地將Java和Python在一個項目中結(jié)合使用,并且不改變Web項目原有的框架結(jié)構(gòu)。

3 JSON在異構(gòu)Web平臺前后端的應(yīng)用

異構(gòu)Web平臺同時要考慮前后端的異構(gòu)情況。前端如果通過JSP進行開發(fā),就需要在前端頁面處理很多Java對象,增加了前端開發(fā)的工作量,也不便于前端頁面的獨立設(shè)計和開發(fā)。通過使用輕量級的JSON數(shù)據(jù)格式進行前后端通信,可以大大降低前后端的耦合度,提升項目運行效率。這里以教師用戶進行實驗室預(yù)約登記功能模塊對前后端異構(gòu)處理進行說明。教師用戶在前端頁面中提交實驗室預(yù)約的請求信息,前端頁面對教師用戶提交的基本信息進行正確性校驗。如果校驗通過,則將用戶的預(yù)約信息封裝為JSON對象發(fā)送給控制層進行處理。教師用戶提交頁面如圖4所示。

圖4 實驗室預(yù)約登記頁面

在Web平臺中,前后端之間可以有多種方式進行JSON數(shù)據(jù)的通信[16],這里通過Ajax的post方法進行JSON通信,同時對Ajax返回的執(zhí)行結(jié)果data進行判斷,如果data為true,則表示實驗室預(yù)約登記成功。在前端通過Ajax請求JSON數(shù)據(jù)的時候,需要加上時間戳new Date()以保證每次請求的數(shù)據(jù)都是最新數(shù)據(jù)。

var url="roomOrder";

var args={

"teacher":teacher,

"department":department,

"weekstext":weekstext,

"weeketext":weeketext,

"daystext":daystext,

"dayetext":dayetext,

"classtext":classtext, "classetext":classetext,

"coursename":coursename,

"room":room,

"classname":classname,

"personnum":personnum,

"username":username,

"time":new Date()

};

$.post(url,args,function(data) {

if(data=="true"){

$("#notice").val("");

$("#notice").html("提交成功");}

});

前端頁面提交JSON數(shù)據(jù)給Tomcat容器的控制層,控制層解析JSON對象封裝的參數(shù)信息后進行業(yè)務(wù)邏輯判斷。如果判斷與原有數(shù)據(jù)庫記錄不沖突,則向數(shù)據(jù)庫添加新的實驗室預(yù)約登記條目,并且返回預(yù)約登記是否成功的結(jié)果。實驗室預(yù)約登記的數(shù)據(jù)流如圖5所示。

圖5 實驗室預(yù)約模塊數(shù)據(jù)流圖

在實驗室預(yù)約登記條目增加到數(shù)據(jù)庫之前,需要將登記信息和數(shù)據(jù)庫中的已有信息進行比較判斷,如果該實驗室已經(jīng)被占用則記錄增加不成功,這部分需要通過事務(wù)處理來執(zhí)行。在實驗室預(yù)約記錄表中增加記錄的同時,也向?qū)嶒炇沂褂们闆r記錄表中增加記錄,如果其中一個表的記錄增加失敗,則整個事務(wù)取消,并且返回執(zhí)行失敗的結(jié)果。實驗室預(yù)約記錄如表1所示,實驗室使用情況記錄如表2所示。

表1 實驗室預(yù)約記錄

表2 實驗室使用情況記錄

教師用戶提交實驗室預(yù)約登記信息后,可以通過前端頁面查看實驗室使用情況。控制層收到前端頁面?zhèn)鬟f的查看請求后,在Servlet中通過模型層獲取實驗室使用情況記錄表的查詢信息,并將查詢信息封裝為對象列表。得到對象列表后,Servlet將對象列表通過GSON對象進行JSON序列化并傳遞給前端頁面。具體代碼如下:

Gson gs=new Gson();

String gsObject=gs.toJson(weekListNew);

response.setContentType("text/html;charset=UTF-8 ");

response.getWriter().print(gsObject);

前端頁面收到執(zhí)行結(jié)果data也就是后端返回的JSON字符串后,要將data解析為JSON數(shù)組對象。得到JSON數(shù)組對象后,可以通過循環(huán)獲取具體的屬性值。

$.post( "ajextRoomServ",{"roomnum":room,"time":new Date()},function(data) {

jasondemo=$.parseJSON(data);//解析Json字符串

if (jasondemo!=null) {

for (var i=0, l=jasondemo.length;i

for (var key in jasondemo[i]) {

}

}

}

});

通過循環(huán)獲取到JSON對象的屬性值后,根據(jù)屬性值進行頁面表格的內(nèi)容修改,得到每個實驗室的使用情況。具體實現(xiàn)效果如圖6所示。

4 結(jié)束語

JSON數(shù)據(jù)作為一種獨立于平臺的數(shù)據(jù)格式,在實際項目中有非常突出的優(yōu)勢,也能很好地與不同的開發(fā)語言以及各種數(shù)據(jù)庫進行數(shù)據(jù)轉(zhuǎn)換。JSON數(shù)據(jù)不僅能降低前后端的耦合度,作為Web平臺前后端的通信方式,同時可以將Java和Python兩種語言結(jié)合起來。這將為日益智能化的Web開發(fā)帶來更加便利的解決方案。

基于以上情況,對多種語言的異構(gòu)Web平臺進行了研究,以JSON作為數(shù)據(jù)格式進行前后端的獨立開發(fā)和數(shù)據(jù)通信,同時以JSON數(shù)據(jù)通信作為Java和Python兩種語言的集成方式。詳細描述了JSON數(shù)據(jù)在異構(gòu)Web平臺的使用方式,并給出了Java和Python進行JSON通信的具體方法,以及前后端通過JSON通信的具體方法。目前獨立的數(shù)據(jù)格式逐漸成為主流,除了JSON之外,還有對于圖片和視頻更加友好的數(shù)據(jù)格式如GraghQL等。后續(xù)需要對新型數(shù)據(jù)格式進行不斷研究。

圖6 實驗室使用情況頁面顯示

猜你喜歡
頁面實驗室數(shù)據(jù)庫
大狗熊在睡覺
刷新生活的頁面
電競實驗室
電子競技(2019年22期)2019-03-07 05:17:26
電競實驗室
電子競技(2019年21期)2019-02-24 06:55:52
電競實驗室
電子競技(2019年20期)2019-02-24 06:55:35
電競實驗室
電子競技(2019年19期)2019-01-16 05:36:09
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
主站蜘蛛池模板: 免费全部高H视频无码无遮掩| 免费观看国产小粉嫩喷水| 欧美精品aⅴ在线视频| 成人日韩欧美| 精品国产女同疯狂摩擦2| 欧美一级视频免费| 欧美中出一区二区| 亚洲一区二区三区中文字幕5566| 国产免费a级片| 国产91av在线| 欧美成人A视频| 99久久亚洲精品影院| 亚洲视频a| 精品国产黑色丝袜高跟鞋| 啪啪永久免费av| 国产在线精品人成导航| 极品av一区二区| 国产欧美视频综合二区| 东京热一区二区三区无码视频| 久久美女精品| 国产成人麻豆精品| 71pao成人国产永久免费视频| 538精品在线观看| swag国产精品| 国产福利微拍精品一区二区| 小说区 亚洲 自拍 另类| 欧美日韩精品在线播放| 色综合久久综合网| 九九热精品免费视频| 亚洲欧美成人综合| 欧美日韩v| 亚洲性一区| 久久亚洲天堂| 亚洲男人天堂网址| 波多野结衣一区二区三区四区| 无码综合天天久久综合网| 国产精品私拍99pans大尺度| 狠狠做深爱婷婷久久一区| 日韩最新中文字幕| 园内精品自拍视频在线播放| 97久久人人超碰国产精品| 91九色国产porny| 视频一本大道香蕉久在线播放| 2018日日摸夜夜添狠狠躁| 国产成人精品视频一区二区电影| 黄色网站在线观看无码| 亚洲欧美日韩精品专区| 亚洲精品视频网| 2021亚洲精品不卡a| 精品无码一区二区三区在线视频| 国产一二视频| 亚洲天堂视频在线观看免费| 国产精品主播| 精品自拍视频在线观看| 97国产在线视频| 午夜福利在线观看成人| 国产对白刺激真实精品91| 精品视频一区在线观看| 国产精欧美一区二区三区| 久久综合色天堂av| 孕妇高潮太爽了在线观看免费| 中文无码毛片又爽又刺激| 99视频精品在线观看| 欧洲在线免费视频| 伊人国产无码高清视频| 国产精品久久自在自2021| 韩国自拍偷自拍亚洲精品| 国产高清无码第一十页在线观看| 99在线国产| 亚洲天堂首页| 日韩精品资源| 国产成人高清精品免费5388| 亚洲精品无码成人片在线观看| 69免费在线视频| 青青草原国产一区二区| 亚洲精品片911| 亚洲男人在线| 黄色网址免费在线| 免费看一级毛片波多结衣| 亚洲香蕉伊综合在人在线| av一区二区三区高清久久| 91久久国产成人免费观看|