2015-10-06 97 views
1

對於使用JEE的練習項目,我在Javascript代碼上有一個HTML頁面,即向我的本地服務器發送請求,在互聯網的哪些搜索信息中發出請求GET和POST,視情況而定。但它發生一個GET請求,組成POST請求後,它的使用Java進行GET並添加標頭請求後發生POST錯誤

connection.setRequestMethod("POST"); 

執行出現異常它出來:「java.lang.IllegalStateException:連接在進步」。於是我決定關閉它在一個try-catch塊的寫入:

try{ con.setRequestMethod("POST"); }catch(Exception ex){} 

但是,當我嘗試把標題請求,它已經從服務器的對象「請求」它給

"java.lang.IllegalStateException: Already connected" 

但它遵循的唯一的事情就是設置頁眉的功能:

connection.setRequestProperty("header", "content"); 

如果有人能幫助我解決這個我會提前真的很感謝。


我覺得之前對我的問題的解釋還不夠清楚。 該功能的使用,使請求,並把標題請求,並與他們的價值觀是對對象的要求「的參數是:

public static String obtener_html(String url, HttpServletRequest request, 
            ArrayList<Key_value> replacements, boolean get){ 
     try { 
      HttpURLConnection connection; 

      if(get){ url = data(url, request); } 
      connection = (HttpURLConnection)(new URL(url).openConnection()); 

      if(get){ 
       connection.setRequestMethod("GET"); 
       set_headers(request, connection, replacements); 
       if(connection.getDoOutput()){ connection.setDoOutput(false); } 
      } 
      else{ 
       connection.setRequestMethod("POST"); 
       set_headers(request, connection, replacements); 
       if(!connection.getDoOutput()){ connection.setDoOutput(true); } 

       DataOutputStream writer = new DataOutputStream(connection.getOutputStream()); 
       writer.writeBytes(data(null, request)); 
       writer.flush(); 
       writer.close(); 
      } 

      int i = connection.getResponseCode(); 
      if(i == 200){ 
       InputStream reader = connection.getInputStream(); 
       Text text = new Text(); 

       int n; 
       while((n=reader.read()) != -1){ text.add((char)n); } 
       reader.close(); 
       connection.disconnect(); 
       return text.toString(); 
      } 

      connection.disconnect(); 
     } 
     catch(IOException ex){ ex.printStackTrace(); } 

     return null; 
    } 

在我的代碼:

  1. 的班級「Key_value」,是由我做的。
  2. 函數「data(...)」,從對象「request」中獲取參數和值,並將它們放入「connection」對象中。
  3. 功能「設置標題」,使標題請求相同,但改變標題請求指示。
  4. 由我製作的「文本」類是爲了加速從文本中連續/順序插入字符。

事實證明,我的服務器提出的第一個請求是一個GET,但是它會在稍後發佈POST時給出錯誤消息。每次調用它時,都會創建一個「連接」對象,並在連接完成之前關閉它,但無論如何,它會給出錯誤消息。我只向兩個IP地址發送請求,但顯然這個URL可能不同。另外,即使沒有必要指出請求是「POST」,因爲控制方法「setDoOutput(...)」的標誌已經是「真」。爲什麼它不允許我把標題請求放在try-catch塊中?我該如何解決這個問題?唯一的例外說,正在進行連接,或者它已經連接,是如果這個函數的調用的對象是一樣的人在第二個電話,或者喜歡放:

connection.disconnect(); 

它根本沒有效果。爲什麼以及如何解決它?

回答

0

connection.disconnect();事物的類型應該總是最終進入。

try{ 
//your logic 
}catch(Exception e){ 

}finally{ 
//Will be executed no matter what 
connection.disconnect(); 
} 
相關問題