• ベストアンサー

セッションを使った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
  • 回答数6
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.6

>java.lang.NullPointerException と言っていると言う事は、この場合、session.getAttribute("Value") で正しい 値が取得出来ていないと言う可能性があります。nullが返って来ているとか。。。 と、言う事は、setAttribute でちゃんと値をセット出来ていないか、セッションが切れちゃってるとか。。。 あ、それより、代入先の配列の宣言に問題があるとかは無いでしょうか? 配列は、ちゃんと、確保されていますか? 最初の補足欄では、配列の要素数を指定していませんでしたが。。。 可能性は、いろいろと考えられるので、ここでは、「これ!」と言う事は出来ません。 いろいろと調べてみて下さい。 原始的ですが、一行ごとに変数の値を表示する等してみれば、案外すぐにどれが問題なのかが 分かる場合が多いです。 >getValue()/putValue()は非推奨メソッドになりました。今のJ2EEでは通りません。 そうなんですか。。。 非推奨になっているんですか。。でも、非推奨だったら、通らないことは無いんじゃないですか? 推奨しないだけでは。。。? でも、使わないに越したことは無いって言うことですね。 訂正ありがとうございました。

amuro1980
質問者

お礼

ご指摘どおり配列の宣言に問題がありました。 配列の初期化をやっていなかったためうまくいかなかったみたいですね。 度重なる質問に回答をくださってありがとうございました。

その他の回答 (5)

noname#30871
noname#30871
回答No.5

 getValue()/putValue()は非推奨メソッドになりました。今のJ2EEでは通りません。

参考URL:
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSession.html
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.4

すみません。。。適当なもので。。。 <% pa[count] = ((java.lang.Integer)(session.getAttribute("Value"))).intValue(); %> これでどうでしょう? 括弧が少なすぎました。。。 試してみて頂けますか?

amuro1980
質問者

補足

試してみたところ Apache Tomcat/4.0.3 - HTTP Status 500 - Internal Server Error type Exception report message Internal Server Error description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request. exception java.lang.NullPointerException 内部サーバーエラーなるものがでてきました。 これはどういったエラーなのでしょうか。 プログラムの組み方によってよくでてくるのですが。

  • mrt136
  • ベストアンサー率35% (33/92)
回答No.3

1行でするなら、 <% pa[count] = (java.lang.Integer)(session.getAttribute("Value")).intValue(); %> かな。 putValue() じゃ駄目ですか。。。 以前、私も同じ事をした様な気がするんですけど。。。

amuro1980
質問者

補足

修正したら この型は = には不適合です。 java.lang.Integer から int には変換できません。 pa[count] = (java.lang.Integer)(session.getAttribute("Value")).intValue(); メソッド intValue() は class java.lang.Object で見つかりません。 pa[count] = (java.lang.Integer)(session.getAttribute("Value")).intValue(); のサーバーエラーがでてきました。 なかなか難しいです。

  • mrt136
  • ベストアンサー率35% (33/92)
回答No.2

setAttribute() じゃなくて、 session2.putValue("Value", value); とすれば出来るかも。。。 適当に回答しているので、間違っていたらすみません。

amuro1980
質問者

お礼

回答ありがとうございます。 試してみましたが残念ながら同じエラーがでてました。 やはりInteger型を引数としなければいけないみたいですね。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

第2引数がObjectということは、参照型の引数を取るということなので、 intをInteger型に変換したら良いと思うのですが、不都合ですか?

amuro1980
質問者

補足

session.setAttribute("Value", new Integer(value)); に変更したらコンパイルは通りました。 その後JSPでその値をint型の配列に格納していきたいのですが <%! int pa[]; %> <%! int count = 0; %> <%= session.getAttribute("Name") %> <% pa[count] = session.getAttribute("Value"); %> <%= pa[count] %> <% ++count; %> のgetAttributeのところでサーバーエラー この型は = には不適合です。java.lang.Object から int には変換できません。 がでます。 Objectからintに変換する方法があったら教えてください。 お願いします。

関連するQ&A

  • セッション管理

    度々の質問で申し訳ないです…。 「セッション管理」がどうしてもよく分かりません。 書籍や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");

  • 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
  • セッション管理

    失礼いたします。 セッション情報の受け渡しを勉強しています。 送り手側で 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
  • セッションについて(サーバーサイド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
  • Sessionについて

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

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

    失礼致します。 セッションについてお聞きします。 httpsessionの受け渡しについてなのですが、画面jspページから ログイン名とパスワードを取得し、サーブレットに渡しています。 サーブレットの書き出しは次のようになっています。 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession session3 = req.getSession(true); ・・・ このあとsession3セッションにパスワードをセットし、 jspページでセッションチェックした後falseならログイン画面に リダイレクトします。ここまでは出来ました。 ところが、このログイン名を文字列操作したいと思い、 サーブレットからjspページにディスパッチする前に一旦 文字列操作用javaページで文字列操作をしようと思いました。 ところが、サーブレットでない純粋なjavaページではhttpsessionが使えないことが分かりました。 HttpSessionを型に解決できませんと言われます。 この問題は一度は直面したことのある方も多いのではないかと思い、質問させて頂きました。 このような場合、どのように対処されていますでしょうか?

  • インタフェースのメソッド

    最近仕事でJAVAを使うことになり勉強し始めたのですが、分からないことがあります。 たとえばHTMLからPOST要求を受けるサーブレットでセッションを取得する際、 doPost(HttpServletRequest req , HttpServretResponse res){ HttpSession session = req.getSession(true) … } としますが、このgetSessionメソッドの中身はどこで実装されているのですか?reqインスタンスはHttpServletRequest型としか指定していませんが、HttpServletRequestはインタフェースなのでメソッドの実装をしていないと思うのですが・・・。 知らなくても「こうするものだ」と思っておけば問題はないのでしょうが、しっかり理解しておきたいのでよろしくお願いします。

  • セッションIDの付け替えについて

    はじめまして。 Servlet でセッションIDの付け替えをしたいのですが、 HttpSession session = request.getSession(); out.println(session.getId()); session.invalidate(); HttpSession newSession = request.getSession(true); out.println(newSession.getId()); のように、 一度invalidate()してから、 新しいセッションを取得しても 同じセッションIDとなってしまいます。 違うセッションIDを振るにはどうしたらよいでしょうか。

  • セッションタイムアウトになった時

    やりたいことは 1)セッション情報を取り出す 2)取り出した値を使ってDBに書き込みする 3)セッション情報を破棄する です。 http://oshiete1.watch.impress.co.jp/qa455453.html ほぼここの方と同じです。 ここの方はうまくいったようなのですが・・・ 初心者で悩んでいます。よろしくお願いいたします。 HttpSessionBindingListener セッションが切れた(valueUnbound)時 getAttribute("aaa")で "1111111"←ユーザーIDを取得したい。 req_.getSession().getAttribute("aaa");で取得できません。 よろしくお願いします。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /** セッション開始終了処理のテストサーブレット **/ public class SessionServlet extends HttpServlet implements HttpSessionBindingListener { HttpServletRequest req_; HttpServletResponse res_; public void valueBound(HttpSessionBindingEvent arg0) { System.out.println("valueBound"); } public void valueUnbound(HttpSessionBindingEvent arg0) { System.out.println(req_.getSession().getAttribute("aaa")); System.out.println("valueUnBound"); } public void service (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req_=req; res_=res; HttpSession session1 = req.getSession(); res.setContentType("text/html; charset=Shift_JIS"); req.setCharacterEncoding("Shift_JIS"); PrintWriter out = res.getWriter(); // パラメータの取得 String act = req.getParameter("act"); // ログイン処理 if (act == null) { // セッション変数の作成、設定 SessionServlet data = new SessionServlet(); session1.setAttribute("aaa", "1111111"); session1.setAttribute("data", data); // セッション開始画面の表示 out.println("<html><body>"); out.println("<h1>セッション開始</h1>"); out.println("<form method=\"POST\" action=\"SessionServlet?act=lo\">"); out.println("<input type=\"submit\" value=\"logout\">"); out.println("</form>"); out.println("</body></html>"); out.close(); // ログアウト処理 } else { // セッション終了画面の表示 out.println("<html><body>"); out.println("<h1>セッション終了</h1>"); out.println("</body></html>"); out.close(); // セッションの無効化 session1.invalidate(); } } }

  • setAttribute(String, int)は適用できない

    setAttribute(String, int)は適用できない 今、servletでセッションの勉強をしています。 ある本に載っているソースコードをそのままコピーしたんですが、 「HttpSessionのメソッド setAttribute(String, Object)は(String, int)に適用できません。」 …というエラーが出て動きません。 こういう場合、実行するにはどうしたら良いのでしょうか? アクセスした回数をカウントすることなんてよくあると思うんです。 intも(Stringなんかも)Objectの下に含まれてるんじゃないんですか? intでも良い気がするんですけど…。 一応、ソースコードを貼っておきます: ### Sample229TestServlet.java ### package com.tips; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class Sample228TestServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private int count = 0; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); session.setAttribute("param",count++); //問題の箇所 out.println("<html><head><title>Sample228</title></head><body>"); out.println("<h2>SessionAttributeListenerの例</h2>"); out.println("sessionの属性countが" + count + "に変化しました。"); out.println("</body></html>"); out.close(); } } ### Sample228.java ### package com.tips; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; public class Sample228 implements HttpSessionAttributeListener { public void attributeAdded(HttpSessionBindingEvent event) { } public void attributeRemoved(HttpSessionBindingEvent event) { } public void attributeReplaced(HttpSessionBindingEvent event) { ServletContext app = (event.getSession()).getServletContext(); app.log(">> Sample228 Listener detects attribute changed."); } } …必要であれば補足します。では、宜しくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう