質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

1回答

6154閲覧

WebSocketのセッションで、HTTPセッションの役割を果たしたいです

Sfidante

総合スコア90

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

0クリップ

投稿2015/07/18 09:35

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()と同値を取得できないものでしょうか?

何卒ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

投稿2015/07/18 09:59

eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sfidante

2015/07/18 14:38

ご回答ありがとうございます。 このページのおかげで解決致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問