Latest Entries »

Wednesday, August 26, 2009

servlet-name,servlet-mapping, url-pattern i /faces

Kilka dni temu gdy kolejny raz przeglądałem książkę o JavaServer Faces przed snem doznałem olśnienia dlaczego trzeba wpisywać http:// localhost:8080/mojaAplikacja/faces/strona.jsp aby strona strona.jsp wyświetliła prawidłowo. Chciałbym zaprezentować przykład krok po kroku, a w trakcie będę tłumaczył uzyskane wyniki. Przykład zrealizuję w środowisku Netbeans 6.7.1
Zatem zaczynamy:

*Dodaj framework JavaServer Faces i kliknij finish.

Po stworzeniu przykładowej aplikacji ServletFaces otrzymujemy następującą strukurę katalogów:



Gdy uruchomimy aplikację wyświetli się nam w oknie przeglądarki adres:

Teraz spróbujemy dodać stronę jsp np. page2.jsp. Struktura katalogów powinna wyglądać tak:


Uzupełnij stronę tak abyś miał pewność, że znajdujesz się na stronie page2.jsp. Ja uzupełniłem ją w następujący sposób:



Teraz będziemy starali się poprzez adres w przeglądarce wyświetlić treść nowo utworzonej strony. Pierwszym pomysłem byłoby wpisanie następującego adresu:


Jeżeli odwiedzasz ten artykuł to z pewnością wiesz jaki będzie rezultat. Pytanie tylko dlaczego?

org.apache.jasper.JasperException: java.lang.RuntimeException: Cannot find FacesContext
W skrócie:

Powodem tego jest sposób wdrażania aplikacji internetowych, które są tak naprawdę procesem żmudnym. Trzeba utworzyć odpowiednią strukturę katalogów (patrz powyżej) oraz odpowiednio skonfigurować pliki (*.xml) aplikacji. Za dynamiczną treść prezentowaną na stronach jsp są odpowiedzialne Servlety. Servlety to klasy java, które przetwarzają zlecenia klientów.

Servlety konfiguruje się w plikach xml podając dane potrzebne do uruchomienia. Zajrzyj do pliku web.xml. W tym pliku znajduje się odpowiedź dlaczego wcześniejsze http://localhost:8080/ServletFaces/page2.jsp wywołało wyjątek.

Oto odpowiedź:


Widzimy jak się prezentuje nazwa servletu: Faces Servlet oraz, która klasa implementuje metody inicjalizujące, wykonujące żądania oraz "niszczące" dany servlet:
javax.faces.webapp.FacesServlet.
Podświetlony na żółto znacznik <servlet-mapping/> odpowiada za "uruchamianie" i wykonywanie kodu FacesServlet.

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

Powyższy kod mówi nam: że Faces Servlet będzie uruchamiany w przeglądarce jeśli wpiszemy adres zawierający url-pattern. Na przykład aby wyświetlić wcześniejszą stronę page2.jsp musimy wpisać następujący adres:


Teraz skoro rozwiązaliśmy początkowy problem dodamy nową regułę url-pattern, która nieco zmieni sposób w jaki będziemy mogli uruchomić serwlet. Do pliku web.xml w miejscu zakończenia poprzedniego tagu servlet-mapping dodaj następujący kod:


Teraz zamiast pisać:
Możemy alternatywnie wywołać stronę jsp w poniższy sposób:

Dziękuję za uwagę :-)


Benone!

1 comments:

Unknown said...

Mi się bardzo podoba Twój cytat na nagłówku:O zgrozo ile to człowiek musi poświęcić czasu na naukę nowej technologii :)
Do tego samego doszłam wczoraj z kolegą.
A artykuł podoba mi się, choć to w sumie jakiś mały kroczek do pisania servletów.

Post a Comment