Nikt nie ma chyba wątpliwości, że obecnie PHP rządzi w sieci niepodzielnie. Jest to język bardzo prosty w nauce, co w dużej mierze przyczyniło się do jego olbrzymiej popularności. Warto jednak pamiętać, że istnieje jeszcze kilka innych technologii, może mniej popularnych, jednak na pewno nie gorszych. Jeśli jednak znasz język programowania Java, koniecznie powinieneś przyjrzeć się bliżej technologii J2EE, a także wchodzącym w jej skład rozwiązaniom JSP oraz Servlet.
Technologie te rozwijane są i wykorzystywane przy tworzeniu zaawansowanych aplikacji internetowych już od wielu lat. Zaufało im wiele wielkich przedsiębiorstw, korporacji i banków.
Dlaczego? Poznaj możliwości, jakie ze sobą niosą, a odpowiedź stanie się dla ciebie jasna.
W tym artykule pomożemy ci postawić pierwsze
kroki w nauce JSP i servletów. Wskażemy również
kierunek, w jakim powinieneś podążać, jeżeli zechcesz rozwijać swoją wiedzę w tej dziedzinie.
Co jest potrzebne
Aby rozpocząć prace z JSP i servletami, będziesz potrzebował następujących narzędzi:
- JDK, który można pobrać ze strony http://java.sun.com.
- Kontenera servletów – my skorzystamy z najpopularniejszego
chyba kontenera servletów, czyli Tomcata. Możesz go pobrać ze strony http://tomcat.apache.org. - Edytora, który ułatwi pisanie kodu – chociaż do pracy wystarczy nawet systemowy Notatnik, my polecamy edytor Eclipse. Znajdziesz go na stronie http://www.eclipse.org dołączonym do magazynu.
Jeśli programowałeś już w takich językach jak PHP, zauważyłeś prawdopodobnie, że w powyższym
wypunktowaniu brakuje serwera HTTP. Spowodowane jest to tym, że kontener servletów posiada wbudowany serwer HTTP (chociaż Tomcata
można z powodzeniem zintegrować z serwerem Apache).
Ale po kolei. Najprościej rzecz ujmując, JDK to zestaw narzędzi dla programistów Java, na które składają się kompilator, debuger, biblioteki itd.
Niestety standardowa instalacja nie posiada dokumentacji API. Znajdziesz ją na stronie http://java.sun.com. Sama instalacja JDK nie powinna sprawiać żadnych problemów. Przebiega ona bowiem
automatycznie, wystarczy czytać komunikaty programu instalacyjnego i postępować zgodnie z ich wytycznymi.
Kontener servletów obsługuje żądania docierające
do serwera HTTP, wykonując kod odpowiednich
servletów. Jak już niedługo zobaczysz, jest on niezbędny, ponieważ servlety nie są samodzielnymi programami napisanymi w języku Java, a jedynie specjalnymi klasami. Musi więc istnieć aplikacja potrafiąca tymi klasami odpowiednio zarządzać.
Ostatnim wymienionym elementem jest edytor tekstu. Wybór tego narzędzia nie jest łatwy – każdy ma inne upodobania oraz inaczej wyobraża sobie idealne narzędzie tego rodzaju.
Eclipse jest jednak jednym z najpopularniejszych, darmowych edytorów wspomagających pracę programisty. Ciężko go nawet nazwać edytorem.
Jest to swego rodzaju platforma, do której można doinstalować wiele dodatków ułatwiających
wykonywanie konkretnych działań. My na razie pozostaniemy jednak przy standardowej dystrybucji Eclipse\’a.
Przygotowanie poligonu
Gdy dysponujesz już potrzebnym do pracy oprogramowaniem, czas zabrać się do jego instalacji. Jak już wspomniano, instalacja JDK jest bardzo prosta. Warto jednak potem jeszcze ustalić ścieżkę PATH w taki sposób, aby wskazywała na podkatalog bin znajdujący się w katalogu z JDK. W tym celu musisz:
- przejść do Panelu Sterowania,
- kliknąć ikonkę System,
- w oknie Właściwości Systemu kliknąć zakładkę Zaawansowane,
- kliknąć przycisk Zmienne środowiskowe,
- w polu Zmienne systemowe odnaleźć zmienną Path,
- kliknąć przycisk Edytuj,
- na końcu linijki znajdującej się w polu Wartość zmiennej wpisać ścieżkę do katalogu bin, znajdującego
się w JDK, poprzedzając ją średnikiem (np. {stala};c:\\program files\\jdk1.5.0_0\\bin){/stala}, - następnie zatwierdzić wszystko przyciskiem OK. Nie zamykaj jednak okna Zmienne środowiskowe,
ponieważ będzie ono jeszcze za chwilkę potrzebne.
Dzięki temu rozwiązaniu będziesz zawsze miał dostęp do kompilatora Javy bezpośrednio z linii poleceń.
Następnie upewnij się, że instalator zdefiniował zmienną systemową JAVA_HOME. Powinieneś zlokalizować ją w oknie Zmienne środowiskowe wśród zmiennych Zmienne systemowe. Jeśli jej tam nie znajdziesz, będziesz musiał stworzyć ją samodzielnie:
- kliknij przycisk New,
- w nowo otwartym oknie, w polu Nazwa zmiennej
wpisz JAVA_HOME, - w polu Wartość zmiennej wpisz ścieżkę do podkatalogu z JDK – na przykład {stala}c:\\program files\\jdk1.5.0_06\\{/stala}),
- kliknij przycisk OK,. aby zatwierdzić wprowadzoną zmienną.
Na ilustracjach 1 oraz 2 możesz sprawdzić, czy zmian dokonujesz dokładnie w tych oknach, o których piszemy.
Możesz teraz zamknąć wszystkie otwarte przed momentem okna i zrestartować system. Po ponownym
jego uruchomieniu sprawdź, czy masz dostęp do kompilatora Java. W tym celu na pasku Start wybierz opcję Uruchom program i w nowym oknie wpisz cmd. Następnie kliknij OK. Teraz w oknie linii poleceń wpisz plecenie javac.
Na ilustracji 3 widać efekt wykonania tego polecenia. Jeśli jednak otrzymałeś komunikat z ilustracji 4, oznacza to, że masz źle zdefiniowaną ścieżkę PATH – prawdopodobnie popełniłeś gdzieś literówkę.
Gdy instalację JDK masz już za sobą, pora zainstalować najważniejszy element – kontener servletów. Rozpakuj archiwum w wybranej przez siebie lokalizacji. Możesz w tym celu skorzystać z darmowego programu PowerArchiwer (do pobrania
ze strony http://www.powerarchiwer.com) lub WinRara.
Rozpakowany Tomcat będzie gotów do pracy. Przejdź zatem do katalogu, w którym się znajduje. Powinien on zawierać katalog bin, a w nim plik {stala}sturtup.bat{/stala}. Uruchom go. Jeśli nie pojawiły się żadne
informacje o błędach, zostanie otwarte nowe okno konsoli (patrz ilustracja 5). Uruchom teraz przeglądarkę internetową i wpisz w niej adres {stala}http://localhost:8080{/stala}.
Jeżeli Tomcat funkcjonuje poprawnie, zobaczysz
ekran powitalny. Zwróć również uwagę na sam adres, który wskazuje, że serwer HTTP wbudowany w Tomcacie dostępny
jest standardowo na porcie 8080.
Da się to zmodyfikować w pliku konfiguracyjnym, jednak na potrzeby tego przykładu taka zmiana nie jest konieczna – zainteresowanych odsyłamy do dokumentacji.
Na sam koniec, warto zainstalować edytor Eclipse. Instaluje się go analogicznie do Tomcata – wystarczy rozpakować archiwum w wybranej lokalizacji i uruchomić plik eclipse.exe.
Po instalacji programu Eclipse warto wzbogacić jego funkcje o wtyczkę pozwalającą na startowanie, restartowanie i zatrzymywanie Tomcata z poziomu
edytora. Jednym z najpopularniejszych takich dodatków jest Sysdeo Eclipse Tomcat Luncher. Można go pobrać ze strony http://www.sysdeo.com/eclipse/tomcatplugin.
Archiwum z programem należy rozpakować do podkatalogu plugins znajdującego się w katalogu edytora Eclipse (a dokładniej: w katalogu
plugins powinien znaleźć się katalog com.sysdeo.eclipse.tomcat_3.1.0). Następnie uruchom edytor i wybierz menu Window > Customize Perspective… W nowym oknie przejdź do zakładki Commands i zaznacz Tomcat w grupie Available command groups. Dzięki temu zarówno z paska narzędzi Eclipsa, jak i z menu będziesz mógł nadzorować Tomcata.
Pozostała już tylko konfiguracja zainstalowanej
właśnie wtyczki. W tym celu wybierz menu Window > Preferences. W drzewie z lewej strony kliknij na opcji Tomcat. W polu Tomcat home ustaw poprawną ścieżkę do kontenera servletów – jak to zrobić pokazano na ilustracji 6. Teraz należy wskazać JRE, z jakiej wtyczki ma korzystać podczas uruchamiania Tomcata.
Aby wszystko działo poprawnie,
trzeba dopilnować, aby plugin korzystał z JRE zawartego w JDK. Rozwiń na drzewie z lewej strony okna Preferences opcję Java >Installed JREs. Sprawdź tam, czy zaznaczony JRE jest tym samym, który zainstalowałeś wcześniej. Jeśli nie, wybierz to JRE lub dodaj je za pomocą
opcji Add…
Po żmudnej konfiguracji jesteś już gotów do pracy. Wszystkie niezbędne elementy zostały zainstalowane, więc nadszedł czas na utworzenie pierwszego servletu.
Pierwszy Servlet
W celu stworzenia nowego projektu wybierz w menu opcję >File->New->Other… W nowym oknie rozwiń na drzewie opcję Java i wybierz Tomcat Project – zobacz rysunek 7.
Następnie w kolejnym oknie podaj nazwę twojego projektu – Zegarynka – i kliknij Next. W ostatnim oknie pozostaw wszystko bez zmian – kliknij Finish. Nasz nowy projekt został utworzony.
Najpierw należy dodać klasę servleta. W tym celu z lewej strony Eclipse\’a, na drzewie w zakładce
Package Explorer, kliknij prawym klawiszem na polu WEB-INF/src. Z menu wybierz opcję New->
Class (zobacz ilustrację 8).
Opcja ta powoduje otwarcie okna służącego do tworzenia klasy. Wpisz nazwę nowej klasy – w naszym przypadku będzie to Time – oraz nazwę klasy, po jakiej będziemy dziedziczyć. Servlety najczęściej dziedziczą po klasie HttpServ-let, zatem to ją należy wpisać w polu Superclass.
Eclipse pozwala na ustalenie pakietu dla klasy – kliknij w tym celu przycisk Browse… znajdujący się obok pola Superclass. W nowym oknie wybierz pakiet javax.servlet.http. Następnie zatwierdź zmiany przyciskiem OK (tak samo postępujesz
w oknie New Java Class).
Klasa została utworzona. Teraz należy dodać do niej metodę. Jednak servlet nie jest typową aplikacją języka Java. Nie posiada on metody {stala}main(){/stala}, a zamiast tego ma metodę {stala}doGet(){/stala} oraz/lub {stala}doPost(){/stala}. Pierwsza z nich obsługuje żądania przychodzące do servletu metodą GET (czyli za pośrednictwem URL-a), druga natomiast metodą POST. Przykładowy servlet będzie bardzo prosty, więc na nasze potrzeby wystarczająca będzie metoda {stala}doGet(){/stala} – jej postać przedstawiona jest na listingu 1.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
Locale[] locales = DateFormat.getAvailableLocales();
Date currentDate = new Date();
for (int i = 0; i < locales.length ; i++) {
String date = DateFormat.getTimeInstance(DateFormat.FULL, locales[i]).format(currentDate);
out.println(locales[i] + \" => \" + date);
}
}
Zanim przejdziemy do omawiania powyższej metody, postaraj się aby nowa klasa ją zawierająca była poprawna. Jeśli wpisałeś już całość danych w edytorze, zapewne zauważyłeś, że Eclipse podkreślił
wiele jej elementów. Mają one za zadanie informować o błędach. Po najechaniu kursorem myszy na podkreślenie zostanie wyświetlona informacja
z komunikatem błędu.
Często naniesienie poprawek to kwestia kilku kliknięć. Wystarczy w tym celu kliknąć na belce z lewej strony (na czerwony kwadracik ze znaczkiem x) i z listy, która się pojawi, wybrać jedno z rozwiązań zaistniałego problemu (patrz ilustracja 9). W naszym przypadku
zawsze chodzi o kłopot w określeniu, do jakiego pakietu należy podkreślona klasa – wystarczy, że w podpowiedziach wybierzesz poprawne opcje importu.
Poprawny, pełny kod klasy wygląda jak na listingu 2.
Nasz servlet ma za zadanie wyświetlać aktualny czas w formacie odpowiednim dla wszystkich obsługiwanych przez Javę lokalizacji. W tym celu pobiera on nazwy lokalizacji do tablicy locales a następnie w pętli formatuje aktualny czas:
String date = DateFormat.getTimeInstance(DateFormat.FULL, locales[i]).format(currentDate);
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Time extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
Locale[] locales = DateFormat.getAvailableLocales();
Date currentDate = new Date();
for (int i = 0; i < locales.length ; i++) {
String date = DateFormat.getTimeInstance(DateFormat.FULL, locales[i]).format(currentDate);
out.println(locales[i] + \" => \" + date);
}
}
}
Ostatnim krokiem jest wyświetlenie sformatowanego
czasu. Jak widzisz, wykonywane jest to w odmienny sposób niż w przypadku konsolowych aplikacji w Javie. Najpierw pobierany jest strumień wyjściowy, do którego będziemy pisali. Strumień ten jest pobierany raz, na samym początku metody {stala}doGet(){/stala}:
PrintWriter out = response.getWriter();
Zawartość tego strumienia jest następnie wysyłana do przeglądarki użytkownika. Jako że strumień jest obiektem klasy PrintWriter, mamy dostęp do między innymi metod {stala}print(){/stala} oraz {stala}println(){/stala}. Umożliwia to bardzo proste wyświetlanie informacji:
out.println(locales[i] + \" => \" + date);
Klasa naszego servleta jest już gotowa. Jednak to jeszcze nie wszystko. Zanim będziemy mogli podziwiać wynik jego działania, musimy utworzyć tak zwany deskryptor rozmieszczenia (ang. Deployment Descriptor). Jest to swojego rodzaju plik konfiguracyjny w postaci XML (przyzwyczaj się do plików XML podczas pracy z Javą), określający między innymi nazwę klasy naszego servleta, a także kojarzący z nim adres URL wpisywany przez użytkownika w przeglądarce. Tak naprawę za jego pomocą można zrobić o wiele więcej, jednak temat ten wybiega poza ramy niniejszego artykułu.
W celu utworzenia deskryptora rozmieszczenia
w zakładce Package Explorer kliknij prawym klawiszem na polu WEB-INF i z menu podręcznego
wybierz opcję New->File . W oknie służącym do tworzenia pliku podaj nazwę tworzonego pliku web.xml i kliknij przycisk Finish. W utworzonym pliku wpisz:
Time
Time
Time
/czas
W bloku {html}
nazwę (znacznik {html}
do odwoływania się do tego servletu oraz nazwę klasy servletu (znacznik {html}
W bloku {html}
adres URL wpisywany przez użytkownika z naszym servletem. Użyty w tym bloku znacznik {html}
określa zaś, co użytkownik musi wpisać w przeglądarce internetowej, aby wywołać nasz servlet. W naszym przypadku adresem URL będzie:
{stala}http://localhost:8080/Zegarynka/czas{/stala}
Po utworzeniu deskryptora rozmieszczenia można sprawdzić, czy wszystko działa poprawnie. Uruchom teraz Tomcata. Możesz w tym celu skorzystać
z ikony na pasku narzędzi edytora Eclipse.
Po wpisaniu w przeglądarce powyższego adresu powinieneś
zobaczyć stronę podobną do tej z ilustracji 10. Pamiętaj tylko, że każda zmiana w deskryptorze rozmieszczenia wymaga restartu Tomcata.
Pierwsza strona w JSP
Dodamy teraz do naszego projektu prostą stronę JSP, która będzie wyświetlała aktualny czas. JSP pozwala mieszać kod Java z kodem HTML, co jest wygodniejsze od użycia metod {stala}print(){/stala} i {stala}println(){/stala} w servletach.
W celu dodania skryptu JSP do projektu kliknij prawym klawiszem w zakładce Package Explorer na nazwie projektu i z menu podręcznego wybierz opcję New->File (ilustracja 11).
Następnie w nowym oknie wpisz nazwę Time.jsp i kliknij na przycisku Finish. W utworzonym pliku wpisz następujący kod:
Aktualna data
<%= new java.util.Date() %>
Jak widzisz, jest to w większości zwykły HTML. Kod JSP sprowadza się do jednej linijki:
<%= new java.util.Date() %>
Każdy skrypt JSP przekształcany jest przy pierwszym
wywołaniu do postaci servleta. Powyższa linijka JSP zostanie zamieniona na kod podobny do poniższego:
PrintWriter out = response.getWriter();
out.println(new java.util.Date());
Teraz pozostało już tylko sprawdzenie działania skryptu JSP. Wpisz w przeglądarce adres {stala}http://localhost:8080/Zegarynka/Time.jsp{/stala}.
Podsumowanie
Oczywiście wszystkie przedstawione tu informacje
to zupełne podstawy, mogą one jednak stać się dobrym wprowadzeniem do świata servletów i JSP. Zarówno servlety, jak i JSP oferują o wiele, wiele więcej i są bardzo potężnymi narzędziami.
Zdecydowanie warto poznać je bliżej.