从另一个servlet调用servlet

时间:2009-05-18 05:34:45

标签: java servlets urlconnection

我有两个在不同的tomcat服务器上运行的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?我无法弄清楚我错过了什么。

3 个答案:

答案 0 :(得分:6)

您必须先通过url.connect()创建连接,然后才能读取/发送数据。这是违反直觉的,因为名称openConnection()表明它已经存在,但文档说:

  

通常,创建与URL的连接是一个多步骤过程:

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

这就是getExpiration()使其有效的原因:它为您调用connect()

答案 1 :(得分:1)

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

我还建议使用HttpClient代替URLConnection。

答案 2 :(得分: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();