当前位置: 首页 > 知识库问答 >
问题:

如何发送请求并继续响应,并发送回客户端?

于鹏
2023-03-14

客户端通过HTTP请求(通过浏览器post)调用Servlet,然后Servlet应向外部网站发送请求(get),并从网站接收响应(post)。servlet继续响应并向客户端发送响应(post)。

我的问题是如何在Servlet中发送和接收请求/响应并将某些内容发送回客户端?

共有3个答案

郗学
2023-03-14
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);
石喜
2023-03-14

您可以在以下表单中使用请求的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将执行对外部站点的请求等。所有这些(从处理这些数据的外部站点收集数据)都将被放置,而不是设置名称和年龄值的代码(参见上面的示例)。希望有帮助!

云正信
2023-03-14

您可以首先创建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