一开始我发送了一个重定向,其中包含在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;
}
答案 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);
// ...
执行该方法后,您可以通过
获取(更新的)CookieCookie[] cookies = client.getState().getCookies();
// ...