W swoim wcześniejszym wpisie, zatytułowanym JSP, JSF, GlassFish – mini słowniczek napisałem że JSP jest wykorzystywane jako warstwa widoku w modelu MVC. Jest to oczywiście prawda ale jak się niedawno dowiedziałem, w znaczny sposób spłyciłem zastosowanie JSP. Okazuje się bowiem że samo JSP jest idealnym sposobem na tworzenie prostych aczkolwiek dynamicznych stron WWW w których nie ma potrzeby podziału na poszczególne warstwy Model – Widok – Kontroler. Co więcej okazuję się że każda strona JSP również jest servletem i zachowuję się w sposób podobny.
Strona JSP to na dobrą sprawę kod HTML/XHTML z pewnymi dodatkami które zapewniają dynamiczność takiej strony. Te “pewne dodatki” to tzw. skryptlety, czyli poprstu kod Javy umieszczony w kodzie stron JSP pomiędzy znacznikami <% ... %>. Jest to rozwiązanie bardzo podobne do umieszczania kodu PHP w ramach kodu HTML. Jak wiadomo mieszanie logiki aplikacji ze sposobem prezentacji nie jest dobrym pomysłem, ale na dobry początek trzeba zacząć od czegoś prostego. Aby nie był to “suchy wpis” przedstawiam przykład(pochodzi książki Head First Servlets & JSP):
package foo;
public class Licznik {
private static int liczba;
public static synchronized int getLiczba() {
liczba++;
return liczba;
}
}
to kod wstawiony do strony JSP korzystający z licznika powinien wyglądać następująco:
<% out.println(foo.licznik.getLiczba()); %>
Oprócz znacznika skryptletu który został przed chwilą zaprezentowane w stronach JSP można spotkać również inne, np.
- Dyrektywa: <%@ ... %>, np:
<%@page contentType="text/html; charset=UTF-8" %>ustawia typ treści - Wyrażenie <%= ... %>, np.
<%= Licznik.getLiczba() %> spowoduje wyświetlenie aktualnego stanu licznika. - Definicja: <%! ... %>, umożliwia definiowanie zmiennych i metod które są później “wstrzykiwane” do tworzonej klasy servletu. W ramach tych znaczników jesteśmy upoważnieni do przeciążenia metod
jspInitorazjspDestroyktóre są wywoływane odpowiednio przy powoływaniu servletu do życia i przy jego usuwaniuz kontenera. Z uwagi na fakt że definicje metod zawartych w obrębie znacznika defincji stają metodami servletu, nie ma tu dostępu do zmiennyrequestiresponse
Jak wspomniałem każda strona JSP jest servletem. Strona jest tłumaczona przez kontener na odpowiedni servlet. Wykorzystanie różnych znaczników do zaprezentowania innego typu zawartości ułatwia kontenerowi konwersję. I tak dyrektywy są używane aby kontrolować jak kontener ma przetłumaczyć a następnie wykonać kod strony, skryptlety są po prostu przepisywane do kodu servletu natomiast wyrażenia są przekazywane jako parametry odpowiednich funkcji.
Witam, nazywam się Piotr Doniec, w internecie występuję pod nickami 'pejotr' oraz 'doniczek'. Obecnie jestem studentem 3 roku informatyki na Politechnice Warszawskiej na wydziale Elektroniki i Technik Informacyjnych.