2009-05-18 56 views
1

我有两个servlet运行在不同的tomcat服务器上。从另一个servlet调用servlet

我试图从servlet2以下面的方式调用一个servlet1,并想写一个对象到输出流。

URL url=new URL("http://msyserver/abc/servlet1"); 
URLConnection con=url.openConnection(); 
con.setDoOutput(true); 
con.setDoInput(true); 
OutputStream os=con.getOutputStream(); 
ObjectOutputStream oos=new ObjectOutputStream(os); 
oos.writeObject(pushEmailDTO); 
oos.flush(); 
oos.close(); 

问题是我无法命中servlet?我无法弄清楚我错过了什么。

回答

1

我不能不理解,但它通过在代码中添加以下行来工作。

con.getExpiration(); 

这样

URL url=new URL("http://msyserver/abc/servlet1"); 
URLConnection con=url.openConnection(); 
con.setDoOutput(true); 
con.setDoInput(true); 
con.getExpiration();//<---------- 
OutputStream os=con.getOutputStream(); 
ObjectOutputStream oos=new ObjectOutputStream(os); 
oos.writeObject(pushEmailDTO); 
oos.flush(); 
oos.close(); 
+0

对于新的访客,可能会有这种帮助 - http://stackoverflow.com/questions/4844535/why-do-you-have-to-call-urlconnectiongetinputstream-to-be-able-to-write-out-to – Gyan 2012-09-13 06:28:37

1

你得到的错误是什么?检查地址是否正确。如果远程服务器在80以外的端口上运行,请在构建URL时考虑这一点。

也可能我建议使用HttpClient而不是URLConnection。

+0

我没有得到任何异常,每行都成功执行。此外,该servlet正在运行在我提到的代码中传递的确切url上。 – 2009-05-18 05:51:31

6

您必须通过创建一个url.connect()连接之前,你可以读取/发送数据。这是反直觉的,因为名字openConnection()表明,它确实已经但是文档说:

一般而言,创建一个URL连接是一个多步骤的过程:

  1. openConnection()
  2. 操纵影响与远程资源连接的参数。
  3. connect()
  4. 与资源交互;查询标题字段和内容。

这就是为什么getExpiration()使得它的工作:它为你调用connect()