Appel de la méthode de destruction du servlet
Que par le lien http://www.xyzws.com/Servletfaq/when-is-destroy-of-servlets-called/20l'une des raisons de l'appel de méthode destroy est lorsque la servlet n'a pas obtenu une demande dans un temps long.
Je pensais il pourrait y avoir quelques pages qui ne sont pas appelés pour un long moment. Donc, est-ce à dire détruire sera appelé et ils seront plus utilisés?
En fait, j'ai posé cette question en interview et il m'a dit que détruire méthode sera appelée uniquement lorsque le serveur est arrêté.
Reconnaissant de toute aide sur ce.
source d'informationauteur Anand
Vous devez vous connecter pour publier un commentaire.
Autant que je sache,
En java servlet,
destroy()
n'est pas censé être appelé par le programmeur. Mais, si elle est invoquée, il est exécuté. La question implicite est, la servlet se détruit? Non, il ne le sera pas.destroy()
méthode n'est pas censé faire, et de ne pas détruire un servlet java.Le sens de
destroy()
en java servlet est, le contenu est exécuté juste avant que le conteneur décide de détruire la servlet. Mais si vous appelez ladestroy()
méthode vous-même, le contenu est exécuté et puis le processus se poursuit. Avec respectivement à cette question, ledestroy()
est exécuté, puis l'initialisation de la servlet est achevé.destroy()
méthode est appelée en premier, puis le Servlet est retiré du récipient, et puis finalement les ordures collectées.destroy()
méthode généralement contient du code pour libérer toutes les ressources comme la connexion JDBC qui ne seront pas nettoyés.À partir de la spécification (
The Servlet Interface -> Servlet Life Cycle -> End of Service
):La spécification se réfère à une instance de la servlet qui est en train d'être détruit.
Cela ne signifie pas que la servlet dont l'instance est détruite n'est jamais utilisé. C'est le seul exemple qui n'est pas utilisé comme il aurait été nettoyée. Lorsqu'une demande arrive pour que le servlet, le conteneur de créer une nouvelle instance de la servlet et effectue tout le cycle de vie des actions jusqu'à servir la demande, encore une fois.
Couple de cas :
Que par le Doc
C'est un de ces classiques spec vs la mise en œuvre de choses. Des conteneurs de Servlet comme Tomcat sont autorisés par le cahier des charges pour maintenir un pool de Servlet objets, la création et la destruction de la charge va vers le haut ou vers le bas. Dans ce type de configuration, détruire sera appelé lorsque l'instance n'est plus nécessaire. Il serait même légal pour créer une nouvelle instance pour chaque demande, en appelant init immédiatement avant le traitement de la demande et de détruire tout de suite après.
Cependant, dans la pratique, pratiquement chaque conteneur de Servlet maintient exactement une instance de chaque Servlet. Depuis les Servlets sont nécessaires pour être thread-safe c'est parfaitement ok. Dans ce scénario détruire n'est appelée que lorsque le contexte est à l'arrêt.
Je ne peux pas penser à de nombreux cas où vous voulez piscine Servlets, mais il est permis par la spécification.
Il dépend totalement de la mise en œuvre du conteneur de servlet vous utilisez. Si votre conteneur de servlet est très conservatrice pour l'économie des ressources, il peut détruire la servlet qui n'est pas en service pour une longue période de temps.
En page 22 de servlet spec 2.5, vous trouverez que, "Lorsque le conteneur de servlet détermine qu'une servlet doit être retiré du service, il appelle la méthode destroy de la Servlet interface pour permettre à la servlet pour libérer les ressources qu'il utilise, et sauvegarder l'état persistant. Par exemple, le conteneur peut le faire quand elle veut conserver les ressources de la mémoire, ou lorsqu'il est en cours d'arrêt."
Servlet.destroy()'s javadoc dit: "Appelée par le conteneur de servlet pour indiquer à une servlet servlet est mis hors service". Il ne précise pas dans quelle situation serait la cause d'une servlet pour être "hors service", c'est tout simplement un événement pour lequel vous pouvez réagir si vous en avez besoin. Par exemple, vous pourriez vouloir fermer les ressources que vous avez ouvert, ou persistent un certain état de stockage.
La raison la plus évidente est que le conteneur de servlet est en cours d'arrêt, mais un conteneur pourrait tout aussi bien décider qu'il est temps de décharger un servlet car il n'a pas été utilisé dans un mois et qui est tout simplement une consommation de ressources. Ce comportement est tout à fait à la mise en œuvre, et il n'est pas quelque chose que vous (en tant que servlet designer) doit se préoccuper.
Servlet méthode destroy est un rappel. Ce sont les fonctions appelées par le conteneur lorsqu'un événement particulier est sur le point d'arriver (dans ce cas servlet sur le point d'être détruit). Ainsi, le but est si vous voulez faire quelque chose (par exemple: nettoyage de la ressource) que vous pouvez faire en vertu de ce rappel.