WebSocketに関する質問が立て続けで申し訳ないのですが、
よろしくお願い致します。
###入力されたメッセージをサーブレットでMySQLに格納したい
まずは、クライアントのページの必要部分だけを記載致します。
javascript
1<script type="text/javascript"> 2 var webSocket; 3 window.onload = function() { 4 var forRtoA = document.createElement('a'); 5 forRtoA.href = "loadMessage"; 6 webSocket = new WebSocket(forRtoA.href.replace("http://", "ws://").replace("https://", "wss://")); 7 var messageArea = document.getElementById("messageArea"); 8 9 var appendMessage = function(value, color) { 10 var messageElement = document.createElement("div"); 11 messageElement.style.color = color; 12 messageElement.innerText = value; 13 messageArea.insertBefore(messageElement, messageArea.firstChild); 14 } 15 webSocket.onopen = function() { 16 appendMessage("Opened", "blue"); 17 } 18 webSocket.onclose = function() { 19 appendMessage("Closed", "red"); 20 } 21 webSocket.onmessage = function(message) { 22 var data = JSON.parse(message.data); 23 if ("message" == data.command) { 24 appendMessage(data.text, "black"); 25 } else if ("error" == data.command) { 26 appendMessage(data.text, "red"); 27 } 28 } 29 webSocket.onerror = function(message) { 30 appendMessage(message, "red"); 31 } 32 var messageInput = document.getElementById("messageInput"); 33 messageInput.onkeypress = function(e) { 34 if (13 == e.keyCode) { 35 var message = messageInput.value; 36 if (webSocket && "" != message) { 37 webSocket.send(message); 38 messageInput.value = ""; 39 } 40 } 41 } 42 } 43</script>
html
1<li class="msg_send "> 2 <div class="inner-box"> 3 <p class="balloon_right" id="messageArea"></p> 4 <p class="time_send">ここに時間を出力</p> 5 </div> 6</li> 7<textarea id="messageInput" class="p-sendbox" name="sendarea" maxlength="1000" cols="40" rows="2" wrap="soft"></textarea>
続いて、サーブレットでの処理を記載致します。
java
1package message; 2 3import java.io.IOException; 4import java.util.ArrayList; 5import java.util.List; 6 7import javax.servlet.ServletException; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11import javax.servlet.http.HttpSession; 12import javax.websocket.OnClose; 13import javax.websocket.OnError; 14import javax.websocket.OnMessage; 15import javax.websocket.OnOpen; 16import javax.websocket.Session; 17import javax.websocket.server.ServerEndpoint; 18 19import dao.MessageDao; 20 21@ServerEndpoint("/loadMessage") 22public class WebSocketEndpointAction extends HttpServlet{ 23 public static List<Session> sessions = new ArrayList<Session>(); 24 private static final long serialVersionUID = 1L; 25 26 String message = null; 27 @OnOpen 28 public void onOpen(Session session) { 29 // 開始時 30 sessions.add(session); 31 } 32 33 @OnMessage 34 public void onMessage(String message) throws IOException { 35 // クライアントからの受信時 36 for (Session session : sessions) { 37 session.getBasicRemote().sendText("{\"command\":\"message\", \"text\": \"" + message.replace("\\", "\\\\").replace("\"", "\\\"") + "\"}"); 38 } 39 } 40 41 @OnError 42 public void onError(Throwable t) throws IOException { 43 // エラー発生時 44 for (Session session : sessions) { 45 session.getBasicRemote().sendText("{\"command\":\"error\", \"text\": \"" + t.getMessage().replace("\\", "\\\\").replace("\"", "\\\"") + "\"}"); 46 } 47 } 48 49 @OnClose 50 public void onClose(Session session) { 51 // 完了時 52 sessions.remove(session); 53 } 54} 55 56/**おこないたいこと*/ 57protected void doGet(HttpServletRequest request, HttpServletResponse respons , String mess) 58 throws ServletException, IOException { 59 request.setCharacterEncoding("utf8"); 60 HttpSession ses = request.getSession(true); 61 int userid = (int)ses.getAttribute("userid"); 62 int roomid = (int)ses.getAttribute("roomid"); 63 MessageDao messagedao = new MessageDao(); 64 try{ 65 messagedao.connect(); 66 messagedao.insertMessage(userid, roomid, mess); 67 messagedao.close(); 68 }catch(Exception e){ 69 e.printStackTrace(); 70 } 71}
サーブレットでは入力されたメッセージを
java
1 messagedao.insertMessage(userid, roomid, mess);
でデータベースに格納したいです。
何卒よろしくお願い致します。
あなたの回答
tips
プレビュー