客户端通过HTTP请求(通过浏览器post)调用Servlet,然后Servlet应向外部网站发送请求(get),并从网站接收响应(post)。servlet继续响应并向客户端发送响应(post)。
我的问题是如何在Servlet中发送和接收请求/响应并将某些内容发送回客户端?
URL url = new URL(urlString);
HttpURLConnection c = (HttpURLConnection)url.openConnection(); //connecting to url
c.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream())); //stream to resource
String str;
while ((str = in.readLine()) != null) //reading data
responsestring += str+"\n";//process the response and save it in some string or so
in.close(); //closing stream
response.getWriter().write(responsestring);
您可以在以下表单中使用请求的set属性:<代码>请求。setAttribute(字符串键,对象值)。
示例:
public class FindPerson extends HttpServlet {
// ... doGet implementation
@Override
protected void doPost( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException {
// data to send to the client
String name = "John White";
int age = 54;
// Adding attributes to the request
request.setAttribute( "personName", name );
request.setAttribute( "personAge", age );
// Sending the result to the.jsp page
getServletContext().getRequestDispatcher( "/WEB-INF/result.jsp" ).forward( request, response );
}
}
}
之后,您可以使用JSTL在JSP页面上读取此数据:
<p>Name: ${ requestScope.personName } </p>
<p>Age: ${ requestScope.personAge } </p>
其中,人名和人物是地图的关键。您可以使用请求设置它们。setAttribute。
!!!已更新!!!
在您的情况下,您将调用其他servlet,这些servlet将执行对外部站点的请求等。所有这些(从处理这些数据的外部站点收集数据)都将被放置,而不是设置名称和年龄值的代码(参见上面的示例)。希望有帮助!
您可以首先创建URL,然后使用URLConnection对象连接并接收响应,如下所示,以获取请求/响应
URL url = new URL(urlString);
HttpURLConnection c = (HttpURLConnection)url.openConnection(); //connecting to url
c.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream())); //stream to resource
String str;
while ((str = in.readLine()) != null) //reading data
responsestring += str+"\n";//process the response and save it in some string or so
in.close(); //closing stream
response.getWriter().write(responsestring);
更新POST请求/响应执行此操作
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("POST");
String urlParameters = ..;
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer res = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
res.append(inputLine);
}
in.close();
//process response
response.getWriter().write(res);
为什么每个站点都解释说在SSE中,客户端和服务器之间的单个连接保持打开状态“使用SSE,客户端发送标准HTTP请求请求事件流,服务器最初以标准HTTP响应响应并保持连接打开” 然后,当服务器决定可以向客户端发送数据,而我试图实现SSE时,每隔几秒钟就会看到fiddler请求被发送 对我来说,这感觉就像是长时间的投票,没有一个连接保持打开。 此外,并不是服务器决定向客户机发送数据,而是只有在客户机发
我在spring mvc 3.2.2中使用apache http客户端同步发送5个get请求,如图所示。 如何异步(并行)发送所有这些内容并等待请求返回,以便从所有 GET 请求返回已解析的有效负载字符串?
为什么每个站点都解释说,在SSE中,客户端和服务器之间只有一个连接保持打开状态“在SSE中,客户端发送一个标准的HTTP请求,请求一个事件流,服务器最初以标准的HTTP响应进行响应,并保持连接打开” 然后,当服务器决定它可以向客户机发送数据时,我正在尝试实现SSE,我会看到每隔几秒钟发送一次fiddler请求 对我来说,这感觉像是长时间的轮询,没有一个连接保持打开。
问题内容: 我需要编写一个命令行客户端,以便在服务器上播放井字游戏。服务器接受http请求并将json发送回我的客户端。我正在寻找一种快速的方法,以使用Boost库发送http请求并以字符串形式接收json。 问题答案: 符合说明的最简单的事情: 这将收到完整的响应。您可以使用虚拟服务器对其进行测试:( 也可以 在Coliru上运行): 这将表明已收到请求,并且响应将由上面的客户代码写出。 请注意
我有这个代码: 我一直在犯这样的错误: java:不兼容的类型:com。应用句子分类请求。无法将生成器转换为com。应用句子分类请求 我已经使用Maven插件生成了gRPC Java文件。在看了多个例子后,我不确定我的问题是什么。
我必须创建一个tcp客户端 1) -将向服务器发送请求消息并接收响应 2)-有时服务器将msg推送到客户端,而没有来自客户端的任何请求,因此客户端应该接受并阅读它。 因此,我已经就其中的第1部分提出了问题,我的tcp客户端使用spring集成无法得到响应,并试图找到一些解决方案。但对于第二部分,我不知道如何使用tcpoutboundgateway或带有客户机标志enable的inboundgate