1

实际上我在这段代码中遇到了逻辑问题

问题:虽然我输入了正确的 emp_id 和密码,但 if 部分运行正常,但只要我尝试运行此页面(运行方式->在 Server-Tomcat 服务器上运行),就在此 if 条件下......它将进入 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()password.trim()如果有任何额外的空格。employee如果orpassword的值为空,您将获得 NullPointerException 。所以这就是原因。然后检查 null 然后再次尝试trim()
  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 回答