2011-09-12 19 views
6

Duplicar posible:
Why does HttpServlet implement Serializable?¿Por qué HttpServlet en Java implementa serializable?

Esta pregunta repente se le ocurrió par de días atrás en una discusión interna y no parece encontrar una respuesta adecuada para el mismo. ¿Alguien puede señalarme en la dirección correcta?

Las preguntas:

1) ¿Por qué es HttpServlet en Java implements serializable? No parece encontrar ninguna razón lógica para lo mismo.

2) Al tratar de averiguar esto miré en la documentación del API y encontró alguna cosa interesante

public abstract class HttpServlet extends GenericServlet 
implements Serializable 

Ahora, lo que interesa es que GenericServlet se extiende también Serializable. Por lo tanto, tanto la clase principal como la secundaria implementan serializable. ¿No es eso un antipatrón?

+0

¿Alguna sugerencia sobre la segunda pregunta? –

Respuesta

7

1) ¿Por qué httpservlet en java implementa serializable? No parece que encuentre ninguna razón lógica para lo mismo.

Para apoyar el agrupamiento y la serialización entre máquinas virtuales, etc. pasivación

+0

¿Qué es la pasivación? Nunca escuché este término y google dijo algo sobre oxide :( –

+1

@ ganguly.sarthak, tal vez necesites trabajar en tus habilidades de Google: http://www.google.ie/search?sourceid=chrome&ie=UTF-8&q=passivation+servlet :-) –

+0

Pero si la clase padre 'GenericServlet' es Serializable, ¿por qué marcar' HttpServlet' Serializable nuevamente? – Sid

1

Otra razón es que los contenedores web como Tomcat llama a algunos ganchos cuando se apaga. Esos ganchos conservan el estado de las aplicaciones/servlets en el disco duro, por lo que cuando se reinicia el contenedor web, la aplicación no pierde su estado.

+1

Bueno, un servlet debe ser seguro para subprocesos o al menos no tiene estado de conversación. Entonces, ¿cuál es la necesidad? –

+0

@AmirPashazadeh Un servlet puede tener * lotes * de estado de conversación para cada usuario. Ese es el punto completo de un objeto de "sesión", el seguimiento de ese estado entre los ciclos de solicitud/respuesta. Ese estado vive en la memoria mientras se está ejecutando el contenedor Servlet. Cuando el contenedor sale, ¡memoria de Poof !, borrada, el estado de la sesión ha desaparecido. La idea en esta respuesta es sobre cómo * algunos * contenedores Servlet ofrecen una característica opcional para guardar ese estado de sesión en el almacenamiento a través de la serialización para "deshidratar" los datos de estado. Al reiniciar el contenedor, la sesión se rehidrata para permitir que el usuario continúe su trabajo donde lo dejó. –

Cuestiones relacionadas