2010-04-01 77 views
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一些替换的位置,但它不是working.is它好使用connection.setRequestProperty设置头文件字段与传入servlet请求中的内容。从请求对象的请求报头复制到URLConnection对象

回答

1

我认为你正在寻找

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

没有实际上我试图获取一些远程URL与当前请求的标题。 – 2010-04-01 12:09:44

+0

或事后其实不是..?否则将它设置为接受似乎是错误的。 – BalusC 2010-04-01 22:50:28

1

URLConnection懒洋洋地被执行。也就是说,它不会实际上触发HTTP请求,直到您获取有关HTTP响应的一些信息。例如。

int responseCode = httpUrlConnection.getResponseCode(); 

InputStream responseBody = urlConnection.getInputStream(); 

String statusHeader = urlConnection.getHeaderField(null); 

connection.connect();是由完全是多余的方式。它已在您拨打url.openConnection();时执行。此外connection.setRequestMethod("POST");是完全superflous,connection.setDoOutput(true)已经这样做。也就是说,如果目标实际上位于同一机器上托管的同一个webapp上下文中,那么有更多的方法可以调用它,而不是创建到它的HTTP连接,例如转发或重定向请求。

+0

是的,它添加一行后connectin.getHeaderField(); – 2010-04-01 12:12:13

+0

“connection.connect();是完全多余的方式” 我想connection.openConnection()让一个Manipulate参数影响到远程资源的连接。 \t while connection.connect()用于与资源进行交互;查询连接后的标题字段和内容。 http://java.sun.com/javase/6/docs/api/java/net/URLConnection.html – 2010-04-01 12:18:50

+0

的确如此,但在HTTP连接的情况下它仍然是超级的。离开它,你会看到它只是工作。 – BalusC 2010-04-01 22:51:42