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


277

Я прочитав багато статей, щоб зрозуміти java servlet, але мені це не вдалося.

Чи можете ви, будь ласка, коротко ознайомитись з сервалями java (простою мовою). Як, що таке сервлет? Що таке аванси? І все це.

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


38
Наведіть курсор на servletsтег під своїм запитанням, поки не з’явиться чорне поле. Клацніть на ньому інформаційне посилання.
BalusC

1
Сервлети Ви можете подивитися на це. Я думаю, що це деталі та автентично.
шохан

Відповіді:


336

Сервлет - це просто клас, який відповідає на певний тип мережевого запиту - найчастіше на HTTP-запит. В основному сервлети зазвичай використовуються для реалізації веб-додатків - але також існують різні рамки, які працюють над сервлетами (наприклад, Struts) для надання абстракції вищого рівня, ніж "ось запит HTTP, записуйте до цього відповіді HTTP", який сервлети забезпечити.

Сервлети працюють у контейнері сервлетів, який обробляє мережеву сторону (наприклад, аналіз HTTP-запиту, обробка з'єднання тощо). Один з найвідоміших контейнерів сервлетів з відкритим кодом - Tomcat .


16
Сервлети - це фрагменти коду Java, що викликається веб-сервером всередині самого веб-сервера. Якщо ви хочете щось схоже на PHP або ASP, вам потрібні JSP (які є особливим видом сервлетів)
Thorbjørn Ravn Andersen

3
Спасибі за відповідь, але все-таки я не можу отримати реальне використання сервлетів, було б краще, якщо ви можете пояснити на прикладі, як sitution, де ми можемо використовувати сервлетів. Я не розумів використання сервлета, як, наприклад, те, що сервлет може зробити, що інші мови програмування на стороні сервера не можуть.
хардік

4
@Hardik: Справа не в тому, що вони можуть зробити все, що не можна зробити іншим способом. Сервлети - це просто поширена технологія для роботи Java на стороні сервера. Сервлети не є мовою - і це не ASPX. Обидві - це платформи, які ви використовуєте разом з іншою мовою - зазвичай Java у випадку сервлетів.
Джон Скіт

7
@Hardik: Як я писав у своєму дописі, сервлети - це класи, які працюють всередині контейнера сервлетів. Контейнер сервлетів може розміщувати кілька сервлетів одночасно.
Джон Скіт

5
@Hardik: Так, саме так. Сервлет може надати HTML для відображення форми, а також діяти при поданні. Сервлети також можна використовувати для реалізації веб-служб. Вони можуть бути використані для інших протоколів, окрім HTTP, але HTTP є переважно найбільш поширеним транспортом, який обробляється сервлетами.
Джон Скіт

102

Сервлет по своїй суті - клас java; який може обробляти HTTP-запити. Зазвичай про внутрішню ніткову щільність читання HTTP-запиту та відповіді по дроту дбають контейнери типу Tomcat. Це робиться для того, щоб як розробник сервера ви могли зосередитись на тому, що робити з HTTP-запитом та відповідями, а не перейматися питаннями коду, який стосується мереж тощо. Контейнер буде піклуватися про такі речі, як упаковка всієї справи Об'єкт відповіді HTTP та надішліть його клієнту (скажімо, у браузері).

Наступне логічне запитання - хто вирішує, що повинен робити контейнер? І відповідь така; Принаймні, у світі Java Це керується (зверніть увагу, я не використовував кероване слово) специфікаціями. Наприклад, специфікації сервлетів (див. Ресурс 2) диктує, що сервлет повинен вміти робити. Тож, якщо ви можете написати реалізацію для специфікації, вітаємо, що ви тільки що створили контейнер (технічно такі контейнери, як Tomcat, також реалізують інші технічні характеристики та роблять складні речі, як завантажувачі спеціального класу тощо, але ви отримуєте ідею).

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

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

Сподіваюсь, це допомагає, щасливе навчання.

Ресурси

  1. Подивіться, як виглядає тут сервер HTTP (приклад Tomcat).

  2. Специфікація сервлетів .

  3. Простий приклад сервлетів .

  4. Почніть читати книгу в Інтернеті / PDF Це також дає змогу завантажити всю книгу. Може, це допоможе. якщо ви тільки починаєте сервлети, це гарна ідея прочитати матеріал разом із API сервлетів. це більш повільний процес навчання, але набагато корисніший для зрозуміння основ.


12
Відповіді, що мають лише посилання, не дозволяють переповнювати стек, оскільки ресурси, на які вони посилаються, можуть стати недоступними в майбутньому або можуть змінитися. Розгляньте підсумок відповідного змісту посилання у своїй відповіді, щоб покращити його.

6
@Cupcake оцінює ваші конструктивні відгуки. Я спробував додати трохи відповіді у відповідь. Дякуємо, що зробили громаду кращою.
Аюсман

34

На додаток до вищезазначеного, і лише щоб вказати на кровотечу очевидним ...

Для багатьох це занадто очевидно, але хтось звик писати програми, які просто запускаються та закінчуються: сервлет проводить більшу частину свого часу, бовтаючись, не роблячи нічого ... чекаючи, коли щось надішле, запит, а потім відповідь на нього . З цієї причини сервлет має все життя: він підживлюється, а потім чекає, реагуючи на все, що на нього кинуто, а потім знищується. З чого випливає, що його потрібно створити (а пізніше знищити) чимось іншим (рамкою), що він працює у власній нитці чи процесі, і що він нічого не робить, якщо не вимагає. А також, що якимось іншим способом має бути запроваджений механізм, згідно з яким ця "сутність" може "слухати" запити.

Я пропоную, що читання про потоки, процеси та сокети накладе трохи світла на це: це зовсім інше, як функціонує основне додаток "привіт світ".

Можна стверджувати, що термін "сервер" або "сервлет" є дещо зайвим. Більш раціональне і просте ім'я може бути "відповідь". Причина вибору терміна "сервер" є історичною: першими такими домовленостями були "файлові сервери", де декілька терміналів користувача / клієнта запитували певний файл з центральної машини, і цей файл буде "поданий" "як книга чи тарілка з рибою та чіпсами.


1
Чи неправильно розглядати сервлет як аналог "контролеру" у стандартній рамці MVC?
user2490003

Особисто я не бачу, як це стосується аналогії. Я також схиляюсь до думки, що люди, які вважають, що моя відповідь є корисною (допомагає з’ясувати для них речі), цілком можуть збентежити вашу пропозицію.
мійський гризун

Я думаю, що ця відповідь корисна. Але я також задався питанням (незалежно від цього відповіді та перед його читанням) тим самим питанням, яке @ user2490003 ставив вище. Яка різниця між сервлетом та контролером MVC-фреймворку? Чому аналогія від користувача2490003 не виконується?
cellepo

Композиція MVC є більш складною та ще менш складною. Це не обов'язково включає очікування введення. Визначаючи основну ідею налаштування сервера-клієнта, саме таку простоту я хочу наголосити. Подивіться основну діаграму MVC тут: en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93контролер . У простих налаштуваннях клієнт-сервер користувач взаємодіє лише з клієнтом, а не з двома об'єктами, а саме поданням та контролером. З MVC також може бути кілька переглядів, кілька контролерів і кілька моделей. І очікування введення не (обов'язково) задіяне.
гризун

На додаток до вищезазначеного, сервер може обслуговувати декількох користувачів, тоді як такої вимоги немає у налаштуваннях MVC. Установка MVC належить до світу класичних обчислень, тобто автономних додатків. За допомогою серверів ми робимо перший крок у всесвіт інтерактивних обчислень. Справа не в тому, що аналогія стовідсотково помиляється, більше 90% помиляється, і перш за все, що будь-яка аналогія просто не приносить користі, якщо вона насправді нікому не допомагає, ані в чомусь. Конструкци клієнт-сервер настільки гранично простий , як ідея , ніхто потреби аналогій, будь-якого роду взагалі , щоб зрозуміти.
гризун

10

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

  • Сервлет - це просто клас, який відповідає на певний тип мережевого запиту - найчастіше на HTTP-запит.
  • В основному сервлети зазвичай використовуються для реалізації веб-додатків, але також існують різні рамки, які працюють над сервлетами (наприклад, Struts), щоб надати абстрагування більш високого рівня, ніж "ось запит HTTP, запишіть до цього відповіді HTTP", який сервлети забезпечити.
  • Сервлети працюють у контейнері сервлетів, який обробляє мережеву сторону (наприклад, аналіз HTTP-запиту, обробка з'єднання тощо). Один з найвідоміших контейнерів сервлетів з відкритим кодом - Tomcat.

  • У парадигмі запит / відповідь веб-сервер може обслуговувати клієнта лише статичні сторінки

  • Для обслуговування динамічних сторінок нам потрібні сервлети.
  • Сервлет - це не що інше, як програма Java
  • У цій програмі Java немає основного методу. У ньому є лише деякі методи зворотного виклику.
  • Як веб-сервер спілкується з сервлетом? Через контейнер або сервлет.
  • Сервлет живе і вмирає всередині веб-контейнера.
  • Веб-контейнер відповідає за виклики методів у сервлетах. Він знає, якими методами зворотного виклику є сервлет.

Потік запиту

  • Клієнт відправляє HTTP-запит на веб-сервер
  • Веб-сервер пересилає цей HTTP-запит у веб-контейнер.
  • Оскільки Servlet не може зрозуміти HTTP, його програму Java, він розуміє лише об'єкти, тому веб-контейнер перетворює цей запит у дійсний об'єкт запиту
  • Веб-контейнер обертає нитку для кожного запиту
  • Вся бізнес-логіка йде всередині методів зворотного виклику doGet () або doPost () всередині сервлетів
  • Сервлет будує об’єкт відповіді Java і відправляє його в контейнер. Він перетворює це у відповідь HTTP знову, щоб надіслати його клієнту

Як контейнер знає, до якого клієнта Servlet звернувся?

  • Є файл під назвою web.xml
  • Це головний файл веб-контейнера
  • Ви маєте інформацію про сервлет у цьому файлі-

    • серветки
      • Сервлет-ім'я
      • Сервлет-клас
    • сервлет-відображення - шлях на зразок / Вхід або / Повідомлення відображений тут у
      • Сервлет-ім'я
      • URL-шаблон
    • і так далі
  • Кожен сервлет у веб-додатку повинен мати запис у цей файл

  • Отже, цей пошук відбувається як-URL-шаблон -> ім'я сервлета -> клас сервлетів

Як "встановити" сервлетів? * Ну, сервлет-об'єкти успадковуються від бібліотеки- javax.servlet. *. Tomcat і Spring можна використовувати для використання цих об'єктів, щоб відповідати випадку використання.

Подивіться- дивіться це на 1,5x- https://www.youtube.com/watch?v=tkFRGdUgCsE . Це має дивовижне пояснення.


1
Посилання на рішення вітається, але будь ласка, переконайтеся, що ваша відповідь корисна без неї: додайте контекст навколо посилання, щоб ваші колеги користувачі мали уявлення про те, що це таке і чому воно є, а потім цитуйте найбільш релевантну частину сторінки, яку ви " повторне посилання на випадок, якщо цільова сторінка недоступна. Відповіді, які є трохи більше ніж посилання, можуть бути видалені.
Могсдад

1
Зауважте, що світ пішов далі. У 2020 році ми використовуємо анотації до коду замість файлу конфігурацій на основі центральних рядків у XML.
Thorbjørn Ravn Andersen

5

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

Життєвий цикл сервлета:

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

1. Клас сервлетів завантажений

2. Створено екземпляр сервлета

3. викликається метод init ()

4. виклику методу service ()

5. знищити () метод, на який викликається

Коли піднімається запит клієнтом (браузером), то веб-контейнер перевіряє, чи працює сервлет чи ні, якщо так, то він викликає метод service () і дає відповідь браузеру ..

Коли сервлет не працює, веб-контейнер виконайте наступні кроки ..

1. завантажувач класів завантажує сервлет-клас

2. Моментальний сервлет

3. Ініціалізує сервлет

4.закликати метод service ()

після обслуговування веб-контейнера запиту чекайте певного часу, у цей час, якщо запит надходить, тоді він викликає лише метод service (), інакше він викликає метод kill ().


5

Якщо ви початківець, я думаю, що цей підручник може дати основне уявлення про те, що таке Сервлет ...

Деякі цінні моменти наведені нижче із наведеного посилання.

Технологія сервлетів використовується для створення веб-додатків, розташованих на стороні сервера та генерування динамічної веб-сторінки.

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

  • Servlet - це технологія, тобто використовується для створення веб-додатків.
  • Servlet - це API, який пропонує безліч інтерфейсів та класів, включаючи документацію.
  • Servlet - це інтерфейс, який повинен бути реалізований для створення будь-якого сервлета.
  • Servlet - це клас, який розширює можливості серверів і відповідає на вхідний запит. Він може відповідати на будь-який тип запитів.
  • Servlet - це веб-компонент, який розгорнуто на сервері для створення динамічної веб-сторінки. Посилання: Тут .

1
Це дійсно хороший підручник, який пояснює поняття з основного
Nikhil Sahu

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, а також інших контекстних даних, таких як Сесія.

Маючи такі під рукою, код Java сервлета може взаємодіяти з усім необхідним для надання відповіді, включаючи передачу на сторінку JSP для створення перегляду HTML.


-1

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


-2

Ви щойно отримали відповідь за звичайний сервлет. Однак я хочу поділитися з вами про щось про Servlet 3.0

Що спочатку Сервлет?

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

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

Простота розвитку

Ви можете оголосити сервлетів, фільтрів, слухачів, параметри Init і майже все можна налаштувати за допомогою анотацій

Підключеність

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

Асинхронна підтримка

Servlet 3.0 надає можливість асинхронної обробки, наприклад: Очікування доступу ресурсу, генерування відповіді асинхронно.

Покращення безпеки

Підтримка методів захисту сервілетів аутентифікації, входу та виходу

Я знайшов це з навчального посібника Java Servlet

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.