1
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    URL url = new URL("http://localhost:8080/testy/Out");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");    
    PrintWriter out = response.getWriter();
    for(Enumeration e = request.getHeaderNames(); e.hasMoreElements();) {
        Object o = e.nextElement();
        String value = request.getHeader(o.toString());
        out.println(o + "--is--" + value + "<br>");
        connection.setRequestProperty((String) o, value);
    }
    connection.connect();
}

上記のコードをサーブレットに記述して、このサーブレットとは別の場所にフォームを投稿しましたが、機能していません。connection.setRequestPropertyを使用して、サーブレットへの着信リクエストのヘッダーフィールドを設定しても問題ありません。

4

2 に答える 2

1

私はあなたが探していると思います

RequestDispatcher rd;
rd = getServletContext().getRequestDispatcher("pathToServlet");
rd.forward(request, response);
于 2010-04-01T10:29:52.863 に答える
1

URLConnection怠惰に実行されます。つまり、HTTP応答に関する情報を取得するまで、実際にはHTTP要求は発生しません。例えば

int responseCode = httpUrlConnection.getResponseCode();

また

InputStream responseBody = urlConnection.getInputStream();

また

String statusHeader = urlConnection.getHeaderField(null);

ちなみにこれconnection.connect();は完全に不要です。呼び出した時点ですでに実行されていますurl.openConnection();。また、connection.setRequestMethod("POST");は完全に不要ですが、connection.setDoOutput(true)すでにそれを行っています。

とはいえ、ターゲットが実際に同じマシンでホストされている同じWebアプリケーションコンテキストにある場合は、リクエストの転送やリダイレクトなど、ターゲットへのHTTP接続を作成するよりもはるかに優れた方法でターゲットを呼び出すことができます。

于 2010-04-01T12:04:20.013 に答える