在HttpClient类中同步请求和响应

时间:2012-10-03 11:03:25

标签: java jsp servlets httpclient

我正在尝试使用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

4 个答案:

答案 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范例时不会重新提交。