2012-01-12 12 views
6

Zastanawiam się, czy metoda init HttpServlet jest wywoływana po deserializacji.Cykl życia i serializacja HttpServlet

Nie wiem, czy jakikolwiek kontener kiedykolwiek serializuje serwlet, ale implementuje interfejs Serializable, więc istnieje możliwość zrobienia tego.

Program JavaDoc dla metody init wskazuje: "Wywoływany przez kontener serwletu w celu wskazania apletowi, że serwlet jest uruchamiany."

Czy deserializacja jest równa "oddana do użytku"?

+2

Jestem prawie pewny, że serwlet nigdy nie jest serializowany. Jest to singleton i zwykle jest całkowicie bezpaństwowcem. Nie widzę sensu w serializacji. W każdym razie, bez względu na to, czy jest nowo utworzone, czy deserializowane, metoda init musi zostać wywołana, gdy jest oddawana do użytku, więc kontener serwletów naruszy specyfikację, jeśli umieści serwlet w serwisie bez inicjowania go. –

Odpowiedz

5

Podczas gdy nigdy nie miałem do czynienia z pojemnikiem, który wymieniłby serwlet przez jego szeregowanie, i naprawdę nie mogę sobie wyobrazić, kiedy zrobiłby to nowoczesny pojemnik, ale zawsze rozumiałem, że init() jest nazywane dokładnie raz dla serwletu w jego cyklu życiowym, tak, aby nie był ponownie wywoływany przy deserializacji. Tak jak w przypadku każdego innego, Serializable, musisz napisać specjalną obsługę, implementując readFields().

+3

OK, tutaj zaczyna się to komplikować. GenericServlet (który wprowadza interfejs Serializable w hierarchii) mówi tylko: "Wywoływany przez kontener serwletu, aby wskazać serwletowi, że serwlet jest oddawany do użytku." Drugi punkt: "Kontener serwletu wywołuje metodę init dokładnie jeden raz po utworzeniu serwletu." jest napisane w JavaDoc interfejsu Servlet, który nie jest możliwy do serializacji. – cpater

+2

Innym punktem jest to, że ServletConfig, który jest przekazywany do metody init, jest przechowywany w polu przejściowym ... – cpater