Java 如果条件不能正常工作

Java 如果条件不能正常工作,java,jsp,servlets,Java,Jsp,Servlets,实际上,我在这段代码中遇到了逻辑问题 问题:当我输入正确的emp_id和密码时,if部分运行正常,但是每当我试图运行这个页面时(runas->runonservertomcat Server)…它将进入else条件,这使得我无法运行包含if子句的jsp页面 else { resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); } 我希望在

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

问题:当我输入正确的emp_id和密码时,if部分运行正常,但是每当我试图运行这个页面时(runas->runonservertomcat Server)…它将进入else条件,这使得我无法运行包含if子句的jsp页面

              else {
              resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);

                          }
我希望在jsp页面满足if子句时也运行它

              else {
              resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);

                          }
这是我的密码:

     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();
      }
试试看{
String url=“jdbc:mysql://localhost/app";
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManager.getConnection(url,“****”,“****”);
stmt=con.prepareStatement(“从ofc中选择*,其中emp_id=?和密码=?”;
stmt.setString(1名员工);
stmt.setString(2,密码);
ResultSet rs=stmt.executeQuery();
if(rs.next()){//我想针对这个if条件打印这个jsp页面
System.out.println(“2>员工Id:+Employee+”&&Password:+Password);
System.out.println(“3>此员工”+employee+“存在于数据库中并将在那里”);
分别为setContentType(“文本/html”);
PrintWriter out=resp.getWriter();
out.print(“”;//这是我的JSP页面,&从这里开始
输出。打印(“”);
打印(“保单页”);
输出。打印(“”);
List devices=Store.getDevices();
if(devices.isEmpty())
{
打印(“没有人在那里!”);
} 
其他的
{    
out.print(“+devices.size()+”有设备!”);
输出。打印(“”);
输出。打印(“”);
分别设置状态(HttpServletResponse.SC_OK);
输出。打印(“”);
输出。打印(“”);
//getServletContext().getRequestDispatcher(“/home”).forward(req,resp);
}
out.print(“”;//在此处完成
分别设置状态(HttpServletResponse.SC_OK);
}
否则{
resp.setStatus(HttpServletResponse.SC_BAD_请求);
}
}
捕获(例外e){
e、 printStackTrace();
}

我错在哪里…在这个编码上下文中…//

可以识别和解决此问题的步骤

  • 检查用户名,表中存在密码
  • 如果有多余的空格,请尝试添加
    employee.trim()
    password.trim()
    。如果
    employee
    password
    的值为空,您将获得NullPointerException。这就是原因。然后检查空值,然后再次尝试使用
    trim()
  • 在查询之前打印结果,以便您知道自己做错了什么
  • 如果您使用的是请求参数,则需要在URL
    ?employeeid=someId&password=somepass

  • 调试代码时,调试器是否进入IF语句—实际上是在IF语句的内括号内输入,还是仅对IF语句求值(求值为“IF(False)”),然后转到else语句

    也许你的mySQL查询没有返回任何结果?尝试使用HasRows属性

    if (rs.HasRows) 
    { 
        while (rs.Read()) 
        { 
            // do stuff
        } 
        } 
        else 
        { 
           // notify user that query returned no results
        }
    } 
    

    您的Resultset为空,这就是您进入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>
    
    
    

    你将头部部分混合到身体中。

    但在这个if条件下,每当我试图运行此页面时……它将进入else条件
    ——它进入if后如何进入else条件??你能解释清楚吗??你说的是哪个
    else
    是的…每当我在Tomcat服务器上运行此代码时,它将进入else-part。就我的代码而言,这与我的代码无关。@RohitJain它应该是从第一个
    开始的
    else
    ,如果
    @user1645434,你应该提供你的
    doPost
    方法和用来调用servlet的JSP。没有问题。在什么情况下会发生什么?是否希望if(rs.next())-代码多次运行?我只同意步骤3。如果
    employee
    password
    具有
    null
    值,则步骤2可能会失败。然后他会知道原因:)我能够根据员工和密码正确地进行身份验证。但是当像Run as->Run on Server这样运行时…这个java文件…然后它仍然是else条件。您如何传递employee和密码那样的话,密码是多少?能否在执行查询之前添加打印语句?假设将servlet映射为
    /MyServlet
    ,则必须在URL栏中编写此语句:
    http://:8080/YourWebAppName/MyServlet?employeeid=someId&password=somepass
    ,以测试类。请注意,您的html结构有错误,头部不属于身体部位,但在ist之前,请参见: