JSPからのパラメータチェックで問題が発生しています

このQ&Aのポイント
  • JSPから送られてきた値のチェックを行うプログラムを開発していますが、うまく動作しません。
  • サーブレットで受け取った文字列と条件の比較で問題が発生しています。
  • デバッグモードで確認した結果、文字列のハッシュ値が異なっている可能性があります。
回答を見る
  • ベストアンサー

JSPからのパラメータチェック

いつもお世話になっております。 開発環境はeclipse SDK。OSはWInXP。 現在JSPより送られてきた値のチェックを行うプログラミングをしているのですがうまくいきません。 JSP側で"すべて"という文字列を送信してサーブレットでその文字列を受け取り、if文で判定を行おうとしています。 デバッグでみるとサーブレットにきちんと"すべて”の文字が送られてきています。 サーブレット内のif文をどうしてもとおりません。 問題のif文は以下のような感じです。 String msg = request.getParameter("msg"); if(msg == "すべて") msg = "すべてが入力されました"; request.setAttribute("msg",msg); JSPから送られている"すべて"とデバッグで調べても同じに見えます。 型がおかしいのかと思い、ためしに以下のようなことをしてみました。 String msg = request.getParameter("msg"); String chekmsg = "すべて"; if(msg == chekmsg) msg ="すべてが入力されました"; request.setAttribute("msg",msg); としても結果が同じです。 残る可能性は、デバッグモードで見ると、msgとchekmsgのhashの数字が違うところぐらいです。 お分かりなる方がいましたらよろしくお願いいたします。

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

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

  • ベストアンサー
noname#49428
noname#49428
回答No.1

文字列の比較はequalsメソッドを使うのですが、ご存知でしたか? 初歩の初歩なので、覚えておくと便利です。

sabius
質問者

お礼

まことにありがとうございます^^; 初心者一同で大声を出してしまいましたw 本当に初歩的が皆顔を赤らめてしまいました。 ありがとうございます。

関連するQ&A

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

    今、サーブレットとJSPについて勉強しまいます。 HTMLからサーブレットでリクエストを受け付け、 JSPに転送し表示させたいのですが、フォームからの入力の場合は String carname = request.getParameter("cars"); で入力データを取得するコードを書きますよね? (本ではこう書いてました・・・。) では、HTMLの入力フォームからではなくリンクからの 受付けの場合はどう書けばいいのですか? 勉強を始めたばかりで初心者なので、説明不足の点もあるかも 知れませんが分かりやすくご指導宜しくお願いします…。

  • JSP・サーブレット・HTMLについて・・・

    今、サーブレットとJSPについて勉強しています。 HTMLからサーブレットでリクエストを受け付け、 JSPに転送し表示させたいのですが、フォームからの入力の場合は String carname = request.getParameter("cars"); で入力データを取得するコードを書きますよね? (本ではこう書いてました・・・。) では、HTMLの入力フォームからではなくHTMLのリンク部分を クリックされた時の受付けの場合はどう書けばいいのですか? 勉強を始めたばかりで初心者なので、説明不足の点もあるかも 知れませんが分かりやすくご指導宜しくお願いします…。

    • ベストアンサー
    • Java
  • テキストフィールドに何も入れない場合の動作について

    現在サーブレットについて勉強しているものです。 身近に聞ける人がおらず、お手数ですがご教授願います。 分からないところは、JSPでテキストフィールドがあるページを作成し、そこに何も入れないまま送信した場合の動作についてです。 以下に載せているサンプルAの通りに作成し、何も入れないで送信したところ、if( (numberStr == null) || (numberStr.length() == 0) )の条件文の中の処理が走るようで、”何かいれて”というメッセージが表示されるのを確認しております。 しかし、私が作成したファイルを使い、テキストフィールドに何も入れないまま送信した場合はエクセプション画面(例外レポート)に飛んでしまいます。 同じ条件を使い、同じように表示させているつもりなのですが、私が作成したソースが上手くいかず、参考書のソースが上手く動作している理由がどうしてもわかりません。 恐らくソースを見た方が早い、という方が多いと思いますので、見栄えは悪いのですが、ソースを張らせていただきます。 また、入力文字数の制限より、import等は全て削除しました。 また、何も入力しない場合に用いられている、try、catchの必要性についても、いまいち分かりません。 ifとelseで全て網羅するようにせず、なぜtry,catchを使うのでしょうか? ご存じの方、いらっしゃいましたら、是非教えて下さい。 サンプルA-start--------------------------------------------------------------------- public class GuessServlet extends HttpServlet { /* 当たりの数字をランダムに決定 */ private int hit = new Random().nextInt(10); public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* jspファイルで入力した数字をひっぱってくる */ String numberStr = request.getParameter("number"); int input = Integer.parseInt(numberStr); response.setContentType("text/plain; charset=Windows-31J"); PrintWriter out = response.getWriter(); if( (numberStr == null) || (numberStr.length() == 0) ) { request.setAttribute("msg","何か入れて"); RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess.jsp"); dispatcher.forward( request, response); } else if(hit == input) { request.setAttribute("msg","当たり。数字=" + input); RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess_hit.jsp"); dispatcher.forward( request, response); } else{ request.setAttribute("msg","はずれ。数字=" + input); RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess.jsp"); dispatcher.forward( request, response); } } } サンプルA-end--------------------------------------------------------------------- 私のソース-start--------------------------------------------------------------------- public class GuessServlet extends HttpServlet { /* 当たりの数字をランダムに決定 */ private int hit = new Random().nextInt(10); public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* jspファイルで入力した数字をひっぱってくる */ String numberStr = request.getParameter("number"); String error = null; int number = -1; if( (numberStr == null) || (numberStr.length() == 0) ) { error = "何か入れて"; } if(error == null) { try{ number = Integer.parseInt(numberStr); if(number < 0 || 9 < number) { error = "0~9を入れて"; } } catch(NumberFormatException e) { error ="数字を入れてください"; } } String path; if(error != null) { request.setAttribute("msg", error); path = "/reqattr/guess.jsp"; } else { if(hit == number) { request.setAttribute("msg","当たり。数字=" + number); path = "/reqattr/guess_hit.jsp"; } else { request.setAttribute("msg","はずれ。数字=" + number); path = "/reqattr/guess.jsp"; } } RequestDispatcher dispatcher = request.getRequestDispatcher(path); dispatcher.forward( request, response); } } 私のソース-end---------------------------------------------------------------------

    • ベストアンサー
    • Java
  • requestパラメータの内容変更

    はじめまして。 request.getParameter()とrequest.setAttribute()について教えてください。 サーブレット側で画面制御をするために、アクションクラスの中での処理内容によってrequestパラメータを変更しようとしています。 具体的には、submit時に ...?id=aaa とした値をサーブレット側の処理内容によって request.setAttribute("id",'bbb')などと変更したいのです。 上記の構文であっているとは思うのですが、値が変わってくれません。 request.setAttribute("id","bbb")のあと、すぐにrequest.getParameter("id")とすると"aaa"が取れるのです。 これは何か使い方が間違っているのでしょうか? ご教授よろしくお願いします。

  • javaの掲示板について

    サーブレットにおいて未入力のチェックを行っているのですがこのままだと、未入力の表示と一緒に空欄の投稿ができてしまいます。 String sendMessage = request.getParameter("sendMessage");               String name = request.getParameter("name"); if(name.equals("")){ errorname = "名前を入力してください"; request.setAttribute("errorname",errorname); } Message message = new Message(); message.setName(name); Vector messageList = dao.getMessageList(); request.setAttribute("MESSAGE_LIST", messageList); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/bbs.jsp"); rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } 空欄の投稿がされないようにするにはどうすればいいのでしょうか? 全く思いつかないので詳しく説明をお願いします。

    • ベストアンサー
    • Java
  • 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とサーブレット間での画面遷移でうまく表示できません。

    いつもお世話になっております。。。 eclipse3.4 tomcat6.0 の環境で作業しています。 JSPから受け取ったパラメータをサーブレットで条件分岐して、 条件ごとにdispatch fowardで異なったページに遷移させるページを作りたいのですが、うまくいきません。 送信JSPで、 <form action="受け取りサーブレット名" method="post"> <input type="radio" name="url" value="value1"checked> <input type="radio" name="url" value="value2"> <input type="radio" name="url" value="value3"> <input type="submit" value="jump!"> </form> と書き、受け取りでサーブレットで public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { perform(request, response); }      private void perform(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException { response.setContentType("text/plain; charset=Windows-31J"); request.setCharacterEncoding("Windows-31J"); request.getParameter("url"); String i = request.getParameter("url"); if( i.equals("value1")) {           request.getRequestDispatcher("/遷移先1").forward(request,response); }else if(i.equals("value2")) {           request.getRequestDispatcher("/遷移先2").forward(request,response); }else if(i.equals("value3")) {           request.getRequestDispatcher("/遷移先3").forward(request,response); としています。 これでJSPからデバッグを実行すると、変数iにparam"url"でとってきた"value1"が入っているので、getParameterが成功しているのが分かりますが、その後なぜか遷移先に移りません。 おそらくdispaccher fowardがうまくいっていないか、 if文が間違ってるかだと思うのですが、 どなたかご教授くださいm(_ _)m

  • サーブレットから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
  • jspのプログラムについて

    jspについて質問です。 現在入力されたパスワードとデータベースに保存してあるパスワードを比較して一緒であれば idを削除するというプログラムを組んでいます。 削除することはできないのですが、 比較がうまくいきません。 <% //postされたもの String id = request.getParameter("id"); String password =request.getParameter("password") Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(urlやpassword、userが書いてある); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); Statement stmt=conn.createStatement(); ResultSet res = st.executeQuery("select * from data where id ="+id); while(res.next()){ String pass =res.getString("pass"); //データベースからパスワードを取得 out.println("<td>" + password + "</td>"); out.println("<td>" + pass + "</td>"); if(password==pass){ //入力されたパスワードと比較 //ここにはidを削除する文が書かれている } } st.close(); conn.close(); やっているのですが、if文に入って削除してくれません。 out.printlnはいりませんがちゃんと値があっているか確かめたところ 入力された文字とデータベースに入っている文字がちゃんと表示されました。 教えてください。よろしくお願いします。

  • 入力フォーム(JSP)にDB検索条件を入力し、データがなかった場合入力した値を残したままJSPに戻る方法を教えてください。

    基本的にはタイトルの質問なんですが、具体的な書き方がわかりません。 今作成しているのが TOP画面(JSP) ・入力フォームに検索条件 ↓ Servlet ・入力された条件でDB検索  何か検索されれば次画面へ遷移  何も検索されなければTOP画面へ戻る というものですが、 public class LoginCheck1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); String user = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession session = request.getSession(true); boolean check = authUser(user, pass); if (check){ /* 認証済みにセット */ session.setAttribute("login", "OK"); /* 本来のアクセス先へ飛ばす */ String target = (String)session.getAttribute("target"); response.sendRedirect(target); }else{ /* 認証に失敗したら、ログイン画面に戻す */ session.setAttribute("status", "Not Auth"); response.sendRedirect("/auth/Login"); } } protected boolean authUser(String user, String pass){ /* 取りあえずユーザー名とパスワードが入力されていれば認証する */ if (user == null || user.length() == 0 || pass == null || pass.length() == 0){ return false; } return true; } } サーブレットはこんな感じで書いてるんですが、 response.sendRedirect("/auth/Login"); の部分が悪いんでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう