Maksclub
@Maksclub
maksfedorov.ru

Что такое сервлет?

Сегодня просто решил немного прогуляться в ознакомлении — а чего там в Джава,
Пробежался по статьям и сразу везде инфа про сервлеты. Везде пишут детали, а абстрактного описания и назначения нет.

Правильно понимаю, что это абстракция, которая нам по сути оборачивает реквест/респонс и дает интерфейс для работы с сервером в приложении.

Если по аналогии с PHP — это что-то абстрактное типа php-fpm/cgi (создает только поток, а не процесс) и что выводит нам удобный интерфейс (некий аналог пхпшных $_POST/$_GET, завернутых в интерфейс PSR Request/Response) для работы с абстракцией http внутри веб-приложения?
  • Вопрос задан
  • 1042 просмотра
Решения вопроса 3
Xuxicheta
@Xuxicheta
инженер
Я конечно извиняюсь и не разу не джавер, но беглый гуглинг отлично дает ответ и не путает апплеты (которые мы отлично помним) с сервлетами.
https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D...
Ответ написан
Комментировать
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Сервлет - это аналог CGI. Была когда-то давно такая техника. Но в современной разработке сервлеты уже не принято использовать. Их заменяют на Rest-endpoints, GraphQL-endpoints которые отдают чистый контент в виде JSON/XML.
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Ну пойдем.
1) Сервлет - не аналог CGI, и не аналог PHP
Если уж говорить про аналоги, то ближе всего это FastCGI, но тоже очень далеко.
В отличии от CGI/FastCGI - это ресурс, который:
- имеет четко заданный жизненный цикл с сохранением состояний на приложение, сессию, запрос
- имеет ресурсы, передаваемые ему сервером приложения (авторизация, внешние ресурсы, ресурсы приложения, ресурсы запроса, ресурсы сессии)
- может включать в себя так называемые фильтры пре/пост обработки
- может взаимодействовать с ресурсами приложения и контейнера

В рамках сравнения с PHP, сервлет не имеет встроенного языка шаблонов. И прямой аналог этомы - JSP, которые компилируются перед исполнением в тот же сервлет.

2) Сервлет - строительный кирпичик для контейнеров web-приложений.
Другими словами, есть контейнер (web) приложений, который реализует жизненный цикл сервлетов и фактически является web-сервером, в котором и живут эти web-приложения, обмениваются ресурсами и их используют.

3) Напрямую на сервлетах сейчас достаточно редко пишут, хотя по быстрому набросать websocket очень даже можно. Обычно используют фреймфорки типа spring, javalin, jooby, vaadin, wicklets, tapesty и т.д. (их сотни под разные нужды и задачи!). Все эти фреймворки (библиотеки и обертки) делают удобным работу с API сервлетов, языками шаблонов (их тоже - десятки) и взаимедействием с ресурсами.

4) Кроме сервлетов, есть еще куча всего, что можно сделать без создания сервлета, но получить полноценный web (хотя внутри это все будет обернуто в сервлет скорее всего).

5) кроме сервлетов появились и новые фреймворки, расчитанные на микросервисы, и не обеспечивающие спецификацию сервлетов, например jooby, javalin и т.д.
Вот код простого, боевого, приложения, в котором уже есть web-сервер, держащий нагрузку в несколько тысяч RPS.
import io.javalin.Javalin;

public class HelloWorld {
    public static void main(String[] args) {
        Javalin app = Javalin.create().start(7000);
        app.get("/", ctx -> ctx.result("Hello World"));
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы