gpt4 book ai didi

java - 在 servlet 的 processRequest 方法中发送 POST 请求

转载 作者:行者123 更新时间:2023-11-28 22:37:12 24 4
gpt4 key购买 nike

我有一个 servlet,它在请求中接收一个参数,执行一些操作,然后它必须重定向(使用 POST)到另一个服务器,其中包含 JSON 中的一些参数(包括接收到的参数)。

我的代码是:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {

String par = request.getParameter("myParameter");

String par2 = someStuff();

JSONObject json = new JSONObject();

json.put("myParameter", par);
json.put("otherParameter", par2);

response.setContentType("application/json");
response.getWriter().write(json.toString());

...
}

我想将这些点替换为:

  1. response.sendRedirect(...) 方法,但它是一个 GET 请求。

  2. 具有 forward 方法的 RequestDispatcher,但我无法将请求发送到另一个容器。

如何使用 JSON 参数向另一个容器发送 POST 请求?

最佳答案

如果您必须能够联系另一台服务器,则必须发送自己的 POST 请求。我建议使用像 Apache httpcomponents httpclient 这样的库做你肮脏的工作。那么您的代码将如下所示:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {

String par = request.getParameter("myParameter");

String par2 = someStuff();

JSONObject json = new JSONObject();

json.put("myParameter", par);
json.put("otherParameter", par2);

HttpPost method = new HttpPost(new URI("https://host/service"));
method.setHeader("Content-Type", "application/json");
method.setEntity(new StringEntity(json.toString(), ContentType.APPLICATION_JSON));
HttpParams params=message.getParams();
HttpConnectionParams.setConnectionTimeout(params, timeout);
HttpConnectionParams.setSoTimeout(params, timeout);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(method);
InputStream in = response.getEntity().getContent();

// Do whatever you want with the server response
// available in "in" InputStream

...
}

请注意,您需要添加一大堆错误处理,因为其中许多方法可能会失败(尤其是对 HttpClient.execute 的调用),并且您需要设置适当的调用超时,否则当您联系另一个可能会束缚您的服务时,您会让您的 HTTP 客户端想要。

如果您发现您的 JSON POST 请求需要一段时间,您可以考虑将您的工作放入一个单独的线程并使用异步通信模型(如 Websocket)与您的客户通信的可能性。您可能会发现采用这样的策略可以获得更好的整体服务器性能。

关于java - 在 servlet 的 processRequest 方法中发送 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com