setAttribute getAttribute 配列内容受け渡しについて

このQ&Aのポイント
  • setAttributeでセットした値をgetAttributeを使用して表示したいのですがうまくいきません。
  • session.setAttributeとrequest.setAttributeの違いがわかりません。
  • どなたか教えていただけないでしょうか?
回答を見る
  • ベストアンサー

setAttribute getAttribute 配列内容受け渡し  について 

こんいちは。 setAttributeでセットした値をgetAttributeを使用して表示したいのですがうまくいきません。 あとsession.setAttributeとrequest.setAttributeの違いがわかりません。 session はなんとなくわかるのですが、requestがいまひとつわかりません。 どなたか教えていただけないでしょうか? よろしくお願いいたします。 下記がコーディングの内容です。 test.jsp <%@ page contentType="text/html;charset=Shift_JIS" import="java.sql.*, java.util.*" %> <% String[] desc={"aaa","bbb","ccc","ddd","eee"}; session.setAttribute("desc",desc); Vector vect = (Vector)session.getAttribute("dpt"); Iterator itr = vect.iterator(); while(itr.hasNext()) { String[] temp = (String[])itr.next(); out.println(temp[0]); out.println(temp[1]); } %> <html> <body> t_3 test </body> </html>

  • Java
  • 回答数1
  • ありがとう数4

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

  • ベストアンサー
  • lawson
  • ベストアンサー率44% (29/65)
回答No.1

String[] desc={"aaa","bbb","ccc","ddd","eee"}; session.setAttribute("desc",desc); Vector vect = (Vector)session.getAttribute("dpt"); Iterator itr = vect.iterator(); ↑ うまくいくわけがないですね。 String[] 型で格納したんだから。 受け取る時も、 String[] 型でキャストしないと無理です。 なぜ Vectorでキャストするのでしょうか? それに格納するときの キー値が "desc" になっていて どうして、 取得する時キー値が "dpt" にしているのでしょうか? requestは Httpプロトコルでいうところの1つセッション をあらわすオブジェクトをサーブレットコンテナ が実装したものです。 session はブラウザのプロセスに対応する セッションIDと該当するHttpSession オブジェクトをサーブレットコンテナ側で 生成して、 一定期間存続させることで、 あたかも、セッションが確立させしているように Http上でみせかけるための しくみを提供するものです。 詳細は調べてください。 以上

sys_com
質問者

お礼

ご連絡ありがとうございました。dptの箇所は記述ミスでした。Vectorでキャストするところを変更してやってみたいともいます。

sys_com
質問者

補足

Vectorにキャストするのはdescが配列なのでvectorに格納しました。

関連するQ&A

  • コンパイルエラー

    JBuiderでコンパイルしようとするとエラーがでてしまいます。ソースは以下の通りです。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Integer count=(Integer)session.getAttribute("count"); if(count == null){  count = new Integer(0); }else{  count = new Integer(count.intValue()+1); } session.setAttribute("count",count); response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out= response.getWriter(); out.println("<html>"); out.println("<head><title>TestServlet</title></head>"); out.println("<body>"); out.println(session.getId()); out.println("<p>\"count\"という名前のattribute = " + count +"</p>"); out.println("</body></html>"); out.close(); } } これをコンパイルすると、 "TestServlet.java": エラー #: 300 : メソッド getAttribute(java.lang.String) が見つかりません: インターフェース javax.servlet.http.HttpSession 行 9, 列 36 "TestServlet.java": エラー #: 300 : メソッド setAttribute(java.lang.String, java.lang.Integer) が見つかりません: インターフェース javax.servlet.http.HttpSession 行 15, 列 13 というメッセージがでます。何が原因なのか教えてください。

  • 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
  • java 全角判定ができなくて困っています。

    今年javaを習いだした初心者です。 現在java servletでユーザの登録画面の作成をしており、 ユーザ名を入力した際に、半角英数字での入力ならばtrue、全角文字での入力であればfalseでエラーを表示したいのですがうまくいきません。 どなたかご教授いただけませんでしょうか? ソースは下記のとおりとなります。 よろしくお願いいたします。 import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletUsersRegistrationScreen extends HttpServlet{ String url = "xxxx” String user = "xx"; String password = "xx"; PrintWriter out; Statement statement; HttpSession session; public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { Connection conn = null; try{ // DBに接続 Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url,user,password); }catch( Exception e ) { // エラー画面 response.sendRedirect("error.html"); return; } request.setCharacterEncoding("Windows-31J"); response.setContentType("text/html; charset=Windows-31J"); try{ // インスタンス変数の設定 statement = conn.createStatement(); out = response.getWriter(); session = request.getSession(); //HTMLの出力 out.println("<html>"); out.println("<head>"); out.println("<title>書籍検索システム</title>"); out.println("</head>"); out.println("<body>"); out.println("<left>"); out.println("<p><h1>書籍検索システムの新規登録</h1></p>"); out.println("<p>書籍検索システムのサービス(書籍検索・書籍登録)をご利用いただけます。</p>"); out.println("<p>入力項目はすべて必須です。</p>"); out.println("<fieldset style=\"width:400;height:270;\">"); out.println("<legend>入力する項目</legend>"); //既にユーザー名が登録されている String message = (String)session.getAttribute("ERR_FAILURE"); if(message != null) { out.println("<p><Font Color=\"#ff0000\">"+message+"</Font></p>"); session.setAttribute("ERR_FAILURE", null); } //ユーザー名が入力されていない String message1 = (String)session.getAttribute("ERR_USERNAME"); if(message1 != null){ out.println("<p><Font Color=\"#ff0000\">"+message1+"</Font></p>"); session.setAttribute("ERR_USERNAME", null); } //パスワードが入力されていない String message2 = (String)session.getAttribute("ERR_PASSWORD"); if(message2 != null){ out.println("<p><Font Color=\"#ff0000\">"+message2+"</Font></p>"); session.setAttribute("ERR_PASSWORD", null); } //(再入力)パスワードが入力されていない String message3 = (String)session.getAttribute("ERR_CONFPASSWORD"); if(message3 != null){ out.println("<p><Font Color=\"#ff0000\">"+message3+"</Font></p>"); }} //パスワードと(再入力)パスワードが一致しない String message4 = (String)session.getAttribute("ERR_MISSMACH"); if(message4 != null){ out.println("<p><Font Color=\"#ff0000\">"+message4+"</font></p>"); session.setAttribute("ERR_MISSMACH",null); } //ユーザー名入力数制限の20文字をオーバー String message5 = (String)session.getAttribute("ERR_20OVER"); if(message5 != null){ out.println("<p><Font Color=\"#ff0000\">"+message5+"</font></p>"); session.setAttribute("ERR_20OVER",null); } //パスワードが6文字未満8文字以上 String message6 = (String)session.getAttribute("ERR_6UNDER8OVER"); if(message6 != null){ out.println("<p><Font Color=\"#ff0000\">"+message6+"</font></p>"); session.setAttribute("ERR_6UNDER8OVER",null); } //半角英数判定 String message7 = (String)session.getAttribute("ERR_MISSSPELL"); if(message != null){ out.println("<p><Font Color=\"#ff0000\">"+message7+"</font></p>"); session.setAttribute("ERR_MISSSPELL",null); } out.println("<form method=\"POST\" action=\"Servl

  • セッション管理

    失礼いたします。 セッション情報の受け渡しを勉強しています。 送り手側で 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
  • セッションタイムアウトになった時

    やりたいことは 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(); } } }

  • データベースに接続できません。

    javaからDB2にアクセスしようとして下記のコードを書きましたが、全く動きません。 C言語ではSQL文でコネクトできるのですが、javadでは違うようです。 得られた画面表示は try error code 0 です。 DB2 Epress-C 10.5.0.420 Java SE Development Kit Update 40 (64-bit) import java.sql.*; import sqlj.runtime.*; import sqlj.runtime.ref.*; #sql iterator ItrPos (String, String); #sql context Myctx; class Test14{ public static void main(String[] args) { String col1 = ""; String col2 = ""; System.out.println("try"); try { Myctx myctx = new Myctx("jdbc:db2:sample","user1","",false); System.out.println("try2"); ItrPos itr; System.out.println("try3"); #sql [myctx] itr = { select col1, col2 from Test1 }; System.out.println("select"); while (itr.endFetch() == false){ #sql { fetch :itr into :col1, :col2 }; System.out.println("fetch"); if(itr.endFetch()){ System.out.println(col1 + col2); } } } catch(Exception e) { if (e instanceof java.sql.SQLException) { System.out.println("error code: " + ((java.sql.SQLException)(e)).getErrorCode()); } } } }

    • ベストアンサー
    • Java
  • javaサーブレット sessionの使い方

    sessionを使ってデータの受け渡しをしたいのですが、ページ移動が増えると上手く受け渡せ無くて困っています。 jsp→Servlet のみでテストした時は正常に動いたのですが、ページを増やすと値が上手く更新されないのです。 下のプログラムではjspでセッションを開始して、ボタンを押すことでNS1.javaに移動し値を1増やしてNS2.javaに移動します。NS2.javaでも値を1増やしているので結果的に2つ値が増えるはずなのに1つも増えません。 何が悪いのでしょうか。解決策を教えて下さい。 // NStest.jsp <%@ page contentType="text/html;charset=Windows-31J" %> <html> <head> <title>移動</title> </head> <body> <% // isNewメソッドでセッション管理されているか確認します。 if (session.isNew()) { // セッション管理されていない場合、データを登録します。 session.setAttribute("count", 0); // 初回用メッセージ out.println(" Nice to meet you."); } else { // セッション管理されている場合、データを表示します。 out.println("count: " + session.getAttribute("count")); } %> <form method="POST" enctype="multipart/form-data" action="NS1"> <INPUT type="SUBMIT" name="button1" value="移動"> </form> </body> </html> // NS1.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS1 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } // 処理後はNS2.javaにリダイレクト response.sendRedirect("NS2.java"); } } // NS2.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS2 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } } }

    • ベストアンサー
    • Java
  • Java8u5を入れたらDB2が繋がらない

    お世話になります。 Java7u51でDB2を使っていましたがJava8u5をインストールしたら DB2が使えなくなりました。 DB2のコンパイルでクラスがないとのエラーが出ます。 import java.sql.*; import sqlj.runtime.*; import sqlj.runtime.ref.*; #sql iterator ItrPos (String, String); #sql context Myctx; class Test14{ public static void main(String[] args) { String col1 = ""; String col2 = ""; System.out.println("try"); try { Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); System.out.println("try1"); Myctx myctx = new Myctx("jdbc:db2:sample","user1","user1",false); System.out.println("try2"); ItrPos itr; System.out.println("try3"); #sql [myctx] itr = { select col1, col2 from Test1 }; System.out.println("select"); while (itr.endFetch() == false){ #sql { fetch :itr into :col1, :col2 }; System.out.println("fetch"); if(itr.endFetch() == false){ System.out.println(col1 + col2); } } } catch(Exception e) { System.out.println(e); if (e instanceof java.sql.SQLException) { System.out.println("error code: " + ((java.sql.SQLException)(e)).getErrorCode()); } } } }

    • ベストアンサー
    • Java
  • ServletからJSPへのデータの受け渡し

    サーブレットにてDBから取得したデータをJSP側に受け渡しをしたいのですが、いろいろと本を読んだり、ネットで情報を調べたりしているのですが、配列データを受け渡す方法が良くわかりません。 どなたか、ココに説明されているHPがある!や、こうすればよいなどのアドバイスをいただければ幸いです。 自分で調べてみたところ以下のところまでは作ったのですが、この後がわからなくなってしまいました。 Servlet側 Enumeration enu_dat = vector.elements(); request.setAttribute("enu_dat", enu_dat); JSP側 session = request.getSession(true); Enumeration data_dat = (Enumeration request.getAttribute("enu_dat"); JSP側で受け取ったとき data_datは「null」 enu_datは「java.util.Vector$1@a2bd15」 のようになっています。

    • ベストアンサー
    • Java
  • セッションオブジェクトにリンクするプログラムです。

    どこが間違ってますか? コンパイルできないんです。。。 セッションオブジェクトを使って カウンタを作り、リンクからカウンタの値を 変更できるようにしているつもりです。 SessionCount.java <前略> HttpSession session = req.getSession(); Integer count; count = (Integer)session.getAttribute("count"); if (count == null){ count = new Integer(1); }else{ count = new Integer(count.intValue() + 1); } session.setAttribute("count", count); out.println("<html>"); out.println("<head><title>Session Test</title></head>"); out.println("<body>"); out.println("Count = " + count.intValue());//確認用 out.println("<A HREF = "URL/SessionCount" onClick = "count=count+1">続行</A>"); out.println("<A HREF = "URL/SessionCount" onClick ="count=0">リセット</A>"); <後略>

    • ベストアンサー
    • Java

専門家に質問してみよう