Przekazanie obrazka z servletu do JSP

0

Witam,

Proszę Was o pomoc w następującej sprawie.
Mam za zadanie zrobić formularz z obrazkiem captcha i odpowiednią walidacją danych. Rozwiązanie jakie mam w tym momencie polega na tym iż w servlecie generuję obrazek i zapisuję go w określonej lokalizacji. Następnie wywołuję stronę JSP, która ma tag img wskazujący na plik który wcześniej zapisałem. Nowy obrazek ma być generowany za każdym razem, gdy nie powiedzie się walidacja danych. Wszystko działa z pozoru dobrze, lecz występuje pewne opóźnienie przy odświeżaniu obrazka, tzn:

  1. Klient wywołuje stronę (pokazuje mu się obrazek z danym kodem)
  2. Klient wpisuje dane i klika wyślij, lecz wpisał zły kod obrazka (czyli ta sama strona wyświetla się jeszcze raz z nowym obrazkiem).
  3. Z jakiegoś powodu klient klika ponownie wyślij lub odświeża stronę przed upływem 5 sekund od ostatniego odświeżenia ------> i tu jest problem: strona wyświetla się jeszcze raz z dokładnie tym samym obrazkiem, lecz metoda generująca captcha w servlecie wygenerowała nowy obrazek i ustawiła nowe dane w sesji!!!!)
  4. Klient nie jest w stanie wpisać poprawnych danych.....
    Co ciekawe, testowałem i faktycznie to jest u mnie 5sek., tzn. po upływie tego czasu nowy, wygenerowany obrazek pokaże się w przeglądarce. Kombinuję więc aby przekazać ten obrazek bezpośrednio z servletu do JSP. Czytałem o rozwiązaniu, gdzie piszę oddzielny servlet, który ma za zadanie załadować obrazek, ustawić odpowiedni typ w nagłówku HTTP i wysłać surowe dane. To rozwiązanie wydaje się lepsze, lecz w moim przypadku nie będę miał jak sprawdzić jaki kod obrazka został wygenerowany, czyli to odpada. Czy ktoś z Was spotkał się z takim problemem i mógłby zasugerować w jaki sposób przekazać obrazek bezpośrednio, lub wyeliminować "opóźnienie" w odświeżaniu przeglądarki?
0

Moim zdaniem powinieneś zrobić Servlet, który będzie zwracał obrazek ("content-type" = img/jpeg lub podobne), zapisywanie pliku nie jest imho dobre.

Oprócz tego do pomocy zaprzęgnij mechanizm sesji. W sesji zapiszesz, jaki tekst był reprezentowany przez wygenerowany obrazek. Potem porównasz wartość sesyjną z wartością wpisaną przez użytkownika w formularzu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1