Как я могу пройтись по источнику Jetty, чтобы увидеть, как он обрабатывает типичный запрос сервлета? - PullRequest
2 голосов
/ 29 февраля 2012

Я хочу пошагово просмотреть исходный код молы, поскольку он отвечает на типичный запрос сервлета.

Как я могу это сделать?

Нужно ли загружать исходный код?

Где находится точка входа, где я должен устанавливать точку останова?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Да, вы можете это сделать.

Да, вам нужно загрузить исходный код (если вы не хотите читать байт-код в своем отладчике :)), если вы используете Maven, то вы можете пусть maven сделает за вас загрузку

Это возможно сделать с помощью "стандартной" установки Jetty, но я считаю, что гораздо проще создать быстрый встроенный сервер Jetty для этих задач.Даже если вы не знакомы с встраиванием Jetty, это не сложно узнать, и поможет вам разобраться, как Jetty обрабатывает сервлеты.См. документацию по встраиваемой пристани

Расположение точки останова будет зависеть от того, какую именно версию Jetty вы используете, и как далеко вы хотите пройти внутрь Jetty.

Вы можете установить точку останова в конструкторе для HttpConnection, которая позволит вам посмотреть, как Jetty читает из необработанного сокета TCP / IP, анализирует заголовки HTTP, а затем создает запрос и response объект для каждого HTTP-запроса.

Если вы просто хотите посмотреть, как работает диспетчеризация сервлетам (сопоставление запрошенных URL-адресов с сопоставлениями путей, создание новых сервлетов и т. Д.), Попробуйтеточка останова в ServletHandler.doHandle

Если вы хотите что-то промежуточное, то Server.handle - хорошее место - это произойдет после того, как входящий поток будет проанализирован, но до того, как Jetty примет какие-либо решения о том, как запросдолжны быть обработаны.

1 голос
/ 29 февраля 2012

да, вам нужно загрузить исходный код (если вы не хотите пошагово просматривать вывод javap). В прошлый раз, когда я проверял, я думаю, что был Server.handle() метод, который был «главной» точкой входа.

...