Как управление передается с веб-сервера в контейнер сервлетов - PullRequest
3 голосов
/ 13 октября 2011

Цитирование спецификации API сервлета Java: «Клиент (например, веб-браузер) обращается к веб-серверу и делает HTTP-запрос. Этот запрос принимается веб-сервером и передается в контейнер сервлета.»

Кто-нибудь может уточнить, как именно этот элемент управления передается (с веб-сервера на контейнер сервлетов)? Использует ли он какие-либо HTTP-коннекторы, например Apache Coyote?

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Детали реализации зависят от сервера.Архитектура Http Connector - это то, что используется внутри Apache Tomcat.Веб-сервер - это не что иное, как приложение Java, которое открывает сокет для порта и продолжает прослушивать этот порт по протоколу HTTP + некоторые другие средства.Эти некоторые другие средства состоят из таких вещей, как управление жизненным циклом компонентов и т. Д. Основная задача веб-сервера состоит в том, чтобы прослушивать запросы на номер порта по протоколу http и затем отвечать на них.Таким образом, на большинстве распространенных серверов, доступных сегодня, они продолжают опрашивать порт 80 по протоколу http.Когда вы отправляете какой-то http-запрос через порт 80 хосту, на котором программа слушает, программа отвечает на это.Теперь при получении запроса серверная программа (которая прослушивает порт 80 здесь) получит новый поток из своего пула потоков и в этом потоке вызовет метод обслуживания сервлета (экземпляр сервлета будет создан, если его первый запрос будет видеть здесь для получения более подробной информации).


ДОПОЛНЕНИЕ:

Веб-сервер - это машина, на которой запущена служба HTTPD.Когда вы отправляете запрос на сервер, сервер перехватывает это. Веб-сервер отвечает за получение запроса и генерацию ответа.Теперь сервер получает поток ввода на сокете, где он слушал.Отсюда он делегирует входные данные контейнеру сервлета, оборачивая его в новый поток (чтобы вещи обрабатывались асинхронно и веб-сервер мог обрабатывать другие http-запросы, когда предыдущий запрос обслуживается сервлетом в отдельном потоке).Контейнер сервлетов является частью веб-сервера.Контейнер сервлетов - это отдельный модуль;он может работать на веб-сервере как отдельная отдельная программа (например, tomcat).Теперь контейнер сервлета создает новый сервлет, если его там еще нет, и вызывает его метод службы в новом дочернем потоке.Контейнер сервлета упаковывает запрос http в объект HTTPRequest и передает его в один из параметров методу service.

1 голос
/ 14 октября 2011

Если вы, например, используете архитектуру apache + tomcat, есть протокол для соединителей (AJP). Посмотрите на mod_jk и mod_proxy.

Когда оба компонента (веб-сервер и контейнер) находятся в одном и том же программном обеспечении (tomcat может управлять прямыми http-запросами), я не знаю внутренней реализации. (На самом деле это никогда не было полезным для меня. Наоборот, обычно используются разъемы AJP)

...