2011-09-12 13 views
6

Eventuali duplicati:
Why does HttpServlet implement Serializable?Perché HttpServlet in java implementa serializzabile?

Questa domanda è venuto improvvisamente fino paio di giorni fa in una discussione interna e che non sembrano trovare alcuna risposta adeguata per la stessa. Qualcuno può indicarmi la giusta direzione?

Le domande:

1) Perché è HttpServlet in java implements serializable? Non sembro trovare alcuna ragione logica per lo stesso.

2) Durante il tentativo di capire questo ho guardato la documentazione delle API e trovato qualche cosa di interessante

public abstract class HttpServlet extends GenericServlet 
implements Serializable 

Ora, ciò che è di interesse è che GenericServlet estende anche Serializable. Quindi sia la classe genitore che quella secondaria implementano serializzabili. Non è un anti-modello?

+0

Qualche suggerimento sulla seconda domanda? –

risposta

7

1) Perché httpservlet in java implementa serializzabile? Non mi sembra che lo trovi alcun motivo logico per lo stesso.

Sostenere clustering e serializzazione tra VM, passivazione ecc

+0

cos'è la passivazione? Mai sentito questo termine e Google ha detto qualcosa sull'ossido :( –

+1

@ ganguly.sarthak forse hai bisogno di lavorare sulle tue capacità di google: http://www.google.ie/search?sourceid=chrome&ie=UTF-8&q=passivation+servlet :-) –

+0

Ma se la classe genitrice 'GenericServlet' è serializzabile, perché contrassegnare' HttpServlet' Serializable di nuovo? – Sid

1

Un'altra ragione è che web contenitori quali Tomcat invita alcuni ganci allo spegnimento. Questi hook mantengono lo stato delle applicazioni/servlet su hdd, quindi quando il web-container viene riavviato, l'applicazione non perde lo stato.

+1

Beh, un servlet deve essere sicuro per i thread o almeno non ha uno stato di conversazione. Allora, qual è il bisogno? –

+0

@AmirPashazadeh Un servlet può avere * un sacco * di stato conversazione per ogni utente. Questo è l'intero punto di un oggetto "sessione", che traccia lo stato tra i cicli di richiesta/risposta. Quello stato rimane in memoria mentre il contenitore Servlet è in esecuzione. Quando il contenitore esce, Poof !, la memoria si è cancellata, lo stato della sessione è scomparso. L'idea di questa risposta riguarda il modo in cui * alcuni * contenitori di servlet offrono una funzione opzionale per salvare lo stato di sessione nello spazio di archiviazione tramite la serializzazione per "disidratare" i dati di stato. Al riavvio del contenitore, la sessione viene reidratata per consentire all'utente di continuare il proprio lavoro dal punto in cui erano stati interrotti. –

Problemi correlati