Je cherchais la différence exacte entre javax.servlet.http.HttpServlet
, javax.servlet.GenericServlet
et javax.Servlet
incapable de le trouver
"Différence Exacte" signifie
javax.servlet.GenericServlet
"Différence exacte" signifie quoi? L'API répertorie les différences exactes.
Servlet
est une interface définissant ce qu'un servlet doit implémenter.
GenericServlet
est simplement cela, un servlet générique, indépendant du protocole.
HttpServlet
est une servlet liée spécifiquement au protocole HTTP.
Est-ce que vous demandez quand vous voulez {utiliser} _ ceux-là?
En général, vous étendriez HttpServlet
pour implémenter la couche Web d'une application.
Vous pouvez implémenter Servlet
si vous écrivez votre propre conteneur ou si vous manipulez tout vous-même. Vous pouvez étendre GenericServlet
pour gérer un protocole différent, mais ce n’est peut-être pas le cas.
javax.servlet
Servlet est une technologie Web côté serveur. Comme son nom l'indique, il répond à une demande du client et reçoit une réponse du serveur. Vous devez implémenter javax.Servlet (Interface) pour gérer un travail de servlet.
javax.servlet.GenericServlet
Signature:
public abstract class GenericServlet extends Java.lang.Object implements Servlet, ServletConfig, Java.io.Serializable
javax.servlet.http.HttpServlet
Signature:
public abstract class HttpServlet extends GenericServlet implements Java.io.Serializable
javax.servlet.Servlet est une interface, elle définit des méthodes pour toutes les implémentations - c'est ce que font habituellement les interfaces.
javax.servlet.GenericServlet est indépendant du protocole. C'est abstrait, donc il ne faut pas l'instancier directement. C'est une classe utilisable à étendre si vous devez un jour écrire un servlet pour un protocole autre que HTTP.
javax.servlet.http.HttpServlet est une classe abstraite à étendre si vous souhaitez communiquer via le protocole HTTP. Très probablement, vous ne devez vous soucier que de celui-ci.
Des informations plus précises que vous pouvez trouver derrière les liens.
-> Une caractéristique commune est que ces deux classes sont des classes abstraites.
-> GenericServlet est une super classe de la classe HttpServlet.
-> La principale différence est que HttpServlet est dépendant du protocole alors que GenericServlet est indépendant du protocole. Donc, GenericServlet peut gérer tous les types de protocoles, mais HttpServlet ne gère que les protocoles spécifiques à HTTP.
-> GenericServlet appartient au package javax.servlet. HttpServlet appartient au package javax.servlet.http
-> GenericServlet est une classe abstraite qui étend Object et implémente les interfaces Servlet, ServletConfig et Java.io.Serializable. HttpServlet est une classe abstraite qui étend GenericServlet et implémente l'interface Java.io.Serializable.
-> GenericServlet prend en charge que la méthode service () ne contient pas les méthodes doGet () et doPost (). Le support HttpServlet prend également en charge les méthodes doGet (), doPost (), doHead () (HTTP 1.0), ainsi que doPut (), doOptions (), doDelete (), doTrace () (HTTP 1.1).
Servlet: -
GenericServlet: -
HttpServlet: -
HttpServlet
est spécifique au protocole HTTP et fournit donc des méthodes pour les verbes HTTP: doGet
, doPost
, etc., ainsi qu'une version de la méthode générique service
qui prend des objets de requête et de réponse spécifiques à HTTP. C'est un type spécial de Servlet
qui est en fait une interface plutôt minimale.
GenericServlet
est l'implémentation de base de l'interface Servlet
de base, indépendante du protocole. Vous trouverez souvent des implémentations de base similaires d'interfaces dans une API; dans ce cas, GenericServlet
ajoute un peu de fonctionnalité à l'API Servlet
: getServletName
, getServletInfo
et aux méthodes d'intercommunication pour les paramètres init du servlet. HttpServlet
profite de ces ajouts en étendant GenericServlet
.
Généralement, tout le monde utilisant cette API utilise HttpServlet
pour implémenter les services Web HTTP, mais vous pouvez également étendre ou utiliser GenericServlet
pour implémenter la fonctionnalité serveur/service à l'aide d'un protocole personnalisé ou d'un autre protocole existant, par exemple FTP.
Servlet est une interface qui contient cinq méthodes abstraites. Afin d'utiliser servlet, nous devons fournir une implémentation pour toutes ces cinq méthodes, ce qui est un casse-tête. Afin d'éviter cette complexité, nous avons GenericServlet et HttpServlet pour le niveau suivant.
GenericServlet est indépendant du protocole, cela signifie qu'il peut accepter n'importe quelle demande de protocole . GenericServlet peut transférer et inclure une demande, mais nous ne pouvons pas rediriger la demande . La gestion de session avec des cookies et HttpSession n'est pas possible dans GenericServlet . Dans GenericServlet, il n'est pas possible de définir une logique distincte pour les requêtes get et post.
HttpServlet dépend du protocole. cela signifie qu’elle accepte uniquement les demandes de protocole HTTP . HttpServlet peut transférer, inclure et rediriger une demande . La gestion de session avec les cookies et HttpSession est possible dans HttpServlet . Dans HttpServlet, il est possible de définir une logique séparée pour obtenir et poster la demande.
-> GenericServlet
peut traiter plusieurs demandes de clients à partir d'un seul formulaire. Alors que HttpServlet
peut traiter plusieurs clients demandant à partir de plusieurs formulaires HTML
.
-> GenericServlet
est sans état et HttpServlet
est avec état.
Toutes les classes, interfaces et méthodes présentes dans le package javax.servlet
sont des protocoles indépendants (génériques pour tous les protocoles).
En revanche, toutes les classes, interfaces et méthodes présentes dans le package javax.servlet.http
sont dépendantes du protocole dépendantes (spécifiques au protocole HTTP).