2013-05-10 10 views
6

ponieważ jestem nowy w programowaniu serwletów, możliwe jest, że zadaję podstawowe pytanie.Opakowanie, filtr i serwletka

Piszę aplikację, w której filtr otrzymuje odpowiedź z serwletu i wykonuje z niego pewne obliczenia. Dowiedziałem się, że potrzebuję klasy otoki, aby złapać odpowiedź.

Moje pytanie brzmi teraz, dlaczego opakowanie jest potrzebne? Z góry dziękuję!

+0

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

+0

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? –

+0

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

Odpowiedz

12

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.

+1

Awesome! Dzięki Ravi :)! To było jasne i zrozumiałe. –

+0

serdecznie zapraszamy, Mysia. Twoje zdrowie ! –

+0

Żądanie może wymagać opakowania, tj. Https://www.javacodegeeks.com/2012/07/anti-cross-site-scripting-xss-filter.html –

Powiązane problemy