J2EE的手機(jī)短信平臺(tái)設(shè)計(jì)論文

時(shí)間:2022-09-17 05:40:00

導(dǎo)語:J2EE的手機(jī)短信平臺(tái)設(shè)計(jì)論文一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

J2EE的手機(jī)短信平臺(tái)設(shè)計(jì)論文

摘要本文使用Java串口通信技術(shù)和JSP技術(shù),對(duì)已有的短信系統(tǒng)進(jìn)行研究,分析系統(tǒng)存在的問題,改善系統(tǒng)提取短信方法、提高系統(tǒng)性能、實(shí)現(xiàn)定時(shí)發(fā)送短信功能,并應(yīng)用于Windows平臺(tái)下的Web系統(tǒng)中。

關(guān)鍵詞串口通信;手機(jī)短信;管理信息系統(tǒng);JSP

1引言

隨著移動(dòng)通訊的發(fā)展,移動(dòng)辦公提供隨時(shí)隨地服務(wù)正成為當(dāng)今信息技術(shù)發(fā)展的重要方向。以短信為基本服務(wù)平臺(tái)的服務(wù)渠道正被越來越多商家所采用。手機(jī)短信的行業(yè)應(yīng)用越來越廣泛,它具有快捷、經(jīng)濟(jì)、針對(duì)性強(qiáng)、可移動(dòng)等優(yōu)點(diǎn)。很多行業(yè)的企業(yè)用戶都希望能夠利用Web系統(tǒng)提供的手機(jī)短信服務(wù)功能來企業(yè)信息。如:客戶聯(lián)絡(luò)、新產(chǎn)品通知、會(huì)議通知、緊急通知、催費(fèi)通知、發(fā)貨通知、訂單查詢、節(jié)日問候等,從而達(dá)到提高辦公效率、降低辦公成本的目的。

2問題分析

目前在PC上實(shí)現(xiàn)手機(jī)短信收發(fā)技術(shù)主要有三種:

(1)直接接入運(yùn)營(yíng)商短信網(wǎng)關(guān),這種方法的實(shí)現(xiàn)不需要附加新的硬件,但是需要到運(yùn)營(yíng)商申請(qǐng)網(wǎng)關(guān),適合于大型通信開發(fā),如向移動(dòng)、電信等公司申請(qǐng),使用起來比較方便,但費(fèi)用較高。

(2)通過一些網(wǎng)站上提供的短信發(fā)送功能來實(shí)現(xiàn),如騰迅、網(wǎng)易等都提供這方面的服務(wù),這種方法實(shí)現(xiàn)起來比較簡(jiǎn)單,所需資源較少,但缺點(diǎn)是對(duì)網(wǎng)絡(luò)的依賴性太強(qiáng),不利于集成到企業(yè)的MIS系統(tǒng)中。

(3)用GSMMODEM技術(shù)實(shí)現(xiàn)PC對(duì)手機(jī)收發(fā)信息,這是目前比較適合于小項(xiàng)目開發(fā)的一種方法,只需要對(duì)AT指令和串口編程的知識(shí)運(yùn)用熟練就可以實(shí)現(xiàn),但需要硬件GSMMODEM的支持。

當(dāng)前,一些公司提供了短信開發(fā)的設(shè)備和配套的短信群發(fā)軟件,用它可以在軟件中集成相應(yīng)的群發(fā)功能,雖然實(shí)現(xiàn)了發(fā)送短信的功能,但由于是單機(jī)版的,不利于遠(yuǎn)程操作和多用戶的同時(shí)使用;也有一些基于Web的短信系統(tǒng)開發(fā)出來了,實(shí)現(xiàn)了手機(jī)短信的發(fā)送,但在手機(jī)短信的接收方面仍存在不足:如很多系統(tǒng)都是通過不斷刷新頁面來判斷是否收到有新的信息,這種方式使得系統(tǒng)效率下降,需要改進(jìn)。另外,在目前已開發(fā)出的短信系統(tǒng)中尚缺乏定時(shí)發(fā)送短信功能,此功能的實(shí)現(xiàn),可以為用戶的日程安排提供短信提醒服務(wù)。

基于以上因素,可以設(shè)計(jì)并實(shí)現(xiàn)一種B/S模式的短信系統(tǒng),此系統(tǒng)在一種能通過輸入設(shè)備與服務(wù)器直接通信的MVC體系結(jié)構(gòu)下構(gòu)架,使用GSMMODEM以串口監(jiān)聽方式觸發(fā)事件的方式接收短信以提高系統(tǒng)的性能,實(shí)現(xiàn)定時(shí)發(fā)送短信功能以滿足更多用戶的需求。

3系統(tǒng)體系結(jié)構(gòu)

基于j2ee的Web式信息管理系統(tǒng)技術(shù)現(xiàn)已比較成熟,如Struts框架、ModelI體系結(jié)構(gòu)、ModelII體系結(jié)構(gòu)都可實(shí)現(xiàn)。本文體系結(jié)構(gòu)是基于J2EE的MVC結(jié)構(gòu),實(shí)現(xiàn)一種能通過串口設(shè)備實(shí)現(xiàn)向系統(tǒng)進(jìn)行輸入輸出的系統(tǒng)結(jié)構(gòu),如圖1所示。

在傳統(tǒng)的Web系統(tǒng)中,服務(wù)器的響應(yīng)都是由客戶端經(jīng)HTTP協(xié)議傳輸?shù)臄?shù)據(jù)服務(wù)請(qǐng)求,實(shí)現(xiàn)對(duì)Web資源的使用。本文的系統(tǒng)體系結(jié)構(gòu)構(gòu)架Web系統(tǒng),除了能響應(yīng)基于HTTP的數(shù)據(jù)請(qǐng)求外,還可通過與該服務(wù)器連接的GSMMODEM實(shí)現(xiàn)服務(wù)的請(qǐng)求,使得系統(tǒng)的信息傳遞更快捷,實(shí)現(xiàn)可移動(dòng)性特點(diǎn)。

采用該體系結(jié)構(gòu)構(gòu)架Web系統(tǒng),用戶可以通過HTTP協(xié)議向應(yīng)用服務(wù)器請(qǐng)求數(shù)據(jù)處理,當(dāng)服務(wù)器得到客戶端的請(qǐng)求數(shù)據(jù)后,控制器(Servlet)進(jìn)行事務(wù)處理,模型(JavaBen)執(zhí)行操作,如信息的查詢和保存等操作,最后通過視圖頁面?zhèn)骰亟o用戶。

同時(shí),用戶也可以通過手機(jī)發(fā)送數(shù)據(jù)給服務(wù)器,實(shí)現(xiàn)數(shù)據(jù)的處理。用戶發(fā)送信息向服務(wù)器請(qǐng)求服務(wù),首先將信息給GSMMODEM,然后服務(wù)器通過與該設(shè)備連接的串口獲取數(shù)據(jù),實(shí)現(xiàn)事件的響應(yīng)。實(shí)質(zhì)上,GSMMODEM就是服務(wù)器的一個(gè)輸入設(shè)備,相當(dāng)于鍵盤,起數(shù)據(jù)輸入的作用。信息的接收,就是設(shè)計(jì)程序讓服務(wù)器自動(dòng)檢測(cè)這個(gè)輸入設(shè)備是否“輸入”了數(shù)據(jù)。

同理,對(duì)該體系結(jié)構(gòu)應(yīng)用的推廣,所有輸入設(shè)備與服務(wù)器作為一體構(gòu)架網(wǎng)絡(luò)服務(wù)器,實(shí)現(xiàn)Web服務(wù),如應(yīng)用于基于Web的工業(yè)控制系統(tǒng)、電壓測(cè)試系統(tǒng)等。

4系統(tǒng)功能

短信系統(tǒng)的主要功能有寫短信、發(fā)件箱、收件箱、電話簿、統(tǒng)計(jì)查詢和常用語的插入等,其功能模塊如圖2所示。

寫短信可以實(shí)現(xiàn)短信的單發(fā)和群發(fā)功能,無論是單發(fā)還是群發(fā),發(fā)送對(duì)象都可以自由選擇,當(dāng)發(fā)送對(duì)象選定后,系統(tǒng)查找數(shù)據(jù)庫(kù)中該號(hào)碼多對(duì)應(yīng)的記錄信息自動(dòng)生成稱呼,然后將其要發(fā)送的內(nèi)容一起發(fā)送給所選對(duì)象。

發(fā)件箱用來存儲(chǔ)用戶所發(fā)的所有短信信息,以便用戶以后查看自己發(fā)送的短信,可實(shí)現(xiàn)對(duì)短信的管理,如轉(zhuǎn)發(fā)、刪除等。

收件箱用來存儲(chǔ)用戶所接收到的短信,該模塊除了實(shí)現(xiàn)短信的管理,如對(duì)短信的刪除、查詢等功能外,還提供短信回復(fù)功能,實(shí)現(xiàn)系統(tǒng)自動(dòng)回復(fù),在服務(wù)器收到用戶短信后對(duì)數(shù)據(jù)進(jìn)行處理,然后自動(dòng)回復(fù)給用戶;另外是用戶回復(fù),通過系統(tǒng)身份驗(yàn)證后,用戶可對(duì)收到的短信進(jìn)行回復(fù)。

電話簿實(shí)現(xiàn)用戶對(duì)聯(lián)系人的管理,如新增聯(lián)系人、實(shí)現(xiàn)聯(lián)系人的分組等操作。

定時(shí)發(fā)送短信功能,可為用戶的日程安排提供幫助,如通過短信提醒參加會(huì)議、為朋友發(fā)送生日祝福短信等。用戶設(shè)定短信發(fā)送的具體時(shí)間,輸入將發(fā)送的信息并保存,在到達(dá)這個(gè)時(shí)間時(shí),服務(wù)器自動(dòng)將信息發(fā)送出去。

查詢統(tǒng)計(jì)是管理員實(shí)現(xiàn)查看指定用戶發(fā)送信息的數(shù)量等操作。

常用語管理實(shí)現(xiàn)快捷的輸入,用戶可編輯常用的短信內(nèi)容并保存,在發(fā)送時(shí)可直接調(diào)出。

5系統(tǒng)實(shí)現(xiàn)

JSP、Servlet技術(shù)和數(shù)據(jù)庫(kù)技術(shù)在Web應(yīng)用程序開發(fā)中的大量普及和應(yīng)用,使得系統(tǒng)中寫短信、查詢統(tǒng)計(jì)、常用語等模塊的實(shí)現(xiàn)變得非常容易。

5.1收發(fā)短信

當(dāng)前,采用的收發(fā)短信方法主要是在服務(wù)器端使用定時(shí)刷新頁面或通過定時(shí)器來實(shí)現(xiàn)。此方法是在每間隔一定時(shí)間,服務(wù)器掃描串口并讀取串口中的數(shù)據(jù),然后確認(rèn)是否解收到新數(shù)據(jù)。這雖然實(shí)現(xiàn)了信息的接收,但增加了服務(wù)器的開銷,無論是串口有無新數(shù)據(jù),服務(wù)器都定時(shí)讀取數(shù)據(jù),這便增加系統(tǒng)的負(fù)擔(dān),從而將低了系統(tǒng)的性能。

基于串口監(jiān)聽的方法接收數(shù)據(jù),即當(dāng)串口有新數(shù)據(jù)接收時(shí)產(chǎn)生監(jiān)事件,通過事件驅(qū)動(dòng)來“通知”服務(wù)器,然后取得手機(jī)發(fā)送過來的信息,從而進(jìn)行處理和響應(yīng)事件。這種方式的實(shí)現(xiàn),其優(yōu)勢(shì)主要體現(xiàn)在節(jié)省系統(tǒng)資源和數(shù)據(jù)接收的及時(shí)響應(yīng)。

對(duì)串口監(jiān)聽,即當(dāng)收到數(shù)據(jù)立即響應(yīng)事件,這與JavaApplication程序中的動(dòng)作監(jiān)聽(ActionListener)類似。在實(shí)現(xiàn)手機(jī)信息的接收過程中,可由類SerialPort中addEventListener(this)方法偵聽,當(dāng)收到數(shù)據(jù)時(shí)產(chǎn)生事件,主要代碼如下:

publicvoidserialEvent(SerialPortEvente){

StringBufferinputBuffer=newStringBuffer();

intnewData=0;

switch(e.getEventType()){

//DATA_AVAILABLE-有數(shù)據(jù)到達(dá),

caseSerialPortEvent.DATA_AVAILABLE:

//讀取數(shù)據(jù)信息,使用JavaBean中的模型進(jìn)行數(shù)據(jù)處理

while(newData!=-1){

try{

newData=this.inStream.read();

if(newData==-1){

break;}

if(''''\r''''==(char)newData){

inputBuffer.append(''''\n'''');}

else{

inputBuffer.append((char)newData);}

}catch(IOExceptionex){

System.err.println(ex);

return;}

}

operateMsg(newString(inputBuffer));//調(diào)用對(duì)數(shù)據(jù)進(jìn)行處理的方法,

//newString(inputBuffer)為接收到的內(nèi)容

break;

caseSerialPortEvent.BI://BI-通訊中斷.

}

}

向手機(jī)發(fā)送信息,調(diào)用sendMsg()方法,在此方法的設(shè)計(jì)中,使用SerialPort類中的getOutputStream()初始化OutputStream類的對(duì)象outStream,該對(duì)象的write()方法將數(shù)據(jù)寫入串口。

publicvoidsendMsg(Stringmsg,StringphoneNumber){

getSerialPort();//打開串口

setupSerialPort();//初始化串口

try{

outStream.write("ATE0\r");//測(cè)試modem

outStream.write("AT+CMGF=1\r");//將信息設(shè)置為text模式

outStream.write("AT+CSCS=\"GSM\"\r",);//將字符設(shè)置為UCS2模式

outStream.write("AT+CSMP=17,167,0,240\r");//設(shè)置短信發(fā)送的相關(guān)參數(shù)

if(!msg.equals("")&&!phoneNumber.equals("")){

outStream.write("AT+CMGS="+phoneNumber+"\r",);

outStream.write(messageString);

outStream.write((char)26);

}

}catch(IOExceptionioe){}

closeIOStream();

closeSerialPort();

setToNull();

}

以上兩個(gè)函數(shù)分別實(shí)現(xiàn)了短信的收發(fā)功能,但在進(jìn)行數(shù)據(jù)接收時(shí),由于短信編碼與字符編碼不同,所以需要將編碼進(jìn)行轉(zhuǎn)換。本文采用短信編碼的TEXT模式[1]。

5.2定時(shí)功能的實(shí)現(xiàn)

收發(fā)短信的實(shí)現(xiàn),雖然為信息管理系統(tǒng)增加了新的功能,但還不能滿足其應(yīng)用的需要,尚需要在系統(tǒng)中新增更多功能。以下實(shí)現(xiàn)的是在系統(tǒng)中定時(shí)發(fā)送短信功能,如定時(shí)為某用戶發(fā)送信息。

當(dāng)Web工程啟動(dòng)時(shí),必須能讓定時(shí)器宿主的存活期為整個(gè)Web工程生命期,在工程啟動(dòng)時(shí)能自動(dòng)加載運(yùn)行。結(jié)合這兩點(diǎn),確定使用Servlet上下文有關(guān)的偵聽器實(shí)現(xiàn)定時(shí)功能,通過在工程的配置文件中加以合理配置,會(huì)在工程啟動(dòng)時(shí)自動(dòng)運(yùn)行,并在整個(gè)工程生命期中處于監(jiān)聽狀態(tài)。

通過Servlet偵聽器與Timer的結(jié)合,運(yùn)用Servlet偵聽器需要實(shí)現(xiàn)javax.servlet.ServletContextListener接口,同時(shí)實(shí)現(xiàn)它的contextInitialized(ServletContextEventevent)和contextDestroyed(ServletContextEventevent)兩個(gè)接口函數(shù)。程序?qū)崿F(xiàn)代碼如下:

publicclassTimerListenerextendsHttpServletimplementsServletContextListener{

publicvoidcontextInitialized(ServletContextEventsce){

//開始監(jiān)聽,在此部分編寫定時(shí)功能的程序

SmsManager[]sm=newSmsManager[10000];

for(i=1;i<10000;i++);

//初始化任務(wù)

Timert=newTimer();

i=0;

MyTaskmt=newMyTask(sm);//自定義任務(wù)類

//該類run()方法執(zhí)行發(fā)送短信

t.schedule(mt,0,1000);//每秒鐘檢測(cè)一次

}

publicvoidcontextDestroyed(ServletContextEventsce){

//定時(shí)器的銷毀

}

}

實(shí)現(xiàn)短信定時(shí)發(fā)送的具體方案中,將預(yù)發(fā)內(nèi)容、時(shí)間、手機(jī)號(hào)碼、用戶等信息保存在數(shù)據(jù)庫(kù)中,當(dāng)預(yù)發(fā)時(shí)間與當(dāng)前系統(tǒng)時(shí)間相同時(shí),將內(nèi)容自動(dòng)發(fā)送到指定手機(jī)中。于是,在實(shí)現(xiàn)時(shí),時(shí)刻都要取出數(shù)據(jù)庫(kù)中的時(shí)間進(jìn)行比較,這將大大地增加系統(tǒng)的開銷。為了減少頻繁的訪問數(shù)據(jù)庫(kù),降低系統(tǒng)開銷,本文是使用動(dòng)態(tài)鏈表實(shí)現(xiàn)。

首先將預(yù)發(fā)的內(nèi)容、時(shí)間等信息封裝成類SmsManager,然后由該類創(chuàng)建對(duì)象數(shù)組,數(shù)組的長(zhǎng)度可根據(jù)系統(tǒng)的用戶量決定,并由數(shù)據(jù)庫(kù)中未發(fā)標(biāo)記的記錄按時(shí)間對(duì)每個(gè)數(shù)組元素初始化。功能的實(shí)施,就是通過對(duì)數(shù)組元素依次訪問,當(dāng)數(shù)組每個(gè)元素全部訪問,系統(tǒng)再重新自動(dòng)初始化數(shù)組對(duì)象。若有在當(dāng)天預(yù)發(fā)的情況,則可用插入算法,按照時(shí)間鏈插入在數(shù)組中。

6結(jié)語

本系統(tǒng)作為某高校學(xué)生成績(jī)管理系統(tǒng)的一個(gè)子系統(tǒng),實(shí)現(xiàn)了學(xué)生的短信查分、教學(xué)通知等服務(wù),還為教職工的日程安排、會(huì)議通知等提供短信服務(wù),這節(jié)省了學(xué)校的日常通訊費(fèi)用,也提高了教務(wù)部門的工作效率。

參考文獻(xiàn)

[1]潘旭兵,林中.短信收發(fā)系統(tǒng)[J].電腦編程技巧與維護(hù).2007(5):44-49

[2]WilliamCrawford,JonathanKaplan著,劉紹華,毛天露譯.J2EE設(shè)計(jì)模式[M].中國(guó)電力出版社,2005

[3]DeepakAlur,JohnCrupi,DanMalks著,劉天北,熊節(jié)等譯.J2EE核心模式(第二版).機(jī)械工業(yè)出版社,2005

[4]郭文生,杜軍平,尹怡欣,基于J2EE的旅游電子商務(wù)平臺(tái)的設(shè)計(jì)研究[J].計(jì)算機(jī)應(yīng)用與軟件.2007(2):118-120

[5]陳軍,段良輝.基于J2EE的通用Web信息系統(tǒng)框架設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用.2007(1):6-9

[6]Y.DanielLiang著,王鎂,李娜等譯,Java語言程序設(shè)計(jì)[M],機(jī)械工業(yè)出版社.2004