1 問題描述
利用Java EE相關技術實作一個簡單的Web聊天室系統,具體要求如下。
(1)寫一個登入頁面,登入資訊中有使用者名稱和密碼,分別用兩個按鈕來提交和重置登入資訊。
(2)編寫一個Servlet程式Main.java透過請求指派來處理使用者提交的登入訊息,如果使用者名為本小組成員的名字且密碼為對應的學號時,跳到LoginSuccess顯示聊天介面(類似於QQ群聊天介面,可使用HTML中的frameset標籤產生兩個窗口,一個用來實現使用者資訊輸入,另一個顯示所有使用者聊天記錄的);否則跳到LoginFail頁面,提示使用者重新登入(註:此頁要包含前面的登入介面)。
(3)寫兩個Servlet程序,分別用來顯示「訊息輸入」視窗和「聊天記錄顯示」視窗的內容;使用者在「訊息輸入」視窗中鍵入聊天內容,點擊「傳送」按鈕後,在「聊天記錄顯示」視窗中顯示傳送訊息的使用者名稱和聊天內容。提示:利用HTML中的textarea標籤來實作。
(4)在登入介面上實現記住使用者名稱和密碼的功能,使得當使用者選擇了此功能並成功登入後,在其下次登入時可以不用再輸入使用者名稱和密碼即可登入。提示:此功能可透過兩個Cookie來實現。
以下功能選做:
(5)編寫一個Listener程式來監聽會話的建立和銷毀事件,以此統計目前線上(登入)人數,並將其顯示在聊天介面上。
(6)新增一個Filter對本系統所有的Servlet程式進行過濾,該Filter實現對請求和回應物件的編碼格式的設定(實現此功能後,Servlet可以直接從請求物件中獲取參數資訊而無需實現對請求進行格式的編碼)。在【GlassFish Server】檢視中輸出程式在Filter和其它資源之間的執行順序。
2 解決方案
2.1 預期效果
圖一:網路聊天系統示意圖
圖二:系統結構示意圖welcome. jsp具體頁: 圖三:welcome.jsp實際運行圖 2.3 具體編碼(1)Main.java(Servlet類)透過請求分配來處理用戶提交的登錄頁面.資訊(並使用Cookie實現記住使用者登入使用者名稱和密碼功能),成功則跳到welcome.jsp,失敗則跳到login.jsp。具體實作如下:
網路聊天系統登陸首頁login.jsp頁面代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
Main.java類別程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
|
登陸失敗頁loginFail.jspomej
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
|
(3)CodeFilter.java(过滤器类)截取系统所有Servlet类,实现对请求和响应对象的编码格式的设置,均设置为UTF-8。具体实现如下:
CodeFilter.java类代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
(4)OnlineListener.java(监听器类)主动监听系统Web容器,返回当前聊天系统在线人数,具体实现如下:
OnlineListener.java类代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
此处还要给OnlineListener监听器类在web.xml文件中配置路径,web.xml配置代码具体如下(红色标记代码):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
在调用监听器类实现监听系统当前在线人数时,本机上同一个浏览器同时登陆多个用户,只能算作一次,本机上不同浏览器登陆则分别算作一次。以下分别是在IE、谷歌和360浏览器登陆在线人数显示:
图四:IE浏览器登陆,显示在线人数1人
图五:谷歌浏览器登陆,显示在线人数2人
图六:360浏览器登陆,显示在线人数3人
附:本文系统代码Coding链接:https://coding.net/u/LiuZhen1995/p/MyDemo/git/tree/origin_seven