逻辑如果在servlet上始终为false

时间:2014-04-09 11:30:18

标签: java string servlets equality logical-operators

我正在尝试在我的servlet上获取3个参数,我将代码拆分为3个类以实现代码可读性,但在我的query_a1类的DatabaseQuery方法中,我始终得到false并且我不明白为什么! 这是我的servlet类:

DatabaseQuery     公共类DatabaseQuery {

    //Query i aktivitetit 1
public static boolean query_a1(String user,String pass) {
    if (user== "andi" & pass=="andi")
        return true;
    else
        return  false;

}
//ky do te jete query i aktivitetit 2
public static void  query_a2() {

}
}

的Servlet

  import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet("/web2")
    public class Servlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {

            //merr aktivitetitn nga i cili vijne parametrat
            int activiteti=Integer.parseInt(req.getParameter("activitetiNR").toString());

            //krijo nje switch per cdo parameter 
          switch (activiteti){
          case 1:{
              //marrim te dhenat qe i perkasin aktivitetit
              String user = req.getParameter("user").toString();
              System.out.println(user);
              String pass = req.getParameter("pass").toString();
            System.out.println(pass);

              //i kalojme ne metoden e klases Aktiviteti1 dhe marrim pergjigje dhe me pas japim response
            response(resp,Aktiviteti1.kontrolloDhenat(user,pass));
          }
          break;
          }
        }
        private void response(HttpServletResponse resp, String msg)
                throws IOException {
            PrintWriter out = resp.getWriter();
            out.println(msg);
        }
    }

Aktiviteti

public class Aktiviteti1 {
    //ketu vendosen kontrollet llogjike te aktivitetit 
public static String kontrolloDhenat(String user,String pass){
    //ndersa ketu therrasim queryn nga klasa database
if (DatabaseQuery.query_a1(user,pass)==true){

    return "Succes!";           
    }else{
        System.out.println(DatabaseQuery.query_a1(user,pass));
    return "Failure!";

    }
}
}

你有什么想法吗?

3 个答案:

答案 0 :(得分:1)

  • 您正在通过String比较==个对象,但因为它们是对象,所以必须按照以下方式进行比较string1.equals(string2)
  • 您正在使用按位 AND运算符(&),但此处必须使用逻辑一个(&&)。

这里更正了if语句:

if (user.equals("andi") && pass.equals("andi")) then {
    //foo
}

答案 1 :(得分:1)

您需要重新访问字符串比较。使用equals()方法而非==运算符完成字符串比较。所以线下是错误的。进一步&是按位AND运算符,对于逻辑AND,您需要使用&&运算符。

if (user== "andi" & pass=="andi")

你应该使用

if (user.equals("andi") && pass.equals("andi"))

答案 2 :(得分:1)

不使用==使用equals来比较字符串。

您的代码:          if(user ==" andi"& pass ==" andi")  写得像:

    if(user.equals("andi")&&pass.equals("andi"))

如果你想要Ingore案例(like ANDI or Andi),你应该使用:

   if(user.equalsIgnoreCase("andi")&&pass.equalsIgnoreCase("andi"))