копирование заголовка запроса из объекта запроса в объект urlConnection - PullRequest
1 голос
/ 01 апреля 2010
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, чтобы установить поля заголовка в том, что они во входящем запросе к сервлету .

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

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) уже делает это.

Тем не менее, если цель на самом деле находится в том же контексте веб-приложения, размещенном на той же машине, то есть намного лучших способов вызвать ее, чем создание к ней HTTP-соединения, например пересылка перенаправление запроса.

1 голос
/ 01 апреля 2010

Я думаю, что вы ищете

RequestDispatcher rd;
rd = getServletContext().getRequestDispatcher("pathToServlet");
rd.forward(request, response);
...