0

サーブレットからリクエストを行う必要がありますが、すべてのヘッダー情報も保持する必要があります。それは request オブジェクトにあります。

たとえば、doGet メソッドから次のようなことを行う場合、その情報を URL 接続オブジェクトに渡す簡単な方法はありますか?

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(); 
4

2 に答える 2

2

addRequestPropertyの方法を使用しURLConnectionます。

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 の膨大なセットに煩わされる必要はありません。)

于 2009-04-10T14:06:01.940 に答える
1

request.getHeaderNames() メソッドを使用して、すべてのヘッダーを列挙できます。ただし、UrlConnection の代わりにHttpClientを使用して要求を行うことをお勧めします。

于 2009-04-10T13:08:39.673 に答える