http post方法,HttpServletResponse和java上的cookie的问题

时间:2011-04-01 19:36:34

标签: java servlets cookies

一开始我发送了一个重定向,其中包含在HttpServletResponse上设置的cookie,但后来我决定不重定向,只获取来自servlet的信息,但问题是我无法在此post方法上设置cookie。

所以我想知道如何使用postmethod设置cookie,以及是否有办法处理HttpServletResponse中的cookie

String temp=null;
    HttpClient client = new HttpClient();
    client.getParams().setParameter("http.useragent", "Oauth Data Requester");
    BufferedReader br = null;
    PostMethod method = new PostMethod(ADDRESS+"/SampleProvider");
    //Aqui ainda enviamos o XML inteiro como parametro
    method.addParameter("p", "\"java2s\"");
    try{
      int returnCode = client.executeMethod(method);
      if(returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
        System.err.println("no post method found");
      } else {
         temp=method.getResponseBodyAsString();
      }
    } catch (Exception e) {
      System.err.println(e);
    } finally {
      method.releaseConnection();
      if(br != null) try { br.close(); } catch (Exception e) {}
    }
    return temp;
}

1 个答案:

答案 0 :(得分:4)

在servlet中,您可以使用HttpServletRequest#getCookies()获取客户端发送的所有Cookie。

Cookie[] cookies = request.getCookies();
// ...

您可以使用HttpServletResponse#addCookie()在响应中设置Cookie。

response.addCookie(new Cookie(name, value));

在HttpClient 3.x中(我假设您使用的是3.x,因为4.x上不存在executeMethod()方法),您可以将Cookie添加到HttpState然后在执行方法之前在HttpClient 上设置它。

HttpState state = new HttpState();
state.addCookie(new Cookie(".example.com", "name", "value"));
HttpClient client = new HttpClient();
client.setState(state);
// ...

执行该方法后,您可以通过

获取(更新的)Cookie
Cookie[] cookies = client.getState().getCookies();
// ...