Я искал точную разницу между javax.servlet.http.HttpServlet
, javax.servlet.GenericServlet
и javax.Servlet
не могут найти этого.
"Точная разница" означает
- Использование
- Причина существования
javax.servlet.GenericServlet
Я искал точную разницу между javax.servlet.http.HttpServlet
, javax.servlet.GenericServlet
и javax.Servlet
не могут найти этого.
"Точная разница" означает
javax.servlet.GenericServlet
"Точная разница" означает что? API перечисляет точные различия.
Servlet
- это интерфейс, определяющий, что должен выполнять сервлет.
GenericServlet
- это просто общий, не зависящий от протокола сервлет.
HttpServlet
- это сервлет, привязанный специально к протоколу HTTP.
Вы спрашиваете, когда будете использовать какие-либо из них?
В общем, вы должны расширить HttpServlet
для реализации веб-уровня приложения.
Вы можете реализовать Servlet
, если вы пишете свой собственный контейнер или обрабатываете все самостоятельно. Вы можете расширить GenericServlet
, чтобы обрабатывать другой протокол, но вы не можете.
javax.servlet
Сервлет - это веб-технология на стороне сервера. Как следует из названия, он обслуживает клиентский запрос и получает ответ от сервера. Вы должны реализовать javax.Servlet(Interface) для обработки работы сервлета.
javax.servlet.GenericServlet
Подпись:
public abstract class GenericServlet extends java.lang.Object implements Servlet, ServletConfig, java.io.Serializable
javax.servlet.http.HttpServlet
Подпись:
public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
javax.servlet.Servlet является интерфейсом, он определяет методы для всех реализаций - то, что обычно делают интерфейсы.
javax.servlet.GenericServlet является независимым от протокола. Он абстрактный, поэтому он не должен быть непосредственно создан. Это полезный класс для расширения, если вам когда-нибудь придется писать сервлет для протокола, отличного от HTTP.
javax.servlet.http.HttpServlet является абстрактным классом, который должен быть расширен, если вы хотите общаться по протоколу HTTP. Скорее всего, вам нужно только заботиться об этом.
Более точную информацию вы можете найти по ссылкам.
- > Общей особенностью является то, что оба этих класса являются абстрактными классами.
- > GenericServlet - суперкласс класса HttpServlet.
- > Основное отличие состоит в том, что HttpServlet зависит от протокола, тогда как GenericServlet не зависит от протокола. Таким образом, GenericServlet может обрабатывать все типы протоколов, но HttpServlet обрабатывает только HTTP-протоколы.
- > GenericServlet принадлежит к пакету javax.servlet. HttpServlet принадлежит пакет javax.servlet.http
- > GenericServlet - абстрактный класс, который расширяет Object и реализует интерфейсы Servlet, ServletConfig и java.io.Serializable. HttpServlet - абстрактный класс, который расширяет GenericServlet и реализует интерфейс java.io.Serializable.
- > GenericServlet поддерживает только метод service() не содержит методов doGet() и doPost(). HttpServlet поддерживает также методы doGet(), doPost(), doHead() (HTTP 1.0) плюс doPut(), doOptions(), doDelete(), doTrace() (HTTP 1.1).
Servlet: -
GenericServlet: -
HttpServlet: -
HttpServlet
специфичен для протокола HTTP и, следовательно, он предоставляет методы для HTTP-глаголов: doGet
, doPost
и т.д., а также версию универсального метода service
, который принимает HTTP-специфический запрос и ответ объекты. Это особый тип Servlet
, который на самом деле является довольно минимальным интерфейсом.
GenericServlet
- базовая, нейтральная по протоколу реализация интерфейса Servlet
. Часто вы найдете аналогичные базовые реализации интерфейсов в API; в этом случае GenericServlet
добавляет немного функциональности API Servlet
: getServletName
, getServletInfo
и сквозные методы для параметров инициализации сервлета. HttpServlet
выгоды от этих дополнений путем расширения GenericServlet
.
Как правило, все, кодирующие этот API, используют HttpServlet
для реализации веб-служб HTTP, но также можно расширить или использовать GenericServlet
для реализации функций сервера/службы с использованием настраиваемого протокола или другого существующего протокола, например FTP.
Servlet - это интерфейс, который содержит пять абстрактных методов, чтобы использовать сервлет, который мы должны предоставить для всех этих пяти методов, что является головной болью. Чтобы избежать этой сложности, у нас есть GenericServlet и HttpServlet для следующего уровня.
GenericServlet независим от протокола, это означает, что он может принимать любой запрос протокола. GenericServlet может перенаправлять и включать запрос, но мы не можем перенаправить запрос. Управление сеансом с помощью файлов cookie и HttpSession невозможно в GenericServlet. В GenericServlet невозможно определить отдельную логику для запроса get и post.
HttpServlet зависит от протокола. это означает, что он принимает только запрос HTTP-протокола. HttpServlet может перенаправлять и включать и перенаправлять запрос. Управление сеансом с помощью файлов cookie и HttpSession возможно в HttpServlet. В HttpServlet можно определить отдельную логику для запроса get и post.
- > GenericServlet
может обрабатывать несколько запросов клиентов из одной формы. Принимая во внимание, что HttpServlet
может обрабатывать несколько клиентов, запрашивающих несколько форм HTML
.
- > GenericServlet
не имеет статуса и HttpServlet
имеет значение Stateful.
Все классы, интерфейсы и методы, присутствующие в пакете javax.servlet
, независимы от протокола (общие для всех протоколов).
Напротив, все классы, интерфейсы и методы, присутствующие в пакете javax.servlet.http
, зависят от протокола (зависит от протокола HTTP)