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

277

Я прочитал много статей, чтобы понять Java сервлет, но мне это не удалось.

Не могли бы вы дать краткое введение в сервлеты Java (простым языком). Как то, что сервлет? Каковы преимущества? И все такое.

Я не могу понять разницу между языками программирования на стороне сервера (PHP, ASP) и сервлетами.

Hardik
источник
38
Наведите указатель мыши на servletsтег ниже ваш вопрос , пока черный ящик не выскочит. Нажмите на ссылку информации .
BalusC
1
Сервлеты Вы можете посмотреть на это. Я думаю, что это детали и достоверно.
Шохан

Ответы:

336

Сервлет - это просто класс, который отвечает на определенный тип сетевого запроса - чаще всего HTTP-запрос. В основном, сервлеты обычно используются для реализации веб-приложений, но существуют также различные платформы, которые работают поверх сервлетов (например, Struts), чтобы предоставить абстракцию более высокого уровня, чем уровень «вот HTTP-запрос, запись в этот HTTP-ответ», который сервлеты предоставлять.

Сервлеты запускаются в контейнере сервлетов, который обрабатывает сетевую сторону (например, анализ HTTP-запроса, обработка соединения и т. Д.). Одним из самых известных контейнеров сервлетов с открытым исходным кодом является Tomcat .

Джон Скит
источник
16
Сервлеты - это фрагменты кода Java, вызываемые веб-сервером внутри самого веб-сервера. Если вы хотите что-то похожее на PHP или ASP, вам нужны JSP (это особый вид сервлетов)
Thorbjørn Ravn Andersen
3
Спасибо за ответ, но все же я не могу получить реальное использование сервлетов, было бы лучше, если бы вы могли объяснить на примере, например, ситуацию, где мы можем использовать сервлеты. я не понимал использование сервлета, как то, что сервлет может делать, чего не могут делать другие языки программирования на стороне сервера.
Hardik
4
@ Хардик: дело не в том, что они могут сделать что-то, что нельзя сделать другим способом. Сервлеты - это обычная технология для работы на стороне сервера Java. Сервлеты не являются языком, как и ASPX. Обе платформы вы используете в сочетании с другим языком - обычно Java в случае сервлетов.
Джон Скит
7
@Hardik: Как я писал в своем посте, сервлеты - это классы, которые работают внутри контейнера сервлетов. Контейнер сервлетов может содержать несколько сервлетов одновременно.
Джон Скит
5
@ Хардик: Да, именно так. Сервлет может предоставить HTML для отображения формы, а также действовать в соответствии с представлением. Сервлеты также могут быть использованы для реализации веб-сервисов. Они могут использоваться для других протоколов, кроме HTTP, но в подавляющем большинстве случаев HTTP является наиболее распространенным транспортом, обрабатываемым сервлетами.
Джон Скит
102

Сервлет по своей сути является классом Java; который может обрабатывать HTTP-запросы. Как правило, о внутренних подробностях чтения HTTP-запроса и ответа по сети заботятся такие контейнеры, как Tomcat. Это сделано для того, чтобы, как разработчик на стороне сервера, вы могли сосредоточиться на том, что делать с HTTP-запросом и ответами, и не беспокоиться о работе с кодом, который имеет дело с сетью и т. Д. Контейнер позаботится о таких вещах, как завершение всего этого в HTTP-объект ответа и отправьте его клиенту (скажем, в браузер).

Теперь следующий логичный вопрос: кто решает, что должен делать контейнер? И ответ таков; По крайней мере, в мире Java руководствуется (заметьте, я не использовал слово контролируемое) спецификациями. Например, спецификации сервлета (см. Ресурс 2) определяют, что должен делать сервлет. Так что, если вы можете написать реализацию для спецификации, примите поздравления, что вы только что создали контейнер (Технически контейнеры, такие как Tomcat, также реализуют другие спецификации и делают сложные вещи, такие как пользовательские загрузчики классов и т. Д., Но вы поняли идею).

Предполагая, что у вас есть контейнер, ваши сервлеты теперь являются java-классами, чей жизненный цикл будет поддерживаться контейнером, но вы будете решать их реакцию на входящие HTTP-запросы. Вы делаете это, записывая, что вы хотите сделать в предопределенных методах, таких как init (), doGet (), doPost () и т. Д. Посмотрите на Ресурс 3.

Вот веселое упражнение для вас. Создайте простой сервлет, как в Resource 3, и напишите несколько операторов System.out.println () в его методе конструктора (да, вы можете иметь конструктор сервлета), методы init (), doGet (), doPost () и выполните сервлет в кот. Смотрите журналы консоли и журналы Tomcat.

Надеюсь, это поможет, счастливого обучения.

Ресурсы

  1. Посмотрите , как HTTP сервлет выглядит здесь (например , Tomcat).

  2. Сервлет Технические характеристики .

  3. Простой пример сервлета .

  4. Начните читать книгу онлайн / PDF Она также предоставляет вам возможность скачать всю книгу целиком. Может быть, это поможет. если вы только запускаете сервлеты, возможно, стоит прочитать материал вместе с API сервлетов. это более медленный процесс обучения, но он намного полезнее для прояснения основ.

Ayusman
источник
12
Ответы, содержащие только ссылки, не рекомендуется использовать при переполнении стека, поскольку ресурсы, на которые они ссылаются, могут стать недоступными в будущем или могут измениться. Рассмотрите возможность краткого изложения релевантного содержания ссылки в вашем ответе, чтобы улучшить ее.
6
@Cupcake ценит вашу конструктивную обратную связь. Я попытался добавить немного мяса к ответу. Спасибо за улучшение сообщества.
Ayusman
34

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

Для многих это совершенно очевидно, но для кого-то, привыкшего писать приложения, которые просто запускаются, а затем заканчиваются: сервлет проводит большую часть своего времени, бездействуя, ничего не делая ... в ожидании, чтобы что-то отправить, запрос и затем отвечая на него , По этой причине у сервлета есть жизнь: он инициализируется, а затем ждет, отвечая на все, что ему бросают, а затем уничтожается. Это подразумевает, что он должен быть создан (и позже уничтожен) чем-то другим (каркасом), что он работает в своем собственном потоке или процессе, и что он ничего не делает, если его не попросить. А также, что тем или иным способом должен быть реализован механизм, посредством которого этот «объект» может «прослушивать» запросы.

Я предлагаю, чтобы чтение о потоках, процессах и сокетах пролило некоторый свет на это: оно сильно отличается от того, как функционирует базовое приложение "hello world".

Можно утверждать, что термин «сервер» или «сервлет» является излишним. Более рациональное и простое имя может быть «респондент». Причина выбора термина «сервер» является исторической: первые такие соглашения были «файловыми серверами», когда несколько пользовательских / клиентских терминалов запрашивали определенный файл с центрального компьютера, и этот файл затем «обслуживался». «Как книга или тарелка с рыбой и чипсами.

Майк Грызун
источник
1
Неправильно ли рассматривать сервлет как аналог «контроллера» в стандартной среде MVC?
user2490003
Лично я не вижу, как справляется эта аналогия. Я также склонен думать, что люди, которые считают мой ответ полезным (помогает прояснить для них вопросы), могут быть смущены вашим предложением.
Майк Грызун
Я думаю, что этот ответ полезен. Но я также задавался вопросом (независимо от этого Ответа и до прочтения) того же вопроса, который @ user2490003 задал выше. В чем разница между сервлетом и контроллером MVC-фреймворка? Почему аналогия по user2490003 не держится?
cellepo
Схема MVC является более сложной и все же менее сложной. Это не обязательно связано с ожиданием ввода. Определяя основную идею установки сервера-клиента, именно эту простоту я хочу подчеркнуть. Посмотрите на базовую диаграмму MVC здесь: en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller . В простой настройке клиент-сервер пользователь взаимодействует только с клиентом, а не с двумя объектами, а именно с представлением и контроллером. С MVC также может быть несколько представлений, несколько контроллеров и несколько моделей. И ожидание ввода не (обязательно) участвует.
Майк Грызун
В дополнение к вышесказанному, сервер может обслуживать несколько пользователей, в то время как для установки MVC такого требования нет. Установка MVC относится к миру классических вычислений, то есть автономных приложений. С помощью серверов мы делаем наш первый шаг во вселенную интерактивных вычислений. Дело не в том, что аналогия ошибочна на 100%, ошибочнее на 90%, и, кроме того, любая аналогия просто бесполезна, если она на самом деле никому и ничему не помогает вообще. Система сервер-клиент настолько проста, что никому не нужны какие-либо аналогии для понимания.
Майк Грызун
10

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

  • Сервлет - это просто класс, который отвечает на определенный тип сетевого запроса - чаще всего HTTP-запрос.
  • В основном, сервлеты обычно используются для реализации веб-приложений, но существуют также различные платформы, которые работают поверх сервлетов (например, Struts), чтобы предоставить абстракцию более высокого уровня, чем уровень «вот HTTP-запрос, запись в этот HTTP-ответ», который сервлеты предоставлять.
  • Сервлеты запускаются в контейнере сервлетов, который обрабатывает сетевую сторону (например, анализ HTTP-запроса, обработка соединения и т. Д.). Одним из самых известных контейнеров сервлетов с открытым исходным кодом является Tomcat.

  • В парадигме запрос / ответ веб-сервер может обслуживать клиенту только статические страницы

  • Чтобы обслуживать динамические страницы, нам нужны сервлеты.
  • Сервлет - это не что иное, как программа на Java
  • Эта Java-программа не имеет основного метода. У него есть только несколько методов обратного вызова.
  • Как веб-сервер взаимодействует с сервлетом? Через контейнер или сервлетный двигатель.
  • Сервлет живет и умирает в веб-контейнере.
  • Веб-контейнер отвечает за вызов методов в сервлетах. Он знает, какие методы обратного вызова имеет сервлет.

Поток запроса

  • Клиент отправляет HTTP-запрос на веб-сервер
  • Веб-сервер перенаправляет этот HTTP-запрос в веб-контейнер.
  • Поскольку сервлет не может понять HTTP, это Java-программа, он понимает только объекты, поэтому веб-контейнер преобразует этот запрос в действительный объект запроса.
  • Веб-контейнер раскручивает поток для каждого запроса
  • Вся бизнес-логика идет внутри методов обратного вызова doGet () или doPost () внутри сервлетов
  • Сервлет создает объект ответа Java и отправляет его в контейнер. Он преобразует это в ответ HTTP снова, чтобы отправить его клиенту

Как Контейнер узнает, какой клиент сервлета запросил?

  • Там есть файл с именем web.xml
  • Это главный файл для веб-контейнера
  • У вас есть информация о сервлете в этом файле

    • сервлеты
      • Servlet имя
      • Servlet-класс
    • servlet-mappings - путь, такой как / Login или / Notifications отображается здесь в
      • Servlet имя
      • URL-шаблон
    • и так далее
  • Каждый сервлет в веб-приложении должен иметь запись в этом файле

  • Так что этот поиск происходит как шаблон URL -> имя сервлета -> класс сервлета

Как «установить» сервлеты? * Хорошо, объекты сервлета унаследованы от библиотеки javax.servlet. Tomcat и Spring могут быть использованы для использования этих объектов в соответствии с вариантом использования.

Ref- Смотрите это в 1.5x- https://www.youtube.com/watch?v=tkFRGdUgCsE . Это имеет потрясающее объяснение.

Sankalp
источник
1
Ссылка на решение приветствуется, но, пожалуйста, убедитесь, что ваш ответ полезен без нее: добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели представление о том, что это такое и почему, а затем процитируйте наиболее релевантную часть страницы, которую вы Повторная ссылка на случай, если целевая страница недоступна. Ответы, которые немного больше, чем ссылка, могут быть удалены.
Могсдад
1
Обратите внимание, что мир движется дальше. В 2020 году мы используем аннотации в коде вместо файла конфигурации на основе центральной строки в XML.
Торбьерн Равн Андерсен
5

Сервлет - это серверная технология, которая используется для создания динамической веб-страницы в веб-приложении. На самом деле сервлет это API, который состоит из группы классов и интерфейсов, который имеет некоторые функциональные возможности. Когда мы используем Servlet API, мы можем использовать предопределенную функциональность классов и интерфейсов сервлета.

Жизненный цикл сервлета:

Веб-контейнер поддерживает жизненный цикл экземпляра сервлета.

1 Загружен класс сервлетов

2 Экземпляр сервлета создан

3 Метод init () вызывается

4 метод service () вызван

5 вызывается метод destroy ()

Когда запрос выполняется клиентом (браузером), веб-контейнер проверяет, работает ли сервлет или нет, если да, тогда он вызывает метод service () и дает ответ браузеру.

Когда сервлет не запущен, веб-контейнер выполняет следующие действия:

1. загрузчик классов загрузить класс сервлета

2. Создает сервлет

3. Инициализирует сервлет

4. вызвать метод service ()

после обработки запроса веб-контейнер ожидает определенное время, в это время, если приходит запрос, он вызывает только метод service (), в противном случае он вызывает метод destroy ().

Навнат Адсул
источник
5

Если вы новичок, я думаю, что этот урок может дать основную идею о том, что такое сервлет ...

Ниже приведены некоторые ценные моменты по данной ссылке.

Технология сервлетов используется для создания веб-приложения, которое находится на стороне сервера и генерирует динамическую веб-страницу.

Сервлет может быть описан многими способами, в зависимости от контекста.

  • Сервлет - это технология, то есть используемая для создания веб-приложения.
  • Сервлет - это API, который предоставляет множество интерфейсов и классов, включая документацию.
  • Сервлет - это интерфейс, который должен быть реализован для создания любого сервлета.
  • Сервлет - это класс, расширяющий возможности серверов и отвечающий на входящий запрос. Он может отвечать на любые запросы.
  • Сервлет - это веб-компонент, который развертывается на сервере для создания динамической веб-страницы. Ссылка: здесь .
Сандун Мадола
источник
1
Это действительно хороший учебник, который объясняет основные понятия
Нихил Саху,
3

Сервлеты Java - это программные модули Java на стороне сервера, которые обрабатывают и отвечают требованиям клиентов и актуализируют интерфейс сервлета. Это помогает улучшить полезность веб-сервера с незначительными издержками, обслуживанием и поддержкой.

Сервлет выступает в качестве посредника между клиентом и сервером. Поскольку сервлет-модули продолжают работать на сервере, они могут получать и реагировать на требования клиента. Объекты спроса и реакции сервлета предлагают полезный метод для обработки HTTP-запросов и отправки информации о контенте обратно клиенту.

Поскольку сервлет координируется с диалектом Java, он дополнительно обладает всеми основными характеристиками Java, например, высокой подвижностью, автономностью этапа, безопасностью и доступностью базы данных Java.

Пурна Сенани Гамаж
источник
2

Servlet - это Java-класс для ответа на HTTP-запрос и создания HTTP-ответа ...... когда мы создаем страницу с использованием HTML, то это будет статическая страница, поэтому для ее динамического использования мы используем SERVLET {простыми словами можно понять} Чтобы использовать сервлет, преодоленный JSP, он использует код и тег HTML как сам по себе ..

Рупам
источник
2

Сервлеты - это классы Java, которые запускают определенные функции, когда пользователь веб-сайта запрашивает URL-адрес с сервера. Эти функции могут выполнять такие задачи, как сохранение данных в базе данных, выполнение логики и возврат информации (например, данных JSON), необходимой для загрузки страницы.

Большинство программ на Java используют main()метод, который выполняет код при запуске программы. Java-сервлеты содержат doGet()и doPost()методы, которые действуют так же, как main()метод. Эти функции выполняются, когда пользователь отправляет GETили POSTзапрашивает URL-адрес, сопоставленный с этим сервлетом. Таким образом, пользователь может загрузить страницу для GETзапроса или сохранить данные из POSTзапроса.

Когда пользователь отправляет запрос GETили POST, сервер читает @WebServletв верхней части каждого класса сервлета в вашем каталоге, чтобы решить, какой класс сервлета вызывать. Например, допустим, у вас есть класс ChatBox, и он находится вверху:

@WebServlet("/chat")
public class ChatBox extends HttpServlet {

Когда пользователь запрашивает /chatURL, ваш ChatBoxкласс будет выполнен.

Кундус
источник
0

Как описано в этой статье , сервлет - это стандартизированный способ расширения сервера Java и доступа к его возможностям.

Каждый сервлет может рассматриваться как крошечный сервер (отсюда и имя), который получает доступ к запросу и ответу, смоделированному в коде Java, наряду с другими данными контекста, такими как Session.

Имея это в виду, Java-код сервлета может взаимодействовать с тем, что ему нужно для визуализации ответа, включая передачу на страницу JSP для генерации представления HTML.

mtyson
источник
-1

Я думаю, что сервлет - это, по сути, класс Java, который действует как посредник между HTTP-запросом и HTTP-ответом. Сервлет также используется для создания динамической веб-страницы. Предположим, например, что если вы хотите перенаправить на другую веб-страницу на сервере, вам нужно использовать сервлеты. Еще одним важным моментом является то, что сервлет может работать как на локальном хосте, так и в веб-браузере.

Рупам
источник
-2

Вы только что получили ответ на обычный сервлет. Тем не менее, я хочу поделиться с вами кое-чем о Servlet 3.0

Кто первый сервлет?

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

Servlet 3.0 - это обновление существующей спецификации Servlet 2.5. Для Servlet 3.0 требуется API-интерфейс Java Platform, Enterprise Edition 6. Servlet 3.0 сфокусирован на расширяемости и подключаемости веб-инфраструктуры. Servlet 3.0 предоставит вам некоторые расширения, такие как простота разработки (EoD), подключаемость, поддержка Async и улучшения безопасности.

Легкость развития

Вы можете объявить сервлеты, фильтры, прослушиватели, параметры инициализации и почти все можно настроить с помощью аннотаций

Pluggability

Вы можете создать подпроект или модуль с помощью web-фрагмент.xml. Это означает, что он позволяет самостоятельно реализовывать подключаемые функциональные требования.

Асинхронная поддержка

Servlet 3.0 предоставляет возможность асинхронной обработки, например: ожидание доступности ресурса, генерация ответа асинхронно.

Улучшения безопасности

Поддержка методов безопасности сервлетов аутентификации, входа и выхода

Я нашел это из Руководства по сервлету Java

Дэвид Фам
источник