2009-04-10 38 views
0

我需要从servlet发出请求,但我还需要保留所有头信息。这是在请求对象中。从Servlet发出URL请求并保留头信息

例如,如果我从doGet方法执行类似以下操作,是否有一种简单的方法将该信息传递给URL Connection对象?

URL url = new URL(); 
URLConnection uc = url.openConnection(); 
uc.setDoOutput(true); 
uc.setDoInput(true); 
uc.setUseCaches(false); 

uc.setRequestProperty("Content-type", 
"application/x-www-form-urlencoded"); 

DataOutputStream dos = new DataOutputStream(uc.getOutputStream()); 
dos.writeBytes(strInEnc); 
dos.flush(); 
dos.close(); 

InputStreamReader in = new InputStreamReader(uc.getInputStream()); 
int chr = in.read(); 
while (chr != -1) { 
taResults.append(String.valueOf((char) chr)); 
chr = in.read(); 

回答

2

使用URLConnectionaddRequestProperty方法。

Enumeration<?> names = req.getHeaderNames(); 
while (names.hasMoreElements()) { 
    String key = (String) names.nextElement(); 
    Enumeration<?> values = req.getHeaders(key); 
    while (values.hasMoreElements()) { 
    uc.addRequestProperty(key, (String) values.nextElement()); 
    } 
} 

如果使用HttpClient的,除非它已经内置支持了ServletRequest的直通您将有一组类似的循环。 (如果没有,为什么还要有一大堆额外的依赖和非标准API?)

1

您可以使用request.getHeaderNames()方法枚举所有标头。但是,我建议使用HttpClient而不是UrlConnection来发出请求。

+0

另请参阅:http://stackoverflow.com/questions/96360/writing-post-data-from - 酮的Java servlet的到另一 – 2009-04-10 13:29:47