J2EE的手機短信平臺設計論文
時間:2022-09-17 05:40:00
導語:J2EE的手機短信平臺設計論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
摘要本文使用Java串口通信技術和JSP技術,對已有的短信系統進行研究,分析系統存在的問題,改善系統提取短信方法、提高系統性能、實現定時發送短信功能,并應用于Windows平臺下的Web系統中。
關鍵詞串口通信;手機短信;管理信息系統;JSP
1引言
隨著移動通訊的發展,移動辦公提供隨時隨地服務正成為當今信息技術發展的重要方向。以短信為基本服務平臺的服務渠道正被越來越多商家所采用。手機短信的行業應用越來越廣泛,它具有快捷、經濟、針對性強、可移動等優點。很多行業的企業用戶都希望能夠利用Web系統提供的手機短信服務功能來企業信息。如:客戶聯絡、新產品通知、會議通知、緊急通知、催費通知、發貨通知、訂單查詢、節日問候等,從而達到提高辦公效率、降低辦公成本的目的。
2問題分析
目前在PC上實現手機短信收發技術主要有三種:
(1)直接接入運營商短信網關,這種方法的實現不需要附加新的硬件,但是需要到運營商申請網關,適合于大型通信開發,如向移動、電信等公司申請,使用起來比較方便,但費用較高。
(2)通過一些網站上提供的短信發送功能來實現,如騰迅、網易等都提供這方面的服務,這種方法實現起來比較簡單,所需資源較少,但缺點是對網絡的依賴性太強,不利于集成到企業的MIS系統中。
(3)用GSMMODEM技術實現PC對手機收發信息,這是目前比較適合于小項目開發的一種方法,只需要對AT指令和串口編程的知識運用熟練就可以實現,但需要硬件GSMMODEM的支持。
當前,一些公司提供了短信開發的設備和配套的短信群發軟件,用它可以在軟件中集成相應的群發功能,雖然實現了發送短信的功能,但由于是單機版的,不利于遠程操作和多用戶的同時使用;也有一些基于Web的短信系統開發出來了,實現了手機短信的發送,但在手機短信的接收方面仍存在不足:如很多系統都是通過不斷刷新頁面來判斷是否收到有新的信息,這種方式使得系統效率下降,需要改進。另外,在目前已開發出的短信系統中尚缺乏定時發送短信功能,此功能的實現,可以為用戶的日程安排提供短信提醒服務。
基于以上因素,可以設計并實現一種B/S模式的短信系統,此系統在一種能通過輸入設備與服務器直接通信的MVC體系結構下構架,使用GSMMODEM以串口監聽方式觸發事件的方式接收短信以提高系統的性能,實現定時發送短信功能以滿足更多用戶的需求。
3系統體系結構
基于j2ee的Web式信息管理系統技術現已比較成熟,如Struts框架、ModelI體系結構、ModelII體系結構都可實現。本文體系結構是基于J2EE的MVC結構,實現一種能通過串口設備實現向系統進行輸入輸出的系統結構,如圖1所示。
在傳統的Web系統中,服務器的響應都是由客戶端經HTTP協議傳輸的數據服務請求,實現對Web資源的使用。本文的系統體系結構構架Web系統,除了能響應基于HTTP的數據請求外,還可通過與該服務器連接的GSMMODEM實現服務的請求,使得系統的信息傳遞更快捷,實現可移動性特點。
采用該體系結構構架Web系統,用戶可以通過HTTP協議向應用服務器請求數據處理,當服務器得到客戶端的請求數據后,控制器(Servlet)進行事務處理,模型(JavaBen)執行操作,如信息的查詢和保存等操作,最后通過視圖頁面傳回給用戶。
同時,用戶也可以通過手機發送數據給服務器,實現數據的處理。用戶發送信息向服務器請求服務,首先將信息給GSMMODEM,然后服務器通過與該設備連接的串口獲取數據,實現事件的響應。實質上,GSMMODEM就是服務器的一個輸入設備,相當于鍵盤,起數據輸入的作用。信息的接收,就是設計程序讓服務器自動檢測這個輸入設備是否“輸入”了數據。
同理,對該體系結構應用的推廣,所有輸入設備與服務器作為一體構架網絡服務器,實現Web服務,如應用于基于Web的工業控制系統、電壓測試系統等。
4系統功能
短信系統的主要功能有寫短信、發件箱、收件箱、電話簿、統計查詢和常用語的插入等,其功能模塊如圖2所示。
寫短信可以實現短信的單發和群發功能,無論是單發還是群發,發送對象都可以自由選擇,當發送對象選定后,系統查找數據庫中該號碼多對應的記錄信息自動生成稱呼,然后將其要發送的內容一起發送給所選對象。
發件箱用來存儲用戶所發的所有短信信息,以便用戶以后查看自己發送的短信,可實現對短信的管理,如轉發、刪除等。
收件箱用來存儲用戶所接收到的短信,該模塊除了實現短信的管理,如對短信的刪除、查詢等功能外,還提供短信回復功能,實現系統自動回復,在服務器收到用戶短信后對數據進行處理,然后自動回復給用戶;另外是用戶回復,通過系統身份驗證后,用戶可對收到的短信進行回復。
電話簿實現用戶對聯系人的管理,如新增聯系人、實現聯系人的分組等操作。
定時發送短信功能,可為用戶的日程安排提供幫助,如通過短信提醒參加會議、為朋友發送生日祝福短信等。用戶設定短信發送的具體時間,輸入將發送的信息并保存,在到達這個時間時,服務器自動將信息發送出去。
查詢統計是管理員實現查看指定用戶發送信息的數量等操作。
常用語管理實現快捷的輸入,用戶可編輯常用的短信內容并保存,在發送時可直接調出。
5系統實現
JSP、Servlet技術和數據庫技術在Web應用程序開發中的大量普及和應用,使得系統中寫短信、查詢統計、常用語等模塊的實現變得非常容易。
5.1收發短信
當前,采用的收發短信方法主要是在服務器端使用定時刷新頁面或通過定時器來實現。此方法是在每間隔一定時間,服務器掃描串口并讀取串口中的數據,然后確認是否解收到新數據。這雖然實現了信息的接收,但增加了服務器的開銷,無論是串口有無新數據,服務器都定時讀取數據,這便增加系統的負擔,從而將低了系統的性能。
基于串口監聽的方法接收數據,即當串口有新數據接收時產生監事件,通過事件驅動來“通知”服務器,然后取得手機發送過來的信息,從而進行處理和響應事件。這種方式的實現,其優勢主要體現在節省系統資源和數據接收的及時響應。
對串口監聽,即當收到數據立即響應事件,這與JavaApplication程序中的動作監聽(ActionListener)類似。在實現手機信息的接收過程中,可由類SerialPort中addEventListener(this)方法偵聽,當收到數據時產生事件,主要代碼如下:
publicvoidserialEvent(SerialPortEvente){
StringBufferinputBuffer=newStringBuffer();
intnewData=0;
switch(e.getEventType()){
//DATA_AVAILABLE-有數據到達,
caseSerialPortEvent.DATA_AVAILABLE:
//讀取數據信息,使用JavaBean中的模型進行數據處理
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));//調用對數據進行處理的方法,
//newString(inputBuffer)為接收到的內容
break;
caseSerialPortEvent.BI://BI-通訊中斷.
}
}
向手機發送信息,調用sendMsg()方法,在此方法的設計中,使用SerialPort類中的getOutputStream()初始化OutputStream類的對象outStream,該對象的write()方法將數據寫入串口。
publicvoidsendMsg(Stringmsg,StringphoneNumber){
getSerialPort();//打開串口
setupSerialPort();//初始化串口
try{
outStream.write("ATE0\r");//測試modem
outStream.write("AT+CMGF=1\r");//將信息設置為text模式
outStream.write("AT+CSCS=\"GSM\"\r",);//將字符設置為UCS2模式
outStream.write("AT+CSMP=17,167,0,240\r");//設置短信發送的相關參數
if(!msg.equals("")&&!phoneNumber.equals("")){
outStream.write("AT+CMGS="+phoneNumber+"\r",);
outStream.write(messageString);
outStream.write((char)26);
}
}catch(IOExceptionioe){}
closeIOStream();
closeSerialPort();
setToNull();
}
以上兩個函數分別實現了短信的收發功能,但在進行數據接收時,由于短信編碼與字符編碼不同,所以需要將編碼進行轉換。本文采用短信編碼的TEXT模式[1]。
5.2定時功能的實現
收發短信的實現,雖然為信息管理系統增加了新的功能,但還不能滿足其應用的需要,尚需要在系統中新增更多功能。以下實現的是在系統中定時發送短信功能,如定時為某用戶發送信息。
當Web工程啟動時,必須能讓定時器宿主的存活期為整個Web工程生命期,在工程啟動時能自動加載運行。結合這兩點,確定使用Servlet上下文有關的偵聽器實現定時功能,通過在工程的配置文件中加以合理配置,會在工程啟動時自動運行,并在整個工程生命期中處于監聽狀態。
通過Servlet偵聽器與Timer的結合,運用Servlet偵聽器需要實現javax.servlet.ServletContextListener接口,同時實現它的contextInitialized(ServletContextEventevent)和contextDestroyed(ServletContextEventevent)兩個接口函數。程序實現代碼如下:
publicclassTimerListenerextendsHttpServletimplementsServletContextListener{
publicvoidcontextInitialized(ServletContextEventsce){
//開始監聽,在此部分編寫定時功能的程序
SmsManager[]sm=newSmsManager[10000];
for(i=1;i<10000;i++);
//初始化任務
Timert=newTimer();
i=0;
MyTaskmt=newMyTask(sm);//自定義任務類
//該類run()方法執行發送短信
t.schedule(mt,0,1000);//每秒鐘檢測一次
}
publicvoidcontextDestroyed(ServletContextEventsce){
//定時器的銷毀
}
}
實現短信定時發送的具體方案中,將預發內容、時間、手機號碼、用戶等信息保存在數據庫中,當預發時間與當前系統時間相同時,將內容自動發送到指定手機中。于是,在實現時,時刻都要取出數據庫中的時間進行比較,這將大大地增加系統的開銷。為了減少頻繁的訪問數據庫,降低系統開銷,本文是使用動態鏈表實現。
首先將預發的內容、時間等信息封裝成類SmsManager,然后由該類創建對象數組,數組的長度可根據系統的用戶量決定,并由數據庫中未發標記的記錄按時間對每個數組元素初始化。功能的實施,就是通過對數組元素依次訪問,當數組每個元素全部訪問,系統再重新自動初始化數組對象。若有在當天預發的情況,則可用插入算法,按照時間鏈插入在數組中。
6結語
本系統作為某高校學生成績管理系統的一個子系統,實現了學生的短信查分、教學通知等服務,還為教職工的日程安排、會議通知等提供短信服務,這節省了學校的日常通訊費用,也提高了教務部門的工作效率。
參考文獻
[1]潘旭兵,林中.短信收發系統[J].電腦編程技巧與維護.2007(5):44-49
[2]WilliamCrawford,JonathanKaplan著,劉紹華,毛天露譯.J2EE設計模式[M].中國電力出版社,2005
[3]DeepakAlur,JohnCrupi,DanMalks著,劉天北,熊節等譯.J2EE核心模式(第二版).機械工業出版社,2005
[4]郭文生,杜軍平,尹怡欣,基于J2EE的旅游電子商務平臺的設計研究[J].計算機應用與軟件.2007(2):118-120
[5]陳軍,段良輝.基于J2EE的通用Web信息系統框架設計與實現[J].計算機系統應用.2007(1):6-9
[6]Y.DanielLiang著,王鎂,李娜等譯,Java語言程序設計[M],機械工業出版社.2004
- 上一篇:高校學生獎勵與資助系統論文
- 下一篇:企業如何才能發展得更好