将请求标头从请求对象复制到urlConnection对象

时间:2010-04-01 10:24:11

标签: java servlets urlconnection

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的传入请求中的内容

2 个答案:

答案 0 :(得分:1)

我认为你在寻找

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

答案 1 :(得分:1)

URLConnection被懒惰地执行了。也就是说,在获取有关HTTP响应的一些信息之前,它不会实际触发HTTP请求。 E.g。

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连接,例如转发或重定向请求。