我正在尝试使用httpClient进行登录验证并在服务器端获得无限循环。更多解释将在代码之后。这是我的服务器端代码
public void doPost(HttpServletRequest req, HttpServletResponse resp)
while(true){
String user_name = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("User name and password is "+user_name +" paswword is "+password);
resp.setContentType("text/plain");
PrintWriter writer = resp.getWriter();
if(user_name.equalsIgnoreCase("haseeb")){
System.out.println("valid user name");
writer.write("welcome");
//writer.flush();
break;
}
else{
writer.write("unknown User");
System.out.println("unknown user name");
writer.flush();
continue;
}
}//End of while loop
} //End of doPost Method
从客户端我尝试登录,如果登录无效,服务器将返回" unknownUser"之后,如果登录有效,客户端将再次发送登录请求,循环将中断。在服务器端我得到无限循环,服务器一次又一次地处理第一个请求参数.... !!!如果有人希望我可以发布我的客户端代码以获得进一步的帮助,你可以在评论部分询问它.Thankyou
答案 0 :(得分:1)
问题在于continue
块中的else
。它应该也是break
。但是,更好的写入方式是没有while
循环。 e.g
public void doPost(HttpServletRequest req, HttpServletResponse resp)
String user_name = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("User name and password is "+user_name +" paswword is "+password);
resp.setContentType("text/plain");
PrintWriter writer = resp.getWriter();
if(user_name.equalsIgnoreCase("haseeb")){
System.out.println("valid user name");
writer.write("welcome");
writer.flush();
}
else{
writer.write("unknown User");
System.out.println("unknown user name");
writer.flush();
}
} //End of doPost Method
答案 1 :(得分:0)
while(true){
if(...)
break;
这是令人讨厌的代码..你可以在细节错误时抛出异常并告诉用户他需要再次写入他的凭据。所以发送一个新的httpRequest。
答案 2 :(得分:0)
当然你会得到一个无限循环!
while(true){
.....
else{
......
continue;
}
}
这就是导致它的原因。
您应该将请求发回给要求提供其凭据的用户,而不是continue;
。
答案 3 :(得分:0)
您似乎不了解HTTP请求的工作方式。
用户的浏览器向服务器发送请求登录页面的请求,服务器用HTML响应并且响应在那里结束。然后,用户验证他的凭据,导致浏览器发送新的请求,服务器在登录后以页面响应,或者再次响应登录页面,并显示一条消息,指示凭据没有匹配,但在两种情况下响应再次结束。不保留HTTP连接,它只是一系列请求和响应在不同的连接中。
因此,您不使用循环,只需每次请求发回适当的HTML。
即使用户的应用程序是桌面应用程序而不是浏览器,这仍然成立,只要它使用HTTP作为其传输。您无法使用相同的请求重新提交数据,至少在使用HttpServletRequest
/ HttpServletResponse
范例时不会重新提交。