0

私には達成しようとしていることがあります。

ポート 8080 のローカルホストで Web アプリケーションを実行しています。

localhost:9005 で HTTP サーバーを実行しています。

サーブレット Java クラスに情報を渡す JSP フォームがあります。これは、データ文字列を使用して、HTTP サーバー localhost:9010 の URL に HTTP ポストを実行します。

私がする必要があるのは、同じ接続の一部として POST と GET を実行することです。私はそれらを2つの別々の呼び出しとして機能させていますが、同じ接続ではありません。データを投稿すると、同じ接続である必要があります。HTTP サーバーはこのデータを取得して処理し、一意のデータをこの URL に出力します。したがって、GET は POST と同じ接続の一部である必要があります。

誰でも助けてもらえますか?

これは私のプロセスリクエストのJavaコードです:

    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import javax.servlet.*;
    import javax.servlet.http.*;


    import java.util.List; 
    import java.util.Map.Entry; 

    public class ProcessRequest {

        public void sendRequestToGateway() throws Throwable{

            String message = URLEncoder.encode("OP1387927", "UTF-8");    

            try {           
                URL url = new URL("http://localhost:9005/json");            
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();            
                connection.setDoOutput(true);            
                connection.setRequestMethod("POST");            
                OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());           
                writer.write("operator=" + message);       
                writer.close();   

                System.out.println("connection.getResponseCode() : " + connection.getResponseCode());
                System.out.println("connection.getResponseMessage()" + connection.getResponseMessage());

                if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { 

                    receiveMessageFromGateway();

                } else {                
                    // Server returned HTTP error code.            
                }   

                //receiveMessageFromGateway();

            } catch (MalformedURLException e) {            
                // ...        
            } catch (IOException e) {           
                    // ...        
            }
        }

        public void receiveMessageFromGateway()  throws Throwable { 


            HttpURLConnection client = null; 
            OutputStreamWriter wr = null; 
            BufferedReader rd = null; 
            StringBuilder sb = null; 
            String line = null; 

            try { 

              URL url = new URL("http://localhost:9005/json"); 
              client = (HttpURLConnection) url.openConnection(); 
              client.setRequestMethod("GET"); 
              client.setDoOutput(true); 
              client.setReadTimeout(10000); 

              client.connect(); 
              System.out.println(" *** headers ***"); 
              for (Entry<String, List<String>> headernew : client.getHeaderFields().entrySet()) { 
                System.out.println(headernew.getKey() + "=" + headernew.getValue()); 
              } 

              System.out.println(" \n\n*** Body ***"); 
              rd = new BufferedReader(new InputStreamReader(client.getInputStream())); 
              sb = new StringBuilder(); 

              while ((line = rd.readLine()) != null) { 
                sb.append(line + '\n'); 
              } 

              System.out.println("body=" + sb.toString()); 

            } finally { 
              client.disconnect(); 
              rd = null; 
              sb = null; 
              wr = null; 
            } 
         }  

    }
4

3 に答える 3

3

元の POST からの結果を返さないのはなぜですか?

于 2012-07-06T15:18:22.880 に答える
1

一般に、 で接続の再利用を制御することはできませんHttpUrlConnection。接続を特定の実装クラスにキャストして干渉することはできるかもしれませんが、それは恐ろしく不安定な方法です。

要件を考えると、おそらく Apache HttpClient の方が適切なオプションです。

于 2012-07-06T15:17:47.367 に答える
0

これには Apache HTTP クライアントを使用できます。とてもシンプルです。

Maven を使用している場合は、次の行を POM ファイルに追加するだけです。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.3.3</version>
</dependency>   

この例では、POST リクエストを送信し、その後に GET リクエストを送信しています。

見てみましょう:

public static String get(String p_url) throws IOException
{       

        CloseableHttpClient httpclient = HttpClients.createDefault();

        // First request: POST
        HttpPost httpPost = new HttpPost("http://the-api-url.com/Login/Auth&token=12345"));
        CloseableHttpResponse response_post = httpclient.execute(httpPost);                 
        System.out.println(response_post.getStatusLine());          
        HttpEntity entity_post = response_post.getEntity();         
        System.out.println(EntityUtils.toString(entity_post));

        // Second request: GET
        HttpGet httpGet = new HttpGet(p_url);
        CloseableHttpResponse response_get = httpclient.execute(httpGet);  
        System.out.println(response_get.getStatusLine());           
        HttpEntity entity_get = response_get.getEntity();           
        System.out.println(EntityUtils.toString(entity_get));

        response_post.close();
        response_get.close();           
        return EntityUtils.toString(entity_get);             
    }
于 2014-03-14T14:10:11.723 に答える