Podstawową technologią implementacji aplikacji WWW w Javie są tzw. Servlety. Jakkolwiek istnieje ogromna liczba przeróżnych technologii, które ułatwiają tworzenie aplikacji WWW, to koniec końców wszystkie one są li tylko – mniej lub bardziej sprytnym – wykorzystaniem technologii Servletów. Na dobry początek zaimplementujmy więc prosty Servlet.
Servlet to nic innego, jak pewna specyficzna klasa (fragment kodu w Javie) obsługująca żądania protokołu HTTP. Servlety, aby mogły działać, muszą być zainstalowane na Serwerze Aplikacji. Zadaniem owego serwera jest zamiana żądań HTTP na wywołania odpowiednich metod zaimplementowanych w języku Java. Implementując aplikację WWW w Javie musimy zaimplementować ową specyficzną klasę – Servlet – oraz przygotować plik konfiguracyjny XML zwany deskryptorem wdrożenia, tudzież deskryptorem instalacji (ang. deployment descriptor).
Deskryptor wdrożenia zawiera informacje opisujące w jaki sposób serwer aplikacji ma udostępniać nasz Servlet. W szczególności są to informacje określające adres HTTP naszego Servletu (tj. URL naszej aplikacji WWW).
Nasz pierwszy Servlet zaimplementujemy bez pomocy IDE. Niezbędne będzie natomiast JDK oraz serwer aplikacji Tomcat. Jak zainstalować JDK opisałem w artykule „Instalujemy JDK” a jak Tomcata w artykule „Instalujemy serwer Tomcat”.
Posługując się naszym ulubionym edytorem tekstu (np. Notepad z systemu Windows) utwórzmy plik o nazwie HelloWorldServlet.java i treści
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>My Servlet</title></head><body>"); out.println("Hello World!"); out.println("<body></html>"); out.close(); } }
Powyższy kod to nic innego jak klasa języka Java o nazwie HelloWorldServlet, która to klasa spełnia wszystkie wymagania specyfikacji Servletów, a więc jest Servletem.
Teraz przygotujemy deskryptor wdrożenia. Utwórzmy więc posługując się dowolnym edytorem tekstu plik o nazwie web.xml (plik ten zawsze musi się nazywać dokładnie tak) i zawartości:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app>
Zanim przystąpimy do instalacji aplikacji na serwerze Tomcat, musimy nasz Servlet skompilować. Wydajemy w tym celu z linii poleceń (będąc w katalogu, w którym zapisaliśmy plik HelloWorldServlet.java) komendę:
javac -cp "%CATALINA_HOME%\lib\servlet-api.jar" HelloWorldServlet.java
Zakładam, że zdefiniowaliśmy zmienną środowiskową %CATALINA_HOME% tak aby wskazywała katalog w którym zainstalowaliśmy serwer Tomcat. Ewentualnie, możemy zamiast %CATALINA_HOME% wpisać ścieżkę dostępu do katalogu bazowego Tomcata (np. C:\Program Files\Tomcat 6.0).
Pozostało jeszcze naszą aplikację zainstalować na serwerze. W tym celu w podkatalogu webapps Tomcata, tj. w katalogu %CATALINA_HOME%\webapps tworzymy katalog o nazwie WebApp. W katalogu WebApp tworzymy podkatalog WEB-INF (nazwa wydaje się być dziwna, ale taka być musi) i w tymże jeszcze podkatalog o nazwie classes. Do katalogu WebApp\WEB-INF kopiujemy deskryptor wdrożenia, tj. plik web.xml, a do katalogu WebApp\WEB-INF\classes skompilowany Servlet, tj. plik HelloWorldServlet.class. Ostateczna struktura powinna być taka jak pokazano poniżej.
Jeśli Tomcat był wyłączony, to teraz go uruchamiamy (patrz artykuł „Instalujemy serwer Tomcat”). Jeśli postępowaliśmy dokładnie tak, jak opisano w niniejszym artykule, to aplikacja dostępna jest pod adresem http://localhost:8080/WebApp/HelloWorld. Uruchamiamy przeglądarkę żeby przekonać się czy działa. Efekt powinien być podobny do tego pokazanego poniżej.
Jeśli zamiast tego widzimy komunikat o błędzie, to odczekajmy chwilkę i odświeżmy jeszcze raz stronę. Ewentualnie, jeśli to nie pomoże, zrestartujmy serwer. Problemy tego typu nie powinny wystąpić, jeśli Tomcat był początkowo wyłączony i uruchomiliśmy go dopiero po zainstalowaniu aplikacji.
Może wydawać się, że skoro tak słaby efekt wymaga tak dużej ilości pracy, to jest to gra nie warta świeczki. Śpieszę więc z wyjaśnieniami – można to wszystko zrobić dużo prościej. Dowiemy się jak, jeśli tylko zdecydujemy się zainwestować w naukę Javy wystarczającą ilość czasu. No i oczywiście, nade wszystko, Java nie służy do implementacji tego typu trywialnych aplikacji.
Hmmm… Co robię źle? wynik kompilacji servlet’a: E:\java>javac -cp „%CATALINA_HOME%\lib\servlet-api.jar” HalloWorldServl et.java HalloWorldServl et.java:1: error: package javax.servlet does not exist import javax.servlet.ServletExceptio n; ^ HalloWorldServl et.java:2: error: package javax.servlet.http does not exist import javax.servlet.http.HttpServlet; ^ HalloWorldServl et.java:3: error: package javax.servlet.http does not exist import javax.servlet.http.HttpServletRequ est; ^ HalloWorldServl et.java:4: error: package javax.servlet.http does not exist import javax.servlet.http.HttpServletResp onse; ^ HalloWorldServl et.java:9: error: cannot find symbol public class HalloWorldServl et extends HttpServlet { ^ symbol: class HttpServlet HalloWorldServl et.java:12: error: cannot find symbol protected void doGet(HttpServl etRequ est request, ^ symbol: class HttpServletRequ est location: class HalloWorldServl et HalloWorldServl et.java:13: error:… Czytaj więcej »