Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 09

Podobne dokumenty
Wzorce prezentacji internetowych

Programowanie w Internecie. Podstawy użycia JSP. Paweł Kasprowski. vl06z

<HTML> <BODY> Hello World! </BODY> </HTML> potem zmienić rozszerzenie z ".html" na ".jsp" i załadować go w przeglądarce.

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

prepared by: Programowanie WWW Servlety

Serwery aplikacji. dr Radosław Matusik. radmat

mgr inż. Michał Paluch

Java wybrane technologie spotkanie nr 5. Java Server Pages

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki


2 Przykªad strony JSP. 3 Elementy dokumentu JSP

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Serwery aplikacji. dr Radosław Matusik. radmat

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wybrane działy Informatyki Stosowanej

1 Wprowadzenie do J2EE

Architektury Usług Internetowych. Laboratorium 1. Servlety

Aplikacje WWW - laboratorium

Przegląd technologii JSP

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Java Enterprise Edition spotkanie nr 4. Java Server Pages c.d.

Serwlety i JSP. Autor: Marek Zawadka deekay@gazeta.pl

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Programowanie obiektowe

Aplikacje Internetowe, Servlety, JSP i JDBC

Szablon główny (plik guestbook.php) będzie miał postać:

Aplikacje internetowe i rozproszone - laboratorium

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Architektury Usług Internetowych. Laboratorium 1 Servlety

Aplikacje Internetowe. przygotował:

Aplikacje Internetowe. Zakres przedmiotu. Plan ramowy. Tworzenie aplikacji internetowych w języku Java w środowisku Eclipse

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Złożone komponenty JSF wg

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Java wybrane technologie

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Kurs WWW 1. Paweł Rajba

Klasy i obiekty cz II

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Aplikacje WWW - laboratorium

Formularze w PHP dla początkujących

Klasy abstrakcyjne i interfejsy

prepared by: Programowanie WWW Model-View-Controller

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Złożone komponenty JSF wg

Wywoływanie metod zdalnych

Tworzenie aplikacji internetowych w języku Java

JavaServer Pages. Konrad Kurdej Karol Strzelecki

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

Aplikacje WWW - laboratorium

Wprowadzenie do JSP. Marcin Apostoluk, Tadeusz Pawlus, Wojciech Walczak. Technologie Biznesu Elektronicznego, 7 marzec 2006

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Wyjątki (exceptions)

Zaawansowane aplikacje WWW - laboratorium

Java wybrane technologie spotkanie nr 4. Serwlety c.d.

Serwlety i JSP na platformie Java EE. Damian Makarow

Wykład 4: Klasy i Metody

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Wykład 8: klasy cz. 4

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Wywoływanie metod zdalnych

Programowanie obiektowe

Dokumentacja do API Javy.

Zaawansowane aplikacje internetowe

Aplikacje WWW - laboratorium

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Remote Method Invocation 17 listopada 2010

XML extensible Markup Language. część 5

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Bazy Danych i Usługi Sieciowe

b) Jako nazwę projektu wpisz SerwletyJSPJSTL. Nie zmieniaj wartości pozostałych opcji. Kliknij przycisk Next >.

Podstawy programowania skrót z wykładów:

Laboratorium 7 Blog: dodawanie i edycja wpisów

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Tworzenie i wykorzystanie usług

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Podstawy i języki programowania

Michał Bielecki, KNI 'BIOS'

Serwlety Java: zagadnienia zaawansowane. Data Sources. Data Sources. Przykład pliku data-sources.xml

Aplikacje WWW - laboratorium

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Aplikacje WWW - laboratorium

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Aplikacje RMI Lab4

14. POZOSTAŁE CIEKAWE FUNKCJE

5.14 JSP - Przykład z obiektami sesji Podsumowanie Słownik Zadanie... 86

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java Server Pages. Leksykon kieszonkowy

Programowanie obiektowe

JAX-RS czyli REST w Javie. Adam Kędziora

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

KLASY, INTERFEJSY, ITP

Transkrypt:

Plan Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 09 T. Romańczukiewicz Jagiellonian University 2009/2010

Plan Plan 1 JSP 2 Podsumowanie

Plan JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans 1 JSP Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Bibliioteki tagów 2 Podsumowanie

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans XML, poprawnie sformuowanie Sposoby opisu XML DTD XML Schema XPATH Sposoby prezentacji CSS XSLT DOM SAX JAXB Serwlety JSP

JSP JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans JSP pozwala na umieszczanie w jednym dokumencie statycznego kodu HTML z zawartościa generowana dynamicznie (podobnie jak PHP) Kod generowany dynamicznie jest umieszczany w dokumencie HTML za pomoca znaczników <% oraz %> Jest powszechnie obsługiwana (nie narzuca systemu operacyjnego czy serwera WWW) Umożliwia pełny dostęp do technologii serwletów Serwlet można interpretować jako kod javy zawierajacy umieszczony w nim kod HTML JSP można interpretować jako kod HTML zawierajacy umieszczony wewnatrz kod javy

JSP JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans JSP Jasielskie Stowarzyszenie Przedsiębiorców pozwala na umieszczanie w jednym dokumencie statycznego kodu HTML z zawartościa generowana dynamicznie (podobnie jak PHP) Kod generowany dynamicznie jest umieszczany w dokumencie HTML za pomoca znaczników <% oraz %> Jest powszechnie obsługiwana (nie narzuca systemu operacyjnego czy serwera WWW) Umożliwia pełny dostęp do technologii serwletów Serwlet można interpretować jako kod javy zawierajacy umieszczony w nim kod HTML JSP można interpretować jako kod HTML zawierajacy umieszczony wewnatrz kod javy

JSP JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans JSP Java Server Pages pozwala na umieszczanie w jednym dokumencie statycznego kodu HTML z zawartościa generowana dynamicznie (podobnie jak PHP) Kod generowany dynamicznie jest umieszczany w dokumencie HTML za pomoca znaczników <% oraz %> Jest powszechnie obsługiwana (nie narzuca systemu operacyjnego czy serwera WWW) Umożliwia pełny dostęp do technologii serwletów Serwlet można interpretować jako kod javy zawierajacy umieszczony w nim kod HTML JSP można interpretować jako kod HTML zawierajacy umieszczony wewnatrz kod javy

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Listing 1: Przykład 1 <HTML> 2 <BODY> 3 4 Hello! The time is now <%= new java.util.date() %> 5 6 <% 7 / / T h i s i s a s c r i p t l e t. N o t i c e t h a t t h e " d a t e " 8 / / v a r i a b l e we d e c l a r e here i s a v a i l a b l e i n t h e 9 / / embedded e x p r e s s i o n l a t e r on. 10 System.out.println( "Evaluating date now" ); 11 java.util.date date = new java.util.date(); 12 %> 13 Hello! The time is now <%= date %> 14 </BODY> 15 </HTML>

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans JSP a Servlety Dokumenty JSP sa niejawnie, automatycznie przekształcane do postaci serwletów - łatwiej i przejrzyściej jest tworzyć zwykłe strony HTML niż stosować instrukcje println tworzace kod HTML. Strony JSP składaja się ze statycznego kodu HTML, znaczników JSP oraz kodu utworzonego w języku JAVA - jest to kod serwletów, więc niemożliwe jest zrozumienie technologii JSP bez znajomości technologii serwletów JSP - wygodniej stosować do tworzenia stron składajacych się z dużej ilości statycznego HTML (prezentacja danych) Serwlety lepsze sa do zastosowań, w których postać generowanych (zwykle dynamicznie) wyników jest zmienna a wykonywane zadania wymagaja tworzenia niewielu danych wyjściowych (przetwarzanie danych) Optymalne rozwiazanie zastosowanie serwletów i JSP

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Typy elementów skryptowych JSP Elementy skryptowe pozwalaja na wstawianie kodu javy do serwletów generowanych na podstawie stron JSP, sa to: Wyrażenia postaci: <%= wyrazenie javy %>; sa przetwarzane a wyniki ich wykonania zostaja wstawione do kodu generowanego przez serwlet Skryptlety postaci: <% kod javy %>; sa wstawiane do metody _jspservice serwletu (wywoływanej przez metodę service) Deklaracje: <%! Deklaracja pola lub metody %>; sa wstawiane do treści klasy serwletu, poza jakimikolwiek metodami

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Stosowane do umieszczania wartości bezpośrednio w wynikach przekazywanych do klienta, wyrażenie jest obliczane w czasie obsługi żadania, np.: <%= new java.util.date()%> Aby uprościć postać wyrażeń można w nich używać zmiennych predefiniowanych (obiektów niejawnych), które informuja jakie nazwy będa mieć zmienne lokalne używane w metodzie _jspservice (w serwletach wygenerowanych na podstawie stron JSP zastępuje metodę doget). Najważniejsze to: request (obiekt HttpServletRequest), np. Twój komputer: <%= request.getremotehost()%> response (obiekt HttpServletResponse) session (obiekt HttpSession) out (obiekt Writer) buforowana wersja obiektu JspWriter używana do przesyłania wyników do klienta application (obiekt ServletContext) tej struktury danych używaja wspólnie wszystkie servlety i strony JSP wchodzace w skład danej aplikacji WWW (do przechowywania wspólnych danych)

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Listing 2: skryptlet 1 <HTML> 2 <BODY> 3 <% 4 / / T h i s s c r i p t l e t d e c l a r e s and i n i t i a l i z e s " d a t e " 5 System.out.println( "Evaluating date now" ); 6 java.util.date date = new java.util.date(); 7 %> 8 Hello! The time is now 9 <% 10 out.println( date ); 11 out.println( "<BR>Your machine s address is " ); 12 out.println( request.getremotehost()); 13 %> 14 </BODY> 15 </HTML>

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Mieszanie skryptletów z HTML Do generowania kodu HTML z wnętrza skryptletu można używać zmiennej out. Dla bardziej skomplikowanego HTMLa używanie cały czas zmiennej out może być kłopotliwe. Łatwiej jest mieszać skryptlety z HTMLem: Listing 3: Przykład - generowanie tabelki 1 <TABLE BORDER=2> 2 <% 3 for ( int i = 0; i < n; i++ ) { 4 %> 5 <TR> 6 <TD>Number</TD> 7 <TD><%= i+1 %></TD> 8 </TR> 9 <% 10 } 11 %> 12 </TABLE> Zanim to zadziała trzeba jeszcze ustawić zmienna int n. Znaki %> i %< pozwalaja powrócić do HTML a potem spowrotem do skryptletu Każda instrukcja typu while, for lub if kontroluje również HTML.

Dyrektywy JSP JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans W poprzednim przykładzie użyto java.util.date. W JSP można użyć instrukcji import Listing 4: Dyrektywy w JSP 1 <%@ page import="java.util.*" %> 2 <HTML> 3 <BODY> 4 <% 5 System.out.println( "Evaluating date now" ); 6 Date date = new Date(); 7 %> 8 Hello! The time is now <%= date %> 9 </BODY> 10 </HTML> Pierwsza linia w powyższym przykładzie jest nazywana "dyrektywa". Dyrektywa JSP zaczyna się sekwencja <%@. Użyta tutaj dyrektywa jest nazywana dyrektywa page. Dyrektywa page może zawierać listę wszystkich importowanych pakietów. Aby zaimportować ich więcej niż jeden, należy oddzielić poszczególne pakiety przecinkiem. Np. <%@ page import="java.util.*,java.text.*"%>

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Dyrektywa include jest używana do fizycznego załaczania zawartosci innego pliku. Załaczany plik może mieć rozszerzenie.html.jsp albo jakiekolwiek inne. Rezultat będzie taki jakby nasz plik JSP zawierał w sobie załaczony tekst. Listing 5: Dyrektywa include 1 <HTML> 2 <BODY> 3 Going to include hello.jsp...<br> 4 <%@ include file="hello.jsp" %> 5 </BODY> 6 </HTML>

Deklaracje JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Listing 6: Deklaracje 1 <%@ page import="java.util.*" %> 2 <HTML> 3 <BODY> 4 <%! 5 Date thedate = new Date(); 6 Date getdate() 7 { 8 System.out.println( "In getdate() method" ); 9 return thedate; 10 } 11 %> 12 Hello! The time is now <%= getdate() %> 13 </BODY> 14 </HTML> Deklarowana zmienna typu Date thedate, oraz metoda getdate sa dostępne w naszych skryptletach i wyrażeniach. Czas będzie taki sam przy każdym przeładowaniu strony. Deklaracje sa wyliczane tylko raz kiedy strona jest ładowana.

Znaczniki JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Moga zapisywać do strumienia wyjściowego oraz tworzyć, modyfikować i używać obiekty. Sposób wykonania akcji zależy od cech obsługiwanego żadania. Składnia akcji opiera się na XML Tagi JSP nie uzywaja znaku <%, lecz <. Tag JSP jest czymś w rodzaju tagu HTML. Może on mieć "tag poczatkowy", ćiało tagu"i "tag końcowy". Poczatkowy i końcowy tag używaja nazwy tagu, zamkniętej w znaki < i >. Końcowy zaczyna się znakiem / umieszczonym po znaku <. Nazwy tagów zawieraja znak dwukropka w środku, część przed dwukropkiem opisuje typ tagu. Na przykład: <some:tag> body </some:tag> Jeśli tag nie potrzebuje ciała, poczatek i koniec moga być wygodnie złaczone ze soba, tak jak <some:tag/> Tagi moga być dwojakiego rodzaju: ładowane z zewnętrznej biblioteki, albo predefiniowane.

Znaczniki JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Tagi predefiniowane zaczynaja się znakami jsp:. Np. jsp:include jest predefiniowanym tagiem, który jest używany do załaczania innych stron. Działa ona podobnie jak dyrektywa include ale zamiast ładowania tekstu załaczanego pliku w oryginalny, tak naprawdę wywołuje załaczany cel w czasie wykonania. jsp:forward przekierowywuje do innej strony Listing 7: Akcja właczania 1 <HTML> <BODY> 2 Going to include hello.jsp...<br> 3 <jsp:include page="hello.jsp"/> 4 </BODY> </HTML>

Sesje w JSP JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Sesja jest obiektem zwiazanym z odwiedzajacym. Można do niego wrzucać pewne dane i potem je odczytywać. Dla każdego odwiedzajacego tworzony jest nowy obiekt sesji. Przykład: Formularz Listing 8: Formularz 1 <HTML> 2 <BODY> 3 <FORM METHOD=POST ACTION="SaveName.jsp"> 4 What s your name? <INPUT TYPE=TEXT NAME=username SIZE=20> 5 <P><INPUT TYPE=SUBMIT> 6 </FORM> 7 </BODY> 8 </HTML> Po wypełnieniu tego formularza odwiedzajacy zostanie przekierowany na stronę ŚaveName.jsp", która zachowa jego imię w obiekcie sesja. Zmienna sesion to kolejna zmienna, która jest dostępna w JSP, tak jak zmienne out i request.

Sesje w JSP cd. JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans SaveName.jsp zachowuje imię użytkownika w sesji i udostępnia link do kolejnej strony NextPage.jsp. Listing 9: SaveName.jsp 1 <% 2 String name = request.getparameter( "username" ); 3 session.setattribute( "thename", name ); 4 %> 5 <HTML> 6 <BODY> 7 <A HREF="NextPage.jsp">Continue</A> 8 </BODY> 9 </HTML> NextPage.jsp pokazuje jak odzyskać zachowane imię. Listing 10: NextPage.jsp 1 <HTML> 2 <BODY> 3 Hello, <%= session.getattribute( "thename" ) %> 4 </BODY> 5 </HTML>

Formularz i Beans JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans JSP ułatwia korzystanie z formularzy. Standardowy sposób obsługi JSP polega na zdefiniowaniu "bean". Potrzebujemy tylko zdefiniować klasę, która zawierać będzie pola takie jak pola formularza. Pola klasy musza mieć śetters"(atrybuty) pasujace do pół formularza. Przykład Listing 11: GetName.html 1 <HTML> 2 <BODY> 3 <FORM METHOD=POST ACTION="SaveName.jsp"> 4 What s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> 5 What s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> 6 What s your age? <INPUT TYPE=TEXT NAME=age SIZE=4> 7 <P><INPUT TYPE=SUBMIT> 8 </FORM> 9 </BODY> 10 </HTML>

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans c.d. JSP ułatwia korzystanie z formularzy. Standardowy sposób obsługi JSP polega na zdefiniowaniu "bean". Potrzebujemy tylko zdefiniować klase, która zawierać będzie pola takie jak pola formularza. Pola klasy musza mieć śetters"(atrybuty) pasujace do pół formularza. Przykład Listing 12: GetName.html 1 <HTML> 2 <BODY> 3 <FORM METHOD=POST ACTION="SaveName.jsp"> 4 What s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> 5 What s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> 6 What s your age? <INPUT TYPE=TEXT NAME=age SIZE=4> 7 <P><INPUT TYPE=SUBMIT> 8 </FORM> 9 </BODY> 10 </HTML> Żeby przesyłać te dane, zdefiniujmy klasę javy z polami username, email i age i wprowadźmy metody publiczne setter setusername, setemail i setage i getter ; podobnie ze słowem get zamiast set.

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans c.d. Listing 13: GetName.html 1 public class UserData { 2 String username; 3 String email; 4 int age; 5 6 public void setusername( String value ) { username = value; } 7 public void setemail( String value ) { email = value; } 8 public void setage( int value ) { age = value; } 9 10 public String getusername() { return username; } 11 public String getemail() { return email; } 12 public int getage() { return age; } 13 } Trzeba się upewnić,czy jej ścieżka jest dostępna na serwerze. Na serwerze może być także zdefiniowany specjalny katalog, gdzie możemy umieścić class bean. Jeśli zmienimy ścieżke do niego, serwer musi być zatrzymany i zrestartowany,jeśli aktualnie pracuje.

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans c.d. Listing 14: SaveName.jsp 1 <jsp:usebean id="user" class="userdata" scope="session"/> 2 <jsp:setproperty name="user" property="*"/> 3 <HTML> 4 <BODY> 5 <A HREF="NextPage.jsp">Continue</A> 6 </BODY> 7 </HTML> Tag usebean będzie szukał instancji UserData w tej sesji. Jeśli znajdzie ja to ja uaktualni. W przeciwnym przypadku stworzy nowa instancję (nowy bean) UserData Tag setproperty automatycznie przesyła dane wejściowe, łaczy nazwy z odpowiednimi metodami i umieszcza dane w bean!

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans c.d. Listing 15: NextPage.jsp 1 <jsp:usebean id="user" class="userdata" scope="session"/> 2 <HTML> 3 <BODY> 4 You entered<br> 5 Name: <%= user.getusername() %><BR> 6 Email: <%= user.getemail() %><BR> 7 Age: <%= user.getage() %><BR> 8 </BODY> 9 </HTML> Tag usebean się powtarza. Bean jest dostępny przez nazwę zmiennej user z klasy UserData. Dane wprowadzane przez użytkownika sa przechowywane w bean. Przykład można byłoby uprościć. Nie potrzebujemy ŚaveName.jsp", celem dla GetName.html może być NextPage.jsp, i dane będa ciagle dostępne, jeśli tylko dodamy taga jsp:setproperty. SaveName.jsp można byłoby rozbudować o obsługę błędów - i np prośbę o poprawienie danych

Tag libraries JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans W celu skozystania z biblioteki dodaje się dyrektywę: <%@ taglib prefix="blx"uri="/blx.tld"%> "uriókreśla gdzie znaleźć opis biblioteki tagów. "Prefix"jest unikatowy dla biblioteki tagów. Ta dyrektywa mówi, że będziemy używać biblioteki tagów zaczynajac od blx: Biblioteka Blazix wprowadza tag blx:getproperty. Ten tag może być używany, żeby pozwolić użytkownikom na edytowanie danych. W pliku GetName.jsp dodamy i umieścimy formularz wewnatrz blx:getproperty Listing 16: GetName.jsp 1 <%@ taglib prefix="blx" uri="/blx.tld" %> 2 <jsp:usebean id="user" class="userdata" scope="session"/> 3 <HTML> 4 <BODY> 5 <blx:getproperty name="user" property="*"> 6 <FORM METHOD=POST ACTION="SaveName.jsp"> 7 What s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> 8 What s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> 9 What s your age? <INPUT TYPE=TEXT NAME=age SIZE=4> 10 <P><INPUT TYPE=SUBMIT> 11 </FORM> 12 </blx:getproperty> 13 </BODY> 14 </HTML> Aby wszystkie formularze były prawidłowo modyfikowane przez bibliotekę tagów, umieszczamy wszystkie pola formularza wewnatrz blx:getproperty Użytkownik może teraz edytować dane.

haveerror i errors musi być ponownie T. Romańczukiewicz inicjalizowane XML 09 za każdym razem dlatego, że sa Tag libraries c.d JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Listing 17: SaveName.jsp 1 <%@ taglib prefix="blx" uri="/blx.tld" %> 2 <%! 3 boolean haveerror; 4 StringBuffer errors; 5 6 public void errorhandler( String field, String value, Exception ex ) { 7 haveerror = true; 8 if ( errors == null ) errors = new StringBuffer(); 9 else errors.append( "<P>" ); 10 errors.append( "<P>Value for field \"" + field + "\" is invalid." ); 11 if ( ex instanceof java.lang.numberformatexception ) 12 errors.append( " The value must be a number." ); 13 } 14 %> 15 <% 16 / / V a r i a b l e s must be i n i t i a l i z e d o u t s i d e d e c l a r a t i o n! 17 haveerror = false; 18 errors = null; 19 %> 20 <HTML><BODY> 21 <jsp:usebean id="user" class="userdata" scope="session"/> 22 <blx:setproperty name="user" property="*" onerror="errorhandler"/> 23 <% 24 if ( haveerror ) { 25 out.println( errors.tostring()); 26 pagecontext.include( "GetName.jsp" ); 27 } else pagecontext.forward( "NextPage.jsp" ); 28 %> 29 </BODY></HTML>

Tag libraries c.d JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans haveerror i errors musi być ponownie inicjalizowane za każdym razem dlatego, że sa one inicjalizowane na zewnatrz deklaracji. jeśli pojawi się bład w trakcie procesu blx:setproperty, wyświetli się bład i wtedy załacz GetName.jsp, żeby użytkownik mógł poprawiać błędy. Jeśli nie pojawia sie żadne błędy, automatycznie przekazujemy użytkownika do NextPage.jsp. Wciaż jest problem z formularzami, jesli age"pokaże się zainicjalizowany na zero zamiast pusty. To można łatwo naprawić dodajac emptyint=0 do obu tagów blx:getproperty i blx:setproperty (pola bean powinny być inicjalizowane na "0"). "0" nie jest odpowiednia wartościa dla wieku dlatego możemy jej użyc do markowania pustych stringów (można wybrać inna wartość np ujemna)

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Definiowanie własnych tagów Aby zdefiniować własny tag należy Zaimplementować klasę handler dla tagu zadeklarować tag w tag library descriptor Pełny przykład na http://java.sun.com/products/jsp/tutorial/taglibraries7.html#62074 Klasa dla znacznika pustego <tlt:simple /> Listing 18: SimpleTag.java 1 public SimpleTag extends Tag Support { 2 public int dostarttag() throws JspException { 3 try { 4 pagecontext.getout().print("hello."); 5 } catch (Exception ex) { 6 throw new JspTagException("SimpleTag: " + e.getmessage()); 7 } 8 return SKIP_BODY; 9 } 10 public int doendtag() { return EVAL_PAGE; } 11 } Implementowane sa metody dostarttag() i doendtag().

Descriptor JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans tag library descriptor (TLD) Jest dokumentem XML opisujacym bibliotekę tagów <taglib> - element główny <tlibversion> - wersja <jspversion> - wersja JSP, od której zależy biblioteka <shortname> - może być traktowane jako przedrostek <uri> - URI jednoznacznie definujace bibliotekę <info> - Dodatkowe informacje o bibliotece <tag> - opis tagu. W najprostszym przypadku: 1 <tag> 2 <tagclass>classname</tagclass> 3 <bodycontent>empty</bodycontent> 4... 5 </tag>

JSP Podsumowanie Przypomnienie JSP - wstęp Dyrektywy JSP Znaczniki Sesje Beans Istnieje również możliwość rozszerzenia definicji tagów o atrybuty zawartość (bodycontent)

Plan JSP Podsumowanie 1 JSP 2 Podsumowanie

JSP Podsumowanie JSP pozwala na dynamiczne generowanie zawartości HTML, XML itp. Można mieszać statyczna zawartość (czysty HTML) z zawartościa dynamicza (tzw. skryptlety) - wygodniejsze użycie niż w przypadku serwletów Zawartość dynamiczna generowana jest z kodu javy, który zamieniany jest na servlet. Możliwe jest użycie dyrektyw (np wczytywanie innych plików) Można używać znaczników Możliwa jest obsługa sesji Do obsługi formularzy najlepiej jest korzystać z Beanów, czyli klas ze zdefiniowanymi metodami typu get i set. Wyniki z formularza moga zostać przepisane do pól obiektu, który można przekazać w sesji Możliwe jest też korzystanie z bibliotek tagów. Można też samodzielie tworzyć nowe tagi (klasa handler + opis w TLD)