Pliki JSP, atrybuty żądania

Łatwa generacja kodu HTML

Generacja kodu HTML z poziomu serwletu nie jest zbyt wygodna. Stosujemy do tego pliki JSP (Java Server Pages). Pliki JSP znajdują się w katalogu Web Pages i tam je tworzymy. Są czymś pośrednim między zwykłymi plikami HTML, a serwletami.

Jak zdążyłeś/aś już zauważyć – w kreatorze podajemy wyłącznie nazwę pliku – JSP nie jest klasą Javy. Piszemy w nich zwykły HTML wzbogacony o tagi JSTL i język EL. Proces standardowo przebiega tak, że klasa controller’a odbiera dane z warstwy DAO i przekazuje je do widoku (pliku JSP), gdzie łatwo wygenerujemy kod HTML. Aby połączyć widok z controller’em potrzebna będzie wiedza z kolejnego rozdziału.

Mechanizm dispatcher’a, atrybuty żądania - łączymy controller z widokiem

Powoli zbliżamy się do napisania aplikacji webowej, która będzie służyć do operacji CRUD na jednej z encji bazodanowych. W Javie EE udostępniono serwletom mechanizm dispatcher’a, który pozwala przekazać sterowanie z jednego serwletu do drugiego. Ponadto możemy do żądania dodawać atrybuty czyli jakieś obiekty, które będą dostępne dla kolejnego serwletu. Najczęściej dispatcher’a używamy, aby przekazać dane do pliku JSP.

Zdecydowanie lepiej wyjaśni to przykład:

W momencie wywołania serwletu – do żądania zostanie dodany atrybut pod nazwą czas, a następnie serwlet przekaże sterowanie do pliku JSP (co wiąże się również z przekazaniem odpowiedzialności za wygenerowanie odpowiedzi). Przekazywać sterowanie za pomocą dispatcher’a możemy tylko do serwletów (podając URL z którym są związane), albo do JSP (podając lokalizację pliku).

Aby z poziomu JSP odwołać się do naszego atrybutu użyjemy języka EL (Expression Language).

Jak widać na warstwie widoku do przekazanych przez serwlet atrybutów odwołujemy się dokładnie po nazwie, pod którą zapisaliśmy obiekt w żądaniu. Samo wyświetlenie obiektu w pliku JSP nie różni się niczym od wywołania metody toString() na danym obiekcie. Dużo ciekawsze jest odwołanie ${czas.time}. Wydawałoby się, że odwołujemy się do pola obiektu, ale w rzeczywistości wywoływana jest metoda getTime(). Pliki JSP potrafią dużo więcej, mianowicie uruchamiać pętle, wykonywać instrukcje warunkowe, a nawet formatować daty i liczby. Bardziej zaawansowane możliwości JSP zaprezentuję w artykule poświęconym tagom JSTL.

WAŻNE!
Jeśli kontroler uzyska dostęp do strumienia piszącego na ekran przeglądarki (response.getWriter()) nie będzie można użyć już dispatcher’a. Dzieje się tak dlatego, że uzyskanie referencji do wspomnianego strumienia oznacza wzięcie przez metodę serwletu odpowiedzialności za wygenerowanie odpowiedzi HTTP.

Ten artykuł jest elementem poniższych kursów: