• 締切済み

セッション属性

HttpSession 属性に HashMap がバインドされています。 そこで、HttpSession の getAttribute で取得した HashMap オブジェクトで、任意のキーにバインドされている値をgetして、putで入れなおして変更すると、 結局、セッション属性にバインドされている HashMap の値が更新されることになる。 (setAttribute メソッドは使わない) 上記は正しいですか? とりあえず、簡素に質問しました。

noname#101202
noname#101202
  • Java
  • 回答数3
  • ありがとう数4

みんなの回答

回答No.3

メソッドへの引数がオブジェクトの場合は、参照渡しだからです。 「java 参照渡し」あたりで調べてみて下さい。

回答No.2

私が正しいですといったら信じるんですか? HashMapの仕組みを理解していればわかる答えだと思いますけど。

noname#101202
質問者

お礼

getAttribute で取得した HashMap オブジェクトは、セッションにバインドされているHashMapを参照しているという単純なことですか。

回答No.1

やってみたらいいでしょう。

noname#101202
質問者

お礼

はい、やってみたらどうも正しいようなのです。 ほんとに正しいのですよね?

関連するQ&A

  • Servlet-JSP のセッション管理

    すいません。 セッションというものを使ってみたいなと思い、 本などを、見よう見真似で下のようなものを作ってみましたが、 まったく動きません。どこがいけませんか? ーーservlet-ー HttpSession session = req.getSession(); if (session.isNew()) {  session.setAttribute("test","ssm3u"); } ーーforwardされるJSP-ー <% HttpSession session = request.getSession(); %> <%= (String)session.getAttribute("test"); %> "ssm3u"と出したいのですが、全然違うのでしょうか? 自分ではCookieを利用するセッション管理を作ったつもりです・・

    • ベストアンサー
    • Java
  • Sessionについて

    今、JSPを用いてログイン画面を作成しているのですが、Sessionの使い方がいまいちわかりません。 HttpSession ses = request.getSession(); ses.setAttribute("id",id); これでSessionに格納するのはわかりますが Sessionから値を取り出す方法がわかりません。 どなたか助けてください

    • ベストアンサー
    • Java
  • セッションを使ったint型の値の保持

    こんにちは。 少し文が長いですがよろしくお願いします。 AccessのDBから取得したint型の値を、セッションを使って保持したいのですが while(rs.next()){ String name = rs.getString("NAME"); int value = rs.getInt("VALUE"); HttpSession session1 = req.getSession(true); HttpSession session2 = req.getSession(true); session1.setAttribute("Name", name); session2.setAttribute("Value", value); dispatcher2.include(req, res); } のコードの session2.setAttribute("Value", value); でコンパイルエラー DBAccess.java [37:1] javax.servlet.ServletRequest の setAttribute(java.lang.String,java.lang.Object) は (java.lang.String,int) に適用できません。 がでてうまくいきません。 セッションを使ってint型の値の保持を行うにはどうすればよいのでしょうか?

    • ベストアンサー
    • Java
  • セッションについて(サーバーサイドJava)

    Ajaxフレームワーク(DWR)を使いJavaScriptからJavaのメソッドを 呼び出すプログラム(一部)でセッション管理についてです。 下記のプログラムの様にコンストラクタでセッションのオブジェクト を作成し、(クライアント)JavaScriptからJavaのaddMember()を実行してセッションの 設定を行なった場合、複数のクライアントからアクセスがあった時でも そのクライアント数に応じたセッションが作成されるでしょうか? それともコンストラクタでセッションのオブジェクトが一つしか作成 されていない為、クライアントがaddMember()を実行するたびに セッションの設定が上書きされるのでしょうか? もし上書きする場合で改善する場合はaddMember()の中で context = WebContextFactory.get(); session = context.getSession(); session.setAttribute("userName", name); session.setAttribute("loginId", id); の様にセッションオブジェクトを作成してから 設定した方がいいのでしょうか? 以下Java(サーバー)プログラムです。 @RemoteProxy(name="DataManager", scope=ScriptScope.APPLICATION) public class DataManager{ private WebContext context; private HttpSession session; public DataManager(){ memberList = new ArrayList<Data>(); context = WebContextFactory.get(); session = context.getSession(); }//コンストラクタ ///JavaScriptから呼び出すメソッド @RemoteMethod public String addMember(String nameStr){ String id = this.createId(); String name = this.strEscape(nameStr); /////このメソッドが実行されるたびにセッションが上書きされる? session.setAttribute("userName", name); session.setAttribute("loginId", id); ---------------------[途中まで]-----------------------------

    • ベストアンサー
    • Java
  • セッションオブジェクトの使い方(次画面の渡し方について)

    セッションオブジェクトの渡し方について教えてください。 セッションオブジェクトは、どのタイミングで、次の画面にセッションオブジェクトを渡しているのでしょうか? ▼リクエストオブジェクトを次の画面に渡す場合 request.setAttribute("キー" , 格納したい値); という風に、リクエストオブジェクトの中に値をセットできると思います。 そして、  ・RequestDispatcher rd = request.getRequestDispatcher("画面遷移先URL");  ・rd.foward(request, response); これが実行されたタイミングで、requestオブジェクトに格納した情報を、次の画面に渡していると思いますが ▼セッションオブジェクトを次の画面に渡す場合 いったいどこでセッションオブジェクトを、次の画面に渡しているのでしょうか? セッションの値の入れ方としては session.setAttribute("キー" , 格納したい値); という形でセッションオブジェクトに対して、値を格納しているのだとは思いますが・・・ ここでセットした値を、 どうやって、次の画面にもっていっているのでしょうか? 【不思議に感じているところ】  1.セッションオブジェクトを生成する  2.セッションオブジェクトの中に、値を格納する  3.rd.foward(request, response); で次の画面にリクエストを投げる  4.次の画面で「セッションオブジェクトは飛ばしていない筈なのに、セッションオブジェクトの中には値が格納されている」  うーん・・・  一体どこで、次の画面にセッションオブジェクトを渡しているのでしょうか?

    • ベストアンサー
    • Java
  • セッション管理

    度々の質問で申し訳ないです…。 「セッション管理」がどうしてもよく分かりません。 書籍やWeb上でいろんな説明を読んで頭では理解したつもりなんですが 実際使う段になるとつまづいてしまいます。 そこで質問です。 html → Servlret1 → JSP1 → Servlet1 → JSP2 → JSP3 このような遷移の中でセッション管理を行いたいと思っています。 今、JSP2までは無事にセッションオブジェクトに保存されたデータを 参照することができていますが、JSP2からJSP3に移るときに nullが渡されてしまうのです。 一度、Servlet1 へ制御を戻さなければだめなのでしょうか? 具体的なコードを以下に掲載します。 よろしくお願いします。 ========= Servlet1 でセッション開始 //セッションを得る HttpSession thisSession = req.getSession(true); //セッションに保存 req.getSession(false).setAttribute("Login","true"); ========= JSP2 で受け取る /* ここではちゃんと"true"が返ってきます。 */ //セッションオブジェクトから取り出す String login = (String)request.getSession(false).getAttribute("Login"); ========= JSP3 で受け取る /* ここで null が帰ってきてしまいます。 String login = (String)request.getSession(false).getAttribute("Login");

  • セッションに格納する方法

    あるプロジェクトのWebアプリを引き継ぐことになりそのソースを見ていたところ あるメソッドで次のようにしてセッションに格納した値をやりくりしている部分があり???? と思ったので質問させてください。 //ログイン情報を取得 A aObj = (A)session.getAttribute("LOGIN_INFO"); //セッションンにフラグを格納 aObj.setFlag = true; そして別のメソッドで下記のように再度ログイン情報を取得し上記メソッドでセットしたフラグを取得 //ログイン情報を取得 A aObj = (A)session.getAttribute("LOGIN_INFO"); if(aObj.getFlag) { System.out.println("hello"); } ここで疑問なのですが最初に aObj.setFlag = true; とやった後に session.setAttribute("LOGIN_INFO", aObj); と明示的に記述してあげなくてもセッションの中のaObjの flagプロパティにはtrueに書き換えられるのでしょうか。 というかデバッグしてみたらtrueに書き換えがされていました。 (恐らく、オブジェクトの参照渡しのため) こういう書き方でセッションの中のオブジェクトが持つプロパティを書き換えるのって 一般的な書き方でしょうか。最初、パッと見たとき、セッションから取得したaObjにsetterで プロパティを書き換えているだけでセッションが保持するオブジェクトのプロパティを 書き換えているようには見えませんでした。 setterを実行することでセッションの保持するオブジェクトのプロパティを書き換えるという コードに違和感を感じたものでして・・・

    • ベストアンサー
    • Java
  • Sessionについて

    Session管理について以下のページを参考にしました。 http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html あるServletにおいて、(1)セッション開始後、 ( HttpSession session = request.getSession(true);) (2)セッションに値を格納・・・また、違うServletで (3)そのセッションに格納された値を取得・・・ といったやり方が載っていました。 よく、セッション管理についてまだ分かってないところが あるのですが、・・・ たとえば、Aサーブレットでセッションを開始し、 セッションに値を格納・・・・とします。 そのセッションに入れる値。。。というのを 「顧客ID」と「処理CD」の2つにしたい場合はどのような 記述になるのでしょうか?? 参考にしたページには //セッションに値を格納 UserInfo userInfo = new UserInfo(...); session.setAttribute("USER_INFO", userInfo); こんな感じで書いてるんですが、 これは、USER_INFOというキーワードでuserInfoを 値としてセットするということですよね? 顧客IDと処理CDを記述するときは、なにか それぞれオブジェクトが必要なんでしょうか?? よくわかってないです。 ・・・・すみません。よく意味がわかってないので 質問内容も中途半端だと思うのですが、 セッション管理について教えてください。

  • JSP→Servlet間の連携 applicationオブジェクトの渡し方

    どうぞご教授ください。 ---JSP間で値を取得・セットするJSP---、 LocalCfBean cfbean = (LocalCfBean)application.getAttribute("myattr"); ・・・ application.setAttribute("myattr",cfbean); とセットしたcfbeanオブジェクトを別のServletで取り出したいのですが、 ---値を取得するServlet--- HttpSession session = req.getSession(); のような記述はどのようになりますでしょうか。オブジェクト取り出し部分を 具体的に教えていただけますでしょうか

    • ベストアンサー
    • Java
  • セッション管理

    失礼いたします。 セッション情報の受け渡しを勉強しています。 送り手側で HttpSession ses = request.getSession(); String login = (String)ses.getAttribute("login"); String name = (String)ses.getAttribute("name"); if( !("ttttt".equals( login )) ) {  //(以下処理) 受けて側で String name = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession ses = request.getSession(); if ( name.equals("admin") && pass.equals("hoge")) { ses.setAttribute("login","ttttt"); ses.setAttribute("name",name); out.println("<h3>ログインしました。</h3>"); } とし、セッション管理を行っています。 しかし、今ひとつこの「セッション情報」と普通のパラメーターの受け渡しの違いが分かりません。どちらも文字として次ページへ送っていますので。セッションがずっと保持されるとはソースのどういう所から分かるのでしょうか?漠然とした質問ですが、よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう