JSP(HTML)~サーブレット~オラクルDBのデータの受け渡しについて

このQ&Aのポイント
  • JSP(HTML)でコンボボックスから選択した数字をサーブレットで受け取り、その数字に基づいてオラクルDBのデータを登録または取得する方法について質問です。
  • 現在、コンボボックスでNULLを選択した場合にサーブレットがエラーを出してしまう問題があります。NULLをそのままDBに渡す方法についてアドバイスをいただけないでしょうか。
  • NUMBERはNOT NULL制約がないため、型に関係なくNULLをDBに渡したいです。どのように書けばよいでしょうか?
回答を見る
  • ベストアンサー

JSP(HTML)~サーブレット~オラクルDBのデータの受け渡しについて

JSPにてコンボボックスがあるとします。そのコンボボックスで数字(1~10)を選択すると、その選択し送信した数字をサーブレットが受け取り、その数字に対するデータからオラクルDBに登録したり引っ張り出したりするとします。そこで質問なのですが、コンボボックスにてNULLをサーブレットに渡し、そのNULLをDBに入れたい場合、どのように書けば宜しいのでしょうか?私は以下のように現在書いています。 <JSP(HTML)> <option value=null></option> <option value="1">No.1</option> <option value="2">No.2</option> <option value="3">No.3</option> <option value="4">No.4</option> <option value="5">No.5</option> <option value="6">No.6</option> <option value="7">No.7</option> <option value="8">No.8</option> <option value="9">No.9</option> <option value="10">No.10</option> <サーブレットにて番号を受け取る> Integer.parseInt(req.getParameter("NUMBER")), ただ、これですと、NULLを選択してもサーブレットがString型と判断してしまい、型が違うというエラーが出てしまいます。私としては型とかは関係なく、NULL(からっぽ)ということをそのままDBへ渡してほしいだけなのですが・・・。 ちなみに、NUMBERはNOT NULL制約などはついておりません。ご助言を!!

noname#15844
noname#15844
  • Oracle
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

う~ん・・・・。これ、サーブレットに渡るのは"null\0"という10バイトの文字列になるよなぁ? という事は? "null\0"はInterger.parseIntには渡せん。  解決策としては、サーブレット側で、NUMBERパラメータを一旦文字列として取ってきて、「nullであるか調べ、そうならnullを保存する、そうでないならパース後の数字を保存する」という動作にしてやらんといかん。 #ところで、このサーブレット危険じゃないか? パラメータをintと期待した書き方をすると、悪意のあるユーザにNUMBER=999999999999やNUMBER=HOGEという様な不正なPOSTをされたら落ちるぞ。Webアプリケーションはこういう所に気を入れて作ってやらんとセキュリティホールになるので気をつけて。

noname#15844
質問者

お礼

回答有難う御座いました。やはりNULLは一旦文字列で受け取らないといけないんですね~。参考になります。まだまだこの分野には初心者なもので、分からないことだらけなんですよ^^

関連するQ&A

  • サーブレットからJSPの呼び出しについて

    こんにちは。 JSPの呼び出しについて質問です。 サーブレットで RequestDispatcher dispatcher = req.getRequestDispatcher("/jsp/java.jsp"); dispatcher.include(req, res); としてJSPファイルを呼び出そうとしているのですが、うまくいきません。コンパイルは通ります。 dispatcher.include(req, res); の部分で例外処理にいってるのでそこがおかしいようですが。urlの指定もjspファイルの内容も何度も確認したのですがミスはないみたいで原因がわかりません。 またTomcatのログファイルlocalhost_logを見ると 2002-07-11 16:05:35 ApplicationDispatcher[/DB] サーブレット jsp のServlet.service()は例外を投げました という文が出力されています。

    • ベストアンサー
    • Java
  • JSP DB サーブレット 表示

    こにちは。最後のfor分の記述でまよっています。 今回JSPで検索 表示 サーブレットでDB取得(二次元配列で返しています) 昇順、降順、指定行だけ表示、前方一致などの条件をつけて表示しようとしています JSPの最後のFOR文の回数のとこlistサイズなどにしたいのですが リストがないときどうすればいいのかなと・・・ あとは今はとりあえず10と指定しているので前方一致のときに 件数がへるとインデックスが存在しないというエラーがでます どういう風に書けばうまくいくのか少しでいいんでアドバイスください String name=request.getParameter("name"); //NAMEの前方一致条件取得 String narabi=request.getParameter("narabi"); //降順、昇順、の値取得 String menu=request.getParameter("menu"); //昇順、降順するところの列 name取得 db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+1+",'山田', 'ヤマダ')"); db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+2+",'佐藤', 'サトウ')"); ・・・・・・・・・ / /課題のため10行入力 db.commit(); //コミットして 確定 ArrayList list; ArrayList list1; ArrayList list2; //リスト作成 if(narabi!=null){//昇順 降順にチェックがあるか判断 String[][]hai4=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%' order by "+menu+" "+narabi+" ;"); //nameで前方一致 menuで昇順降順場所 narabiで降順昇順 list = new ArrayList(Arrays.asList(hai4[0])); list1 = new ArrayList(Arrays.asList(hai4[1])); list2 = new ArrayList(Arrays.asList(hai4[2])); }else{//昇順降順なければこっち String[][]hai3=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%';"); //nameで前方一致 list = new ArrayList(Arrays.asList(hai3[0])); list1 = new ArrayList(Arrays.asList(hai3[1])); list2 = new ArrayList(Arrays.asList(hai3[2])); } if (request.getParameter("TESTNO") != null){ request.setAttribute("list", list); } if (request.getParameter("NAME") != null){ request.setAttribute("list1", list1); } if (request.getParameter("KANA") != null){ request.setAttribute("list2", list2); } //列指定されたときだけ setAttribute db.disconnect();//クローズする RequestDispatcher dispatcher =request.getRequestDispatcher("/::::.jsp"); //フォワード ページ指定 dispatcher.forward(request, response); JSP(検索、表示) <html> <head> <H1>検索画面</H1> </head> <body> <from> <form method="get" action="../Servlet"> 検索内容 TESTNO <input type="checkbox" name="TESTNO" value="TESTNO" > NAME <input type="checkbox" name="NAME" value="NAME" > KANA <input type="checkbox" name="KANA" value="KANA" > <br> 検索条件 <input type="text" name="name" >(NAME前方一致)<br> ソート   <select name="menu"><br> <option value=TESTNO>TESTNO</option> <option value=NAME>NAME</option> <option value=KANA>KANA</option> </select> <input type="radio" name="narabi" value="ASC" /> 昇順 <input type="radio" name="narabi" value="DESC"/> 降順 <br><input type="submit" value="検索"> </from> </body> </form> <Hr> <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ for(int i=0; i<10; i++){ if(request.getAttribute("list")!=null){ List list=(List)request.getAttribute("list"); out.print(list.get(i)+" "); } if(request.getAttribute("list1")!=null){ List list1=(List)request.getAttribute("list1"); out.print(list1.get(i)+" "); } if(request.getAttribute("list2")!=null){ List list2=(List)request.getAttribute("list2"); out.println(list2.get(i)); } 文字数の関係ですこし削っているところもありますが アドバイスよろしくおねがいします

    • ベストアンサー
    • Java
  • JSのリクエストからサーブレットに渡されるデータについて。

    現在、JSP+サーブレットでアプリを作成しています。 質問ですが、JSPにあるセレクトメニューの中身全てをサーブレットで受け取ることはできるのでしょうか? <select name="Kouba" size="1"> <option value=10>A工場</option> <option value=11>B工場</option> <option value=12>C工場</option> <option value=13>D工場</option> </select> 上のようなセレクトメニューがあった場合、submitした場合に、サーブレット側で、 String 工場 = request.getParameter("Kouba"); とやれば、選択されていたデータは取得できます。 セレクトメニューの中身全部を取得したい場合はどのようにすればよいのでしょうか? よろしくお願いします。

  • JSPとサーブレットの連携

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("windows-31j"); response.setContentType("text/html;charset=windows-31j"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("windows-31j"); String st = request.getParameter("ti"); String s2 = request.getParameter("ho"); String s3 = request.getParameter("ke"); Connection con = null; ResultSet rs = null; Statement stmt = null; try { String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J"; con = (Connection) DriverManager.getConnection(url); stmt = (Statement) con.createStatement(); String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') "; int rss=0; rss = stmt.executeUpdate(sql); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。 ですが当然上記だと真っ白なサーブレットページが表示されるだけです。 JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

    • ベストアンサー
    • Java
  • サーブレットからJSPへの変数受け渡し

    はじめまして 下記の件で大変困っております。どなたか対処方法など知っておりましたらご教授お願いいたします。 現在、サーブレットからJSPへ変数を受け渡す際にJSPのテキストフィールド(value値)に変数を受け渡すことができない状況です。 下記のソースでコーディングしておりますが、「<=request.getAttribute("number")%>がvalue上で変数として認識いないようです。 [現在組んでいるソース」 <td><INPUT type="text" size="6" maxlength ="6" name="number" value ="<%=request.getAttribute("number")%>" ></td> 下記の件を試しましたが、うまくいきませんでした。 1."の前に\を記載→value =\"<%=request.getAttribute("number")%>\" 2.テキストフィールド外で表示した場合、正常に値を表示できる。

  • サーブレットからJSPへ情報を渡す

    サーブレットからJSPへ情報を渡すことについて質問がございます。 ■質問は、ブラウザからサーブレットにリクエストして      モデルからデータを取り出しJSPがモデルを参照して      ブラウザに結果を表示し、ブラウザの画面のボタンを      クリックすると、またサーブレットにリクエストが      いくようにしたいのですが、      そのJSPから二度目のサーブレットへのリクエスト及び      リクエストする際にデータを渡すのですが、      JSPからサーブレットへ飛んでくれず404エラーがでます。      ★どうしたら、JSPからサーブレットへ飛んで       くれるでしょうか? ■簡単な流れでかきますと   リクエスト(hidden value="patu") ブラウザ  →  サーブレット  →  モデル ←→ テキスト           ↓           ↑(参照)   ブラウザ ← ← JSP →→→→→  上記の流れは一回の流れですが、次JSPからまたサーブレットへ  actionし、(hidden value="patu")をして同じ流れを  くりかえしたいのです。 ■JSPではどのようになっているかと申しますと <form action="http:://localhost:8080/sotu/TextServlet"method="POST"> <input type="image" src="NEXTquiz.gif" value="次の問題"     onclick="http://localhost:8080/sotu/TextServlet'"> <iuput type="hidden" name="patu" value="yonyc.getPatu()"> </form> となっております。 ■サーブレットでは protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {  String kye = request.getParameter("patu");//value受け取り MondaiSC mondaisc = new MondaiSC(); //モデルクラス生成  mondaisc . mondaisc.DefaultQuiz(kye, i); //モデルにキーを渡す ArrayList textList = mondaisc.getTextList();  //モデルクラスからテキストの情報が入っているArrayListを受ける り  HttpSession session =request.getSession();//sessionに入れる  session.setAttribute("text",textList);  RequestDispatcher rd =getServletContext().getRequestDispatcher("/yomi.jsp"); } このyomi.jspからまたサーブレットへ同じリクエストをおくりたいの です。  ところが飛んでくれません。  恐らく、JSPでの記述の仕方に問題があるのではないこと思っており ますが、どなたかアドバイスをお願い致します。  宜しくお願い致します。

    • ベストアンサー
    • Java
  • javaでDBから取得したデータのJSP表示

    JAVAでDBから取得し ArrayList shikakuCdList = shikakuCd_Data(); request.setAttribute("shikakuCdList", shikakuCdList); JSPでコンボボックスに表示しようと思います <% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%> <% for ( int i = 0; i < bumonlist.size(); i++ ){%> <option value=" (1)ここの記述方法も  "></option> <% }%> という記述にしていますが、うまく動きません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JSP DB 表示

    こんにちは。DBから取得 JSPに表示を勉強しています。 条件が 列指定 前方指定 昇順降順などあり 列ごとに取得 表示といった形で表示することができました ただこれだと 横に表示されるのですが、どうすれば縦に表示できるように 組みなおせますか?それかこの組み方だとHTMLでがんばったほうが良いのでしょうか?アドバイスお願いします JSP(検索、表示) <table border> <tr> <td> 検索内容 TESTNO <input type="checkbox" name="TESTNO" value="TESTNO" </td> <td> NAME <input type="checkbox" name="NAME" value="NAME" > </td> <td> KANA <input type="checkbox" name="KANA" value="KANA" > </td> </tr> </table border> <table border> <tr> <td> 検索条件 <input type="text" name="name" >(NAME前方一致) </td> </table> <table border> <tr><td> ソート   <select name="menu"> <option value=TESTNO>TESTNO</option> <option value=NAME>NAME</option> <option value=KANA>KANA</option> </select> <input type="radio" name="narabi" value="ASC" /> 昇順 <input type="radio" name="narabi" value="DESC"/> 降順 </td></tr> </table> <br><input type="submit" value="検索"> </from> </body> </form> <Hr> <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ if(request.getAttribute("list")!=null){ List list=(List)request.getAttribute("list"); for(int i=0; i<list.size(); i++){ out.print(list.get(i)+" "); } } %><br> <% if(request.getAttribute("list1")!=null){ List list1=(List)request.getAttribute("list1"); for(int i=0; i<list1.size(); i++){ out.print(list1.get(i)+" "); } } %><br> <% if(request.getAttribute("list2")!=null){ List list2=(List)request.getAttribute("list2"); for(int i=0; i<list2.size(); i++){ out.print(list2.get(i)+" "); } } %><br> サーブレット(取得、フォワードで転送) String name=request.getParameter("name"); //NAMEの前方一致条件取得 String narabi=request.getParameter("narabi"); //降順、昇順、の値取得 String menu=request.getParameter("menu"); //昇順、降順するところの列 name取得 db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+1+",'山田', 'ヤマダ')"); db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+2+",'佐藤', 'サトウ')"); ・・・・・・ //課題のため10行入力 db.commit(); //コミットして 確定 ArrayList list; ArrayList list1; ArrayList list2; //リスト作成 if(narabi!=null){//昇順 降順にチェックがあるか判断 String[][]hai4=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%' order by "+menu+" "+narabi+" ;"); //nameで前方一致 menuで昇順降順場所 narabiで降順昇順 list = new ArrayList(Arrays.asList(hai4[0])); list1 = new ArrayList(Arrays.asList(hai4[1])); list2 = new ArrayList(Arrays.asList(hai4[2])); }else{//昇順降順なければこっち String[][]hai3=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%';"); //nameで前方一致 list = new ArrayList(Arrays.asList(hai3[0])); list1 = new ArrayList(Arrays.asList(hai3[1])); list2 = new ArrayList(Arrays.asList(hai3[2])); } if (request.getParameter("TESTNO") != null){ request.setAttribute("list", list); } if (request.getParameter("NAME") != null){ request.setAttribute("list1", list1); } if (request.getParameter("KANA") != null){ request.setAttribute("list2", list2); } 結果 1 2 3 4 5 6 7 8 9 10 山田 佐藤 山本 伊藤 武田 鈴木 小野 松井 田中 高橋 ヤマダ サトウ ヤマモト イトウ タケダ スズキ オノ マツイ タナカ タカハシ 1 山田 ヤマダ 2 佐藤 サトウ ・・・・・・ といった表示にしたいです 行ごとに取得して繰り返すのがいいのかなと思って最初やていたのですが 列指定したときに エラー(指定listがない)といったようになるので この組み方にしました。 アドバイスお願いします

    • ベストアンサー
    • Java
  • HTMLからデータを受け取るサーブレットについて

    教本の教え通りにコードを記述してるつもりなんですが,うまくいきません。コンパイルもうまくいきtomcatでHTML画面からデータを送信してもサーブレットはうまく応えてくれません。どなたか教えてください。 (fromhtml_365.java) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class fromhtml_365 extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{ res.setContentType("text/html; charset=shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html><head>"); out.println("<title>サーブレットからパラメータを受信</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>受信したパラメータ</h1>"); out.println("<h2>"); out.println(req.getParameter("param")); out.println("</h2>"); out.println("</hody></html>"); } } (html_366.html) <HTML> <HEAD><TITLE>サーブレットにパラメータを送信</TITLE></HEAD> <BODY> <H1>サーブレットにパラメータを送信</H1> <FORM ACTION="/examples/servlet/fromhtml_365"> 送信パラメータ<INPUT TYPE="TEXT" NAME="param"><BR> <INPUT TYPE="SUBMIT" value="送信"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • 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