【问题标题】:Call POST data from one servlet to another server将 POST 数据从一个 servlet 调用到另一台服务器
【发布时间】:2012-08-10 12:10:31
【问题描述】:

我正在从我的 GWT-Client 提交 JSON 数据并将其传递给我的 GWT-Server。我想将数据重新提交到另一台服务器,并希望从另一台服务器响应 GWT-Client。

我只是不知道我该怎么做。我尝试了下面的代码,但没有工作。

我的代码是:

@Override
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    System.out.println("POST");

    StringBuffer jb = new StringBuffer();
    URL oracle = new URL("http://www.google.com");

    HttpURLConnection connection = null;
    connection = (HttpURLConnection) oracle.openConnection();
    connection.setRequestMethod("GET");
    connection.setDoOutput(true);
    connection.setDoInput(true);
    request.getInputStream();

    OutputStream wr = connection.getOutputStream();

    InputStream in = request.getInputStream();
    byte[] buffer = new byte[512];
    int read = in.read(buffer, 0, buffer.length);
    while (read >= 0) {
        wr.write(buffer, 0, read);
        read = in.read(buffer, 0, buffer.length);
    }

    wr.flush();
    wr.close();

    BufferedReader in1 = new BufferedReader(new InputStreamReader(
            connection.getInputStream()));
    String inputLine;
    while ((inputLine = in1.readLine()) != null) {
        jb.append(inputLine);
    }
    response.setContentType("text/html");
    // Get the printwriter object from response to write the required json
    // object to the output stream
    PrintWriter out = response.getWriter();
    // Assuming your json object is **jsonObject**, perform the following,
    // it will return your json object
    out.print(jb.toString());
    out.flush();
    in1.close();
}

请帮帮我。

【问题讨论】:

  • 这会是 HTML5 Web 套接字的理想选择吗?
  • no.. 我不想使用 HTML5 网络套接字,因为它不支持 IE6 :(
  • 如果人们强制支持 IE6 就换工作。这是不人道的。
  • 我在使用 GWT 和 IE6 方面有过不好的体验
  • 我还建议在这种情况下考虑异步响应(请参阅stackoverflow.com/questions/12085235/…)

标签: java http gwt servlets http-headers


【解决方案1】:

您必须在读取响应之前将请求发送到其他服务器

URL oracle = new URL("http://www.anotherserver.com/");

HttpURLConnection connection = null;
connection = (HttpURLConnection) oracle.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);

OutputStream wr = connection.getOutputStream ();

InputStream in = request.getInputStream();
byte[] buffer = new byte[512]; 
int read = in.read(buffer,0, buffer.length);
while (read >= 0) {
   wr.write(buffer,0, read);
   read = in.read(buffer,0,buffer.length);
}

wr.flush ();
wr.close ();


BufferedReader in = new BufferedReader(new InputStreamReader(
        connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
    jb.append(inputLine);
}

另见Using java.net.URLConnection to fire and handle HTTP requests

【讨论】:

  • @andih..thanks for answer..but String "query" 和 "postParameters" 来自哪里???
  • postParameter 是复制和粘贴错误。我已经删除了它。 query 是从原始帖子参数生成的。为简单起见,我仅使用两个参数创建了查询,这些参数使用原始请求中的参数进行了初始化。在生产代码中,您将使用对 parameterMap 中找到的所有参数的循环生成查询字符串
  • @andih ...但我从客户端发送 json 像这样“{temp:'123'} 那么我如何编码并发送到另一台服务器??
  • 我已经通过复制请求正文替换了我的复制帖子参数。在将正文内容复制到“其他”服务器之前,您应该考虑设置正确的编码,即原始请求的编码。
  • @audih ..我替换了有问题的代码..请检查..但仍然收到错误“java.io.IOException:服务器返回 HTTP 响应代码:405 for URL:google.com "
【解决方案2】:

另外,你可以使用Apache httpclient,实现你的需求很简单,比如:

public static void main(String[] args) {
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://www.anotherserver.com/");
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("key",
                "value"));
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = client.execute(post);
        BufferedReader rd = new BufferedReader(new InputStreamReader(
                response.getEntity().getContent()));
        String line = "";
        while ((line = rd.readLine()) != null) {
            System.out.println(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2013-12-03
    • 2011-05-23
    相关资源
    最近更新 更多