1) Spójrzmy najpierw zrozumieć, w jaki sposób Request
i Request Filter
praca:
Kiedy, powiedzmy klienta, wysyła żądanie do serwletu, przechodzi przez pojemnik. Container decyduje, do którego serwletu należy przekazać serwlet. Co oznacza, że kontener jest w całkowitej kontroli.
kontrola Pojemnik sprawia realizacji filtr żądania łatwe, ponieważ możemy po prostu niech wie, że pojemnik Request
powinien udać się do filtrem pierwszy, a następnie do serwletu. Ponieważ kontener jest w całkowitej kontroli. W związku z tym wdrożenie filtru jest łatwe.
2) Teraz pozwala zrozumieć, jak Response
i Response Filter
praca:
Kiedy pojemnik wywołuje metody serwisowe Servlet, przechodzi 2 sprzeciw wobec metod, Request
i Response
.
Oznacza to po prostu, że Servlet jest w całkowitej kontroli, aby wysłać odpowiedź z powrotem do klienta. W jaki sposób ?
Ponieważ obiekt Response
ma obiekt wskaźnik do Output Stream Writer
. Oznacza to, że po zakończeniu przetwarzania żądania przez serwlet, zostanie on zapisany z powrotem do klienta za pomocą obiektu Response
przy użyciu obiektu pointerdo Output Writer Stream
. Więc Servlet nie będzie czekać na nikogo (środkowi mężczyźni jak filtr) i prosto służyć klientowi. Do tego czasu będzie już za późno, aby zainterweniować.
Jakie są więc rozwiązania?
Wrapper
jest naszym rozwiązaniem.
Jak działa Wrapper?
Więc zanim pojemnik przechodzi prawdziwe Request
i Response
obiektów do serwletu, będziemy zawijać naszą Response
obiekt, a następnie wysłać Real Request
i Wrapped Response
obiektów z metodami usług Servlet.
Teraz, Servlet ma wskaźnik do naszego obiektu Wrapped Output Stream Writer
, a nie do obiektu Real Response Output Stream Writer
. Kiedy serwlet zakończy to żądanie, zapisze odpowiedź na nasz Wrapped Stream
, a następnie nasz Wrapped Response Object
odpisze do Real Response Writer Stream
.
Morał z historii: Użyj wrapper
, gdy masz do czynienia z Response
.Request
nie potrzebuje koncepcji opakowania.
Tylko Ty możesz odpowiedzieć na to pytanie, ponieważ już wiesz, że potrzebujesz klasę opakowania :-) Co chcesz osiągnąć? I nie, opakowanie (żądanie/odpowiedź) nie zawsze jest konieczne ... – home
o ile zrozumiałem, kiedy chcę złapać odpowiedź serwletu i zrobić coś z tym w moim filtrze, potrzebuję opakowania. Czy to jest poprawne? Co z tym przypadkiem: Mam formularz, w którym użytkownik może wpisać nazwę użytkownika i tekst. Powinno to zostać wyświetlone na innej stronie. Wiem, że aplet może przyjmować parametry wejściowe i przekazywać do innej strony. Czy mogę osiągnąć to samo z filtrem? –
1. Nie, kto ci to powiedział (przykład może tu pomóc)? 2. Wolałbym nie wdrażać logiki biznesowej w filtrze, dlaczego uważasz, że filtr jest lepszym wyborem? – home