Zadanie 8
Transkrypt
Zadanie 8
PB, 2011-2012 Programowanie aplikacji WWW Lista zadań nr 8 Język EL (Expression Language) Stwórz prostą aplikację, która pozwoli na przechowywanie informacji na temat osoby oraz jej psa. Dane na temat osoby (imię, nazwisko, wiek w latach) oraz psa (imię, płeć) powinny być przechowywane w obiektach. 1. Stwórz formularz index.jsp zawierający pola pozwalające na podanie podstawowych danych odnośnie osoby oraz psa (patrz – nagłówek zadania). Formularz powinien przekierować żądanie do servletu PersonServlet. 2. Stwórz stronę view.jsp, na której wypisane zostaną informacje na temat osoby i jej psa z wykorzystaniem języka EL. Dodatkowo, za pomocą EL, należy wywołać funkcję calculateMonths() (i wypisać wynik jej działania). Rolą funkcji jest zwrócenie wieku danej osoby w miesiącach. 3. Stwórz klasy Person i Dog wraz z odpowiednimi getterami i setterami zgodnymi z JavaBeans. Dodatkowo, klasa Person powinna zawierać statyczną funkcję calculateMonths() pobierającą pojedynczy parametr (wiek w latach). Klasy Person i Dog połączone za pomocą kompozycji. Klasy powinny być umieszczone w pakiecie data. 4. Napisz servlet PersonServlet tworzący obiekty klas Person oraz Dog na podstawie danych otrzymanych z formularza index.jsp. Servlet powinien przekazać sterowanie do pliku view.jsp. 5. Do projektu dodaj plik Tag Library Descriptor (TLD) opisujący mapowanie pomiędzy nazwą funkcji EL i nazwą funkcji w klasie Person. Uwaga: W plikach jsp nie mogą być użyte scriptlety! 1 Operatory . oraz [ ] w EL Do wypisywania danych zawartych w różnych zakresach (np. sesji, aplikacji czy żądania) na stronach jsp służą operatory . oraz []: ${person.name} lub ${person[”name”]} - wypisanie właściwości name dla obiektu lub wartości spod klucza name dla map (w sensie struktury danych!). Operatory mogą być zagnieżdżone: ${person.dog.name} lub ${person[„dog”][„name”]} Obiekty predefiniowane W języku EL występuje kilka obiektów predefiniowanych: • jako mapy: ◦ pageScope – zakres strony, ◦ requestScope – zakres żądania, ◦ sessionScope – zakres sesji, ◦ applicationScope – zakres aplikacji, ◦ param oraz paramValues – lista parametrów obiektu żądania, ◦ header oraz headerValues – lista wartości nagłówka żądania (np. nazwa przeglądarki klienta), ◦ cookie – zakres ciasteczek, ◦ initParam – parametry inicjalizacyjne aplikacji, • jako referencje: ◦ pageContext – referencja do kontekstu strony. Wywoływanie funkcji za pomocą EL W celu wywołania funkcji z wykorzystaniem języka EL z wybranej klasy należy: • zadeklarować funkcję jako publiczną i statyczną, • stworzyć plik TLD (opis w dalszej części), • załadować bibliotekę na stronie jsp: <%@taglib prefix="mojPrefix" uri="adresURI" %> • wywołać funkcję: ${mojPrefix:nazwaFunkcji()} 2 Plik TLD Aby dodać plik TLD do projektu, należy: 1. Kliknąć prawym klawiszem myszy na nazwę projektu, następnie wybrać Other, gałąź Web i pole Tag Library Descriptor. Wcisnąć przycisk Next. 2. Po podaniu nazwy dla pliku konfiguracji, wcisnąć Next. Plik powinien zostać uzupełniony treścią opisującą połączenie pomiędzy nazwą URI i nazwą funkcji. Przykładowa treść: <?xml version="1.0" encoding="UTF-8"?> <taglib version="2.1" 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/webjsptaglibrary_2_1.xsd"> <tlib-version>1.0</tlib-version> <short-name>taglib</short-name> <uri>adresURI</uri> <function> <name>nazwaFunkcji</name> <function-class>nazwaPakietu.NazwaKlasy</function-class> <function-signature> typDanych nazwaFunkcji(listaArgumentówJakoTypy) </function-signature> </function> </taglib> 3