Deskryptor wdrożenia to główny plik konfiguracyjny aplikacji WWW. Jest to plik XML o nazwie web.xml, który umieszczamy bezpośrednio w katalogu WEB-INF.
W deskryptorze wdrożenia konfigurujemy między innymi adresy URL servletów. Wiemy już, z lektury artykułu „Struktura aplikacji WWW”, jak skonstruować URL dla zapytań, dla których w odpowiedzi odsyłane są pliki umieszczone bezpośrednio w katalogu głównym aplikacji, ale w jaki sposób wysłać żądanie HTTP do servletu? Otóż to, które żądania zostaną obsłużone przez servlet konfigurujemy właśnie w deskryptorze wdrożenia, tzn. w pliku web.xml. Poniżej przykład:
<web-app version="2.5"
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”>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>pl.naukajavy.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
Element o nazwie web-app to element nadrzędny, grupujący wszystkie elementy konfiguracji. Zawiera on niezbędne definicje w postaci atrybutów, w których znaczenie nie potrzebujemy póki co wnikać – z naszego punktu widzenia jest to element stały każdego pliku web.xml i zawsze wygląda on tak samo (dla specyfikacji servletów w wersji 2.5).
To co nas szczególnie interesuje, to element servlet oraz servlet-mapping. Element servlet to definicja servletu; w pod-elemencie servlet-class podajemy pełną (poprzedzoną nazwą pakietu) nazwę klasy która implementuje servlet, zaś servlet-name to dowolna, wymyślona przez nas nazwa. Nazwa servletu którą wpisujemy jako wartość pod-elementu servlet-name służy w zasadzie tylko do tego, aby powiązać definicję servletu z definicją mapowania na URL. Element servlet-mapping to właśnie definicja wzorca adresów URL, dla których żądania będą obsługiwane przez powiązany servlet. Uwaga! Element servlet-name wiąże definicję servletu z definicją mapowania i jego wartość musi być w obydwu tych definicjach taka sama.
W powyższym przykładzie skonfigurowaliśmy aplikację WWW w ten sposób, że wszystkie żądania wysłane na adres URL postaci {adres aplikacji}/hello zostaną przekazane do servletu pl.naukajavy.HelloWorldServlet i w odpowiedzi na takie żądanie zostanie do klienta odesłana treść wygenerowana w tym właśnie servlecie.
W deskryptorze wdrożenia konfigurujemy także szereg innych parametrów aplikacji. W szczególności, możemy umieszczając w nim odpowiednią konfigurację zabezpieczyć aplikację przed nieautoryzowanym dostępem.
Jeśli przebrnęliśmy już szczęśliwie przez tę i poprzednie części kursu, to znaczy, że powinniśmy być w stanie samodzielnie implementować proste aplikacje WWW w języku Java. Spróbujmy w ramach ćwiczenia zaimplementować aplikację kalkulatora dodającego, składającą się ze strony HTML zawierającej formularz z dwoma polami do wprowadzenia liczb, oraz servletu, który doda te wartości i zwróci stronę HTML z wynikiem.