【问题标题】:How does an application Server interact with a Http Server [closed]应用程序服务器如何与 Http 服务器交互 [关闭]
【发布时间】:2013-11-28 19:54:17
【问题描述】:

我已经使用 Tomcat 和 Jetty 有一段时间了。据我所知。应用程序服务器(Servlet Container)是 servlet 的容器。而 http 服务器处理 Http 请求和响应。但我一直对这两者的工作原理感到抽象。

谁能给我一个关于 Http Server 和 Application Server 如何工作的高级概述?因为我在看书。 Grizzly,它是一个 NIO 服务器。那么它是一个 HTTP 服务器吗?还是应用服务器?

【问题讨论】:

标签: java servlets application-server httpserver grizzly


【解决方案1】:

HTTP 服务器 是一个主要负责处理 HTTP 请求并向客户端提供 HTTP 响应的组件。当然,HTTP 服务器还有其他功能,例如请求转发、错误处理等等,但是对于更高级别的视图来说,理解一个 HTTP 服务器实现请求/响应机制就足够了。它不依赖于任何编程语言实现。

Servlet 容器是一个实现Java Servlet 规范的组件。 Servlet 主要使用 Java 语言实现。它们类似于 HTTP 服务器,因为它们处理请求和响应(请注意,与 HTTP 请求和响应相比,这些请求和响应是更高的抽象)、过滤它们、链接它们等等。

在大多数情况下,servlet 容器放置在 HTTP 服务器后面。 HTTP 服务器将 HTTP 请求(取决于某些 URL 映射规则)转发到 servlet 容器。 servlet 中高度抽象的请求/响应规范的实现之一是 HTTP 请求/响应。通过这种方式,HTTP 服务器和 servlet 容器可以协同工作,为 HTTP 会话提供服务,例如动态网页。

应用服务器是一个更复杂的组件(通常,它封装了一个 HTTP 服务器和一个 servlet 容器(如果它是一个面向 Java 的应用服务器))。这样的组件提供了实现某些给定规范的模块,例如JBoss Applciation Server / WildFly 实现的 Java EE 规范。

【讨论】:

  • 所以我猜Tomcat和Jetty是应用服务器?
  • Tomcat 是一个 servlet 容器。它实现了 servlet Java 规范,但不是整个 Java 企业版堆栈。它还包含一个 Web 服务器。我无法向您提供有关 Jetty 的专家详细信息,但他们主页的标题是“Jetty - Servlet Engine 和 Http Server”:)
  • 一个Servlet容器可以在没有任何Http Server的情况下存在吗?
  • 这是个好问题。理论上是可以的,因为servlet使用了request和response的抽象概念。 servlet 本身是一种抽象,HTTP servlet 是它的具体实现之一,但不是唯一的。查看此处的 servlet javadocs (docs.oracle.com/javaee/6/api/javax/servlet/Servlet.html) 并导航到其各种实现(以及阅读 service 方法文档),您将明白我的意思。另一方面,我确实从未在没有 Web 服务器的情况下使用过 servlet 容器,我认为这是最常见的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2017-11-01
  • 2012-11-15
  • 1970-01-01
  • 2012-12-13
  • 2015-03-15
相关资源
最近更新 更多