【问题标题】:How a request is handled when it is made from a servlet to the other server从 servlet 向其他服务器发出请求时如何处理请求
【发布时间】:2018-03-10 07:12:28
【问题描述】:

我在 TOMCAT 服务器上创建并托管了一个 servlet。 我知道每次发出请求时,都会有一个线程处理请求并由 servlet 实例处理它。 该请求将有一个调用用户代理的详细信息,这就是它如何知道将响应发回哪里。

假设 servlet 需要调用另一台服务器以获取某些信息

这就是我的想法

更多浏览器同时向第一台服务器发出请求调用。 第一台服务器上的 servlet 必须向第二台服务器发出请求,以获取来自浏览器的每个传入请求的信息。

第一个服务器上的 servlet 如何区分它从第二个服务器接收到的响应,因为每个响应都与浏览器发出的请求相关联。

谢谢, 维奈

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    请求将有一个调用用户代理的详细信息,这就是它知道将响应发回哪里的方式。

    用户代理详细信息不是服务器发回响应的方式。一旦浏览器向服务器发出请求(向 tomcat 服务器端口),就会在浏览器 m/c 和服务器机器之间创建一个 TCP/IP 套接字。由于 tomcat 正在侦听该端口 OS,因此 tomcat 会生成一个线程来读取请求并通过 HttpServletResponse.getWriter() 对象发回响应。

    同样的逻辑适用于运行一个 tomcat 服务器(比如 Tomcat1)的 servlet 连接到另一台机器上的另一个 tomcat(比如 Tomcat2)。

    第一个服务器上的 servlet 如何区分它从第二个服务器接收到的响应,因为每个响应都与浏览器发出的请求相关联。

    您可能在 Tomcat1 上使用一些 http 库、普通的 HttpURLConnection 等向 Tomcat2 发送请求,以便您读取响应。一旦你在 Tomcat1 上读取响应,就可以通过 Tomcat1 服务器上的 HttpServletResponse.getWriter() 对象将响应发送回浏览器。

    【讨论】:

    • 这对我的理解有所启发。但是由于只有一个 servlet 实例,来自 tomcat2 的响应如何连接到 tomcat1 的响应。它不会在响应之间重叠。我无法理解接线
    • Servlet 实例只有一个。但是每个请求都有自己的套接字和线程。您可以尝试一个小例子,这将真正清楚很多事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多