javaweb + websocket實現(xiàn)客戶端

最近需要完成一個javaweb項目顾瞪,但是沒有和數(shù)據(jù)庫連接而是通過websocket通訊實現(xiàn)和服務(wù)器端數(shù)據(jù)交互。我搜了好多猪狈,網(wǎng)上大部分都是通過頁面websocket連接本地服務(wù)器或連接異地服務(wù)器箱沦,但是這些都把連接地址暴露在了外面,不是我想要的雇庙。本人希望websocket連接谓形、數(shù)據(jù)處理等都是在java后端完成的,結(jié)合網(wǎng)上的一些參考資料終于實現(xiàn)了此功能疆前。

這里有個比較好的Java后端WebSocket的Tomcat實現(xiàn)栗子寒跳,不過是將本地tomcat作為服務(wù)器,websocket連接也暴露在頁面竹椒。

接下來講講本人的實現(xiàn)童太,本人實現(xiàn)是使用springMVC框架,但是我們只用控制層即可:

Eclipse + JDK1.8 + tomcat8

1胸完、首先我在控制層包中創(chuàng)建一個WebSocketConnect類书释,在此類中實現(xiàn)websocket的連接方法。注意需要事先引入tomcat服務(wù)器lib文件夾中的websocket-api.jar和tomcat-websocket.jar赊窥,jsp-api.jar爆惧、servlet-api.jar,后面兩個可根據(jù)需要引入锨能。

//WebSocketClient連接publicclassWebSocketConnect{//websocket建立連接 publicvoidClientConnect(String userInfo,HttpServletRequest request){ HttpSession session = request.getSession();try{   WebSocketClient webSocketClient =newWebSocketClient(newURI("ws://服務(wù)器ip地址:8080/websocket"),newDraft_17()) {//打開鏈接@OverridepublicvoidonOpen(ServerHandshake shake){? System.out.println("握手检激。。腹侣。");? }//這個方法自動接收服務(wù)器發(fā)過來的信息,直接在此處調(diào)用自己寫的方法即可.本人將消息存入到session中叔收,別處可以監(jiān)聽,然后取出再清空@OverridepublicvoidonMessage(String msgString){ System.out.println("websocket返回消息"+ msgString);? }//客戶端發(fā)生錯誤,即將關(guān)閉!@OverridepublicvoidonError(Exception e){? System.out.println("發(fā)生錯誤已關(guān)閉");? }//關(guān)閉鏈接@OverridepublicvoidonClose(intarg0, String arg1, boolean arg2){? System.out.println("鏈接已關(guān)閉");? } };? webSocketClient.connect(); System.out.println("建立websocket連接");//將用戶websocket連接對象存入session中傲隶,別處用取出使用即可饺律。session.setAttribute("webSocketClient", webSocketClient); }catch(URISyntaxException e) { e.printStackTrace(); } }//關(guān)閉websocket連接publicvoidcloseWebSocket(HttpServletRequest request){ HttpSession session = request.getSession(); WebSocketClient webSocketClient = (WebSocketClient) session.getAttribute("webSocketClient"); webSocketClient.close(); System.out.println("websocket主動關(guān)閉!"); }}

2跺株、websocket連接方法已經(jīng)完成了复濒,下面我們就只需在用的地方調(diào)用即可脖卖,此處為我在用戶登錄控制器調(diào)用的栗子。

//實例化對象 WebSocketConnect webSocketConnect =newWebSocketConnect();/*用戶登錄*/@RequestMapping(value ="/login",method = RequestMethod.POST,produces="text/html;charset=UTF-8;")@ResponseBody//此注解不能省略 否則ajax無法接受返回值publicvoidlogin(HttpServletRequest request,HttpServletResponse response)throwsUnsupportedEncodingException{//調(diào)用對象webSocketConnect中連接方法webSocketConnect.ClientConnect(request);}

3巧颈、現(xiàn)在websocket已經(jīng)建立連接了畦木,那么下面我們需要去發(fā)送消息了

//從session中取出用戶登錄的連接對象,實現(xiàn)發(fā)送消息WebSocketClient webSocketClient = (WebSocketClient) session.getAttribute("webSocketClient");Stringmessage= “狼來了”砸泛; webSocketClient.send(message);

4十籍、最后退出系統(tǒng)時調(diào)用close方法即可。

//方式一:使用對象調(diào)用webSocketConnect類中寫的closeWebSocket方法唇礁。webSocketConnect.closeWebSocket(request);//方式二:從session中取出連接對象勾栗,直接調(diào)用close()方法。WebSocketClient webSocketClient = (WebSocketClient) session.getAttribute("webSocketClient");

歡迎工作一到五年的Java工程師朋友們加入Java技術(shù)交流:585550789

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盏筐,一起剝皮案震驚了整個濱河市围俘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琢融,老刑警劉巖界牡,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漾抬,居然都是意外死亡欢揖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門奋蔚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來她混,“玉大人,你說我怎么就攤上這事泊碑±ぐ矗” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵馒过,是天一觀的道長臭脓。 經(jīng)常有香客問我,道長腹忽,這世上最難降的妖魔是什么来累? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮窘奏,結(jié)果婚禮上嘹锁,老公的妹妹穿的比我還像新娘。我一直安慰自己着裹,他們只是感情好领猾,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般摔竿。 火紅的嫁衣襯著肌膚如雪面粮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天继低,我揣著相機與錄音熬苍,去河邊找鬼。 笑死袁翁,一個胖子當(dāng)著我的面吹牛柴底,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梦裂,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盖淡!你這毒婦竟也來了年柠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤褪迟,失蹤者是張志新(化名)和其女友劉穎冗恨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體味赃,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡掀抹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了心俗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傲武。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖城榛,靈堂內(nèi)的尸體忽然破棺而出揪利,到底是詐尸還是另有隱情,我是刑警寧澤狠持,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布疟位,位于F島的核電站,受9級特大地震影響喘垂,放射性物質(zhì)發(fā)生泄漏甜刻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一正勒、第九天 我趴在偏房一處隱蔽的房頂上張望得院。 院中可真熱鬧,春花似錦章贞、人聲如沸尿招。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽就谜。三九已至怪蔑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丧荐,已是汗流浹背缆瓣。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虹统,地道東北人弓坞。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像车荔,于是被迫代替她去往敵國和親渡冻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 日精進:平時對客戶的各種挑刺感到很無語忧便,當(dāng)你成為客戶的角度時就會明白族吻,誰都不愿意花錢買件次品回來。一一學(xué)會換位思考珠增。
    胡玉梅閱讀 188評論 0 0
  • 一個人每天堅持跑步超歌,擁有健康的身體和美麗的身材,我們就會覺得非常的崇拜蒂教,佩服不已巍举;一個人能夠在喧囂的世界每天安安靜...
    如如RURULILY閱讀 455評論 0 0
  • 不負廣大網(wǎng)友的重托,鳳姐成了中國駐美國吊絲代言人凝垛,但這樣的微博倒是對的懊悯,去瑞典的這一家子是不怎么愛人,將在國內(nèi)習(xí)慣...
    皎皎者何污閱讀 87評論 0 0
  • 2016年梦皮,羅莊區(qū)高都街道中坦社區(qū)的徐玉玉以568分的成績被南京郵電大學(xué)錄取定枷。8月19日,徐玉玉接到一通詐騙電話届氢,...
    浮殊閱讀 340評論 0 2
  • 最近欠窒,我的朋友找我聊天,說自己有個好的機會退子。但卻瞻前顧后的不敢邁出那一步岖妄。我就問他為什么不去做,他回答我:“我可能...
    四月騏跡閱讀 231評論 0 1