2012-05-29 80 views
-1

我正在處理以下問題。Servlet - Applet交互需要閱讀響應

我有一個的servelt(具有的doPost和的doGet overrided)和用下面的代碼的applet:

 String urlStr="blabla"; 
     URLConnection conn = StartConnection("http","localhost",8084,urlStr);    
     InputObject obj = GetInputObject(); 
     ObjectOutputStream oos = new ObjectOutputStream(conn.getOutputStream()); 
     oos.writeObject(obj); 
     oos.flush(); 

利用這種片碼的servlet的不進行任何動作(或的doPost的doGet)。但如果我添加

 BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     String result = in.readLine(); 
     log(result); 

我進入doPost正文。谷歌搜索沒有任何結果。爲什麼我必須回讀迴應,即使我不需要它?

補充說:

private URLConnection StartConnection(String protocol,String host,int port, String urlStr){ 
     URLConnection conn = null; 
     try 
     { 
      URL currentPage=getCodeBase(); 
      URL dataURL=new URL(protocol,host,port,urlStr); 
      conn = dataURL.openConnection();    
      conn.setDoOutput(true); 
      conn.setDoInput(true); 
     } 
     catch(Exception ee){ 
       log(ee.getMessage().toString()); 
     } 
     return conn; 

    } 

回答

2

我們沒有看到StartConnection()源顯然它只是返回一個未連接URLConnection。只是創建這個對象根本不會與網絡對話;這僅在調用connect()時發生。從輸入流中讀取隱含地調用connect(),所以這就是爲什麼這對你有用。不過,您可以撥打connect();你實際上並不需要閱讀任何你不想要的數據。

1

如果你想發送一個applet類的序列化的實例到你的servlet,那麼你必須像瀏覽器一樣進行HTTP調用。您應該使用POST方法並將序列化的字節作爲POST參數發送。 這種東西的最佳圖書館是Apache HttpClient。這是一個tutorial