如何将控件从Web Server传输到Servlet容器

时间:2011-10-13 09:53:29

标签: java web-applications tomcat application-server

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

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

2 个答案:

答案 0 :(得分:4)

实现细节取决于服务器到服务器。 Http Connector架构是Apache Tomcat内部使用的。 Web服务器只不过是一个Java应用程序,它在端口上打开套接字并通过HTTP协议继续监听该端口+其他一些设施。这些其他一些设施包括组件生命周期管理等。 Web服务器的基本任务是通过http协议侦听端口号上的请求,然后对其进行响应。因此,在今天可用的大多数常见服务器中,它们通过http协议在端口80上进行轮询。当您在端口80上向程序正在侦听的主机发送一些http请求时,程序侦听会对此作出响应。现在收到请求后,服务器程序(这里正在侦听端口80)将从其线程池中获取一个新线程,并且该线程将调用servlet的服务方法(如果第一个请求看到{,则将创建一个servlet实例) {3}}了解更多详情。)


此外:

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

答案 1 :(得分:1)

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

当两个组件(Web服务器和容器)都在同一个软件中时(tomcat可以管理直接的http请求),我不知道内部实现。 (事实上​​,它对我来说永远不会有用。相反,通常使用AJP连接器)