Java 控件如何从Web服务器转移到Servlet容器

Java 控件如何从Web服务器转移到Servlet容器,java,web-applications,tomcat,application-server,Java,Web Applications,Tomcat,Application Server,引用JavaServletAPI规范:“客户端(例如,Web浏览器)访问Web服务器并发出HTTP请求。该请求由Web服务器接收并传递给Servlet容器。” 有人能详细说明这个控件是如何传递的(从Web服务器到Servlet容器)吗?它是否使用类似Apache Coyote的HTTP连接器?实现细节取决于服务器到服务器。Http连接器体系结构是ApacheTomcat内部使用的。 Web服务器只不过是一个Java应用程序,它在一个端口上打开套接字,并通过HTTP协议+一些其他设施在该端口上保持

引用JavaServletAPI规范:“客户端(例如,Web浏览器)访问Web服务器并发出HTTP请求。该请求由Web服务器接收并传递给Servlet容器。”


有人能详细说明这个控件是如何传递的(从Web服务器到Servlet容器)吗?它是否使用类似Apache Coyote的HTTP连接器?

实现细节取决于服务器到服务器。Http连接器体系结构是ApacheTomcat内部使用的。 Web服务器只不过是一个Java应用程序,它在一个端口上打开套接字,并通过HTTP协议+一些其他设施在该端口上保持侦听。这些其他设施包括组件生命周期管理等。 web服务器的基本任务是通过http协议侦听端口号上的请求,然后响应该请求。因此,在目前最常见的服务器中,它们通过http协议在端口80上进行轮询。当您在端口80上向程序正在侦听的主机发送一些http请求时,程序侦听将对此作出响应。现在,在接收到请求后,服务器程序(在这里监听端口80)将从其线程池中获取一个新线程,并在该线程中调用servlet的服务方法(如果是第一个请求,将创建一个servlet实例,请参阅以了解更多详细信息)


补充:


Web服务器是运行HTTPD服务的机器。当您向服务器发送请求时,服务器会截获该请求。Web服务器负责接收请求并生成响应。现在,服务器在其侦听的套接字上获取输入流。从这里开始,它通过将输入包装在一个新线程中,将其委托给servlet容器(这样,当servlet在一个单独的线程中提供上一个请求时,事情可以异步处理,web服务器可以处理其他http请求)。Servlet容器是Web服务器的一部分。Servlet容器是一个单独的模块;它可以作为单个独立程序在web服务器中运行(tomcat就是一个例子)。现在,servlet容器实例化一个新的servlet(如果还没有),并在新的子线程中调用其服务方法。Servlet容器将http请求包装在HTTPRequest对象中,并将其传递到服务方法的一个参数中。

例如,如果您使用的是apache+tomcat体系结构,则有一个连接器协议(AJP)。看看mod_jk和mod_proxy


当两个组件(web服务器和容器)在同一个软件中时(tomcat可以管理直接http请求),我不知道内部实现。(事实上,它从来没有对我有用过。相反,AJP连接器是常用的)

问题是:控件如何从Web服务器传输到Servlet容器。“现在,在收到请求后,服务器程序(在这里监听端口80)将从其线程池中获取一个新线程,并在该线程中调用servlet的服务方法。”我知道,但问题是这个程序将如何获得控制,以便它可以启动它的线程。请查看编辑,并让我知道,如果你需要进一步的解释。谢谢如果Servlet容器和web服务器在不同的JVM中运行该怎么办?在这种情况下,web服务器和Servlet容器JVM使用某种IPC机制(通常是TCP/IP套接字)进行通信。谢谢。。你确定这就是它的实现方式吗?为什么不是RMI、WS、JMX或其他?