1

実際、私はこのコードで論理的な問題に直面しています

問題: 正しい emp_id とパスワードを入力している間、if 部分は適切に実行されていますが、このページを実行しようとすると常にこの if 条件内で実行されます (Run as->Server-Tomcat サーバーで実行)...それはelse条件になります。これにより、if句内でjspページを実行できなくなります。

              else {
              resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);

                          }

if句を満たすときにjspページも実行したい。

これが私のコードです:

     try {
          String url="jdbc:mysql://localhost/app";
          Class.forName("com.mysql.jdbc.Driver");
          Connection con=DriverManager.getConnection(url,"****","******");
          stmt = con.prepareStatement("select * from ofc where emp_id=? and password=?");
          stmt.setString(1, employee);
          stmt.setString(2, password);

          ResultSet rs = stmt.executeQuery();

          if(rs.next()) {  //I want to print this jsp page for this If condition
              System.out.println("2> Employee Id : "+employee+" && Password : "+password);
              System.out.println("3> This employee "+employee+" exsists in the database and will be there");      

              resp.setContentType("text/html");
              PrintWriter out = resp.getWriter();
              out.print("<html><body>");       // It's my JSP page,& start from here
              out.print("<head>");
              out.print("<title>Policy Page</title>");
              out.print("</head>");
              List<String> devices = Store.getDevices();
              if (devices.isEmpty())
              {
                out.print("<h2>No  One is there!</h2>");
              } 
              else
              {    
               out.print("<h2>" + devices.size() + " device(s) are there!</h2>");
               out.print("<form name='form' method='POST' action='sendAll'>");
               out.print("<input type='text' name='policy'>");
               resp.setStatus(HttpServletResponse.SC_OK);
               out.print("<input type='submit' value='Apply Policy'>");
               out.print("</form>");
//             getServletContext().getRequestDispatcher("/home").forward(req, resp);

              }
              out.print("</body></html>");       //Completes here
              resp.setStatus(HttpServletResponse.SC_OK);

          }


          else {
              resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);

                          }
      }
      catch(Exception e) {
          e.printStackTrace();
      }

私が間違っているところ....このコーディングコンテキストでは...//

4

3 に答える 3

2

この問題を特定して解決する手順。

  1. ユーザー名、パスワードがテーブルに存在することを確認してください
  2. 余分なスペースがある場合は、employee.trim()とを追加してみてください。またはの値が nullpassword.trim()の場合、NullPointerException が発生します。これが原因です。次にnullをチェックしてから、もう一度試してくださいemployeepasswordtrim()
  3. クエリの前に結果を出力すると、何が間違っているのかがわかります。
  4. リクエスト パラメータを使用している場合は、URL で渡す必要があります。?employeeid=someId&password=somepass
于 2012-10-01T07:18:42.033 に答える
1

コードをデバッグするとき、デバッガーは IF ステートメントに入りますか? 実際には IF ステートメントの内側の括弧内に入りますか、それとも単に IF ステートメントを評価し ("IF(False)" に評価します)、次に移動しますか? elseステートメントに?

おそらく、あなたの mySQL クエリは結果を返さないでしょうか? HasRows プロパティを使用してみてください。

if (rs.HasRows) 
{ 
    while (rs.Read()) 
    { 
        // do stuff
    } 
    } 
    else 
    { 
       // notify user that query returned no results
    }
} 
于 2012-10-01T07:22:58.030 に答える
0

結果セットが空です。それが、else ステートメントに入る理由です。データベースで直接 SQL を実行してみてください。レコードは得られますか?

これで問題が解決するかどうかはわかりませんが(出力のみに基づいてコードをチェックする際のデバッグかどうかによって異なります)、HTML 構造が間違っています。次のようになります。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
   <HEAD>

   </HEAD>
   <BODY>

   </BODY>
</HTML>

HEAD部分をBODYに混ぜます。

于 2012-10-01T07:23:30.307 に答える