websocketの規格を用いてWebアプリケーションを作成しているのですが、
websocketで通信している時にhttpのセッションの値を参照したいと考えております。
現状のJavaのコード
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 @OnOpen 27 public void onOpen(Session session) { 28 // 開始時 29 sessions.add(session); 30 String id = session.getId(); 31 System.out.println(id); 32 } 33 34 @OnMessage 35 public void onMessage(String message) throws IOException, ServletException { 36 // クライアントからの受信時 37 for (Session session : sessions) { 38 session.getBasicRemote().sendText("{\"command\":\"message\", \"text\": \"" + message.replace("\\", "\\\\").replace("\"", "\\\"") + "\"}"); 39 String id = session.getId(); 40 System.out.println(id); 41 } 42 } 43 44 @OnError 45 public void onError(Throwable t) throws IOException { 46 // エラー発生時 47 for (Session session : sessions) { 48 session.getBasicRemote().sendText("{\"command\":\"error\", \"text\": \"" + t.getMessage().replace("\\", "\\\\").replace("\"", "\\\"") + "\"}"); 49 } 50 } 51 52 @OnClose 53 public void onClose(Session session) { 54 // 完了時 55 sessions.remove(session); 56 } 57}
session.getId()をおこなって値を取得しており、
この値とHTTPにで設定している値を照合させようかと考えておりました。
しかし、System.out.println()をした結果、
0や1といった値で、
HTTPでのセッションの値と大きく違っていました。
また、sessionの値を取得したい理由が、
session.setAttribute()で格納している値を用いて、
データベースと接続させることにあります。
どうにかして、WebSocketのセッションを取得して、
session.setAttribute()と同値を取得できないものでしょうか?
何卒ご教授お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/18 14:38