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

我在一个 servlet 中编写了上面的代码来发布表单,所以一些替代位置比这个 servlet,但它不起作用。可以使用 connection.setRequestProperty 将标头字段设置为它们在传入的 servlet 请求中的内容。

4

2 回答 2

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)已经这样做了。

也就是说,如果目标实际上位于同一台机器上托管的同一个 webapp 上下文中,那么调用它的方法比创建到它的 HTTP 连接要好得多,例如转发或重定向请求。

于 2010-04-01T12:04:20.013 回答
1

我想你在找

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