Przetwarzanie dokumentów XML i zaawansowane techniki WWW
Transkrypt
Przetwarzanie dokumentów XML i zaawansowane techniki WWW
Plan Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 09 T. Romańczukiewicz Jagiellonian University 2009/2010 T. Romańczukiewicz XML 09 Plan Plan 1 JSP 2 Podsumowanie T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Plan 1 JSP Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Bibliioteki tagów 2 Podsumowanie T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans XML, poprawnie sformuowanie Sposoby opisu XML DTD XML Schema XPATH Sposoby prezentacji CSS XSLT DOM SAX JAXB Serwlety JSP T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans JSP 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 dostep ˛ 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 T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans JSP JSP Jasielskie Stowarzyszenie Przedsiebiorcó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 dostep ˛ 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 T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans JSP 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 dostep ˛ 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 T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Listing 1: Przykład 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <HTML> <BODY> Hello! The time is now <%= new java.util.Date() %> <% / / This i s a s c r i p t l e t . Notice that the " date " / / v a r i a b l e we d e c l a r e h e r e i s a v a i l a b l e i n t h e / / embedded e x p r e s s i o n l a t e r on . System.out.println( "Evaluating date now" ); java.util.Date date = new java.util.Date(); %> Hello! The time is now <%= date %> </BODY> </HTML> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ 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˛ sie˛ ze statycznego kodu HTML, znaczników JSP oraz kodu utworzonego w jezyku ˛ JAVA - jest to kod serwletów, wiec ˛ niemożliwe jest zrozumienie technologii JSP bez znajomości technologii serwletów JSP - wygodniej stosować do tworzenia stron składajacych ˛ sie˛ 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 T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ 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 metode˛ service) Deklaracje: <%! Deklaracja pola lub metody serwletu, poza jakimikolwiek metodami T. Romańczukiewicz %>; XML 09 sa˛ wstawiane do treści klasy JSP Podsumowanie Przypomnienie JSP - wstep ˛ 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 bed ˛ a˛ mieć zmienne lokalne używane w metodzie _jspService (w serwletach wygenerowanych na podstawie stron JSP zastepuje ˛ metode˛ 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) T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Listing 2: skryptlet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <HTML> <BODY> <% / / 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 " System.out.println( "Evaluating date now" ); java.util.Date date = new java.util.Date(); %> Hello! The time is now <% out.println( date ); out.println( "<BR>Your machine’s address is " ); out.println( request.getRemoteHost()); %> </BODY> </HTML> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Mieszanie skryptletów z HTML Do generowania kodu HTML z wnetrza ˛ 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 2 3 4 5 6 7 8 9 10 11 12 <TABLE BORDER=2> <% for ( int i = 0; i < n; i++ ) { %> <TR> <TD>Number</TD> <TD><%= i+1 %></TD> </TR> <% } %> </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. T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Dyrektywy JSP W poprzednim przykładzie użyto java.util.Date. W JSP można użyć instrukcji import Listing 4: Dyrektywy w JSP 1 2 3 4 5 6 7 8 9 10 <%@ page import="java.util.*" %> <HTML> <BODY> <% System.out.println( "Evaluating date now" ); Date date = new Date(); %> Hello! The time is now <%= date %> </BODY> </HTML> Pierwsza linia w powyższym przykładzie jest nazywana "dyrektywa". ˛ Dyrektywa JSP zaczyna sie˛ sekwencja˛ <%@. Użyta tutaj dyrektywa jest nazywana dyrektywa˛ page. Dyrektywa page może zawierać liste˛ wszystkich importowanych pakietów. Aby zaimportować ich wiecej ˛ niż jeden, należy oddzielić poszczególne pakiety przecinkiem. Np. <%@ page import="java.util.*,java.text.*"%> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ 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 bedzie ˛ taki jakby nasz plik JSP zawierał w sobie załaczony ˛ tekst. Listing 5: Dyrektywa include 1 2 3 4 5 6 <HTML> <BODY> Going to include hello.jsp...<BR> <%@ include file="hello.jsp" %> </BODY> </HTML> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Deklaracje Listing 6: Deklaracje 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <%@ page import="java.util.*" %> <HTML> <BODY> <%! Date theDate = new Date(); Date getDate() { System.out.println( "In getDate() method" ); return theDate; } %> Hello! The time is now <%= getDate() %> </BODY> </HTML> Deklarowana zmienna typu Date theDate, oraz metoda getDate sa˛ dostepne ˛ w naszych skryptletach i wyrażeniach. Czas bedzie ˛ taki sam przy każdym przeładowaniu strony. Deklaracje sa˛ wyliczane tylko raz kiedy strona jest ładowana. T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Znaczniki 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 sie˛ 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, zamknietej ˛ w znaki < i >. Końcowy zaczyna sie˛ znakiem / umieszczonym po znaku <. Nazwy tagów zawieraja˛ znak dwukropka w środku, cz˛eść 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 zewnetrznej ˛ biblioteki, albo predefiniowane. T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Znaczniki Tagi predefiniowane zaczynaja sie˛ 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 naprawde˛ wywołuje załaczany ˛ cel w czasie wykonania. jsp:forward przekierowywuje do innej strony Listing 7: Akcja właczania ˛ 1 2 3 4 <HTML> <BODY> Going to include hello.jsp...<BR> <jsp:include page="hello.jsp"/> </BODY> </HTML> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Sesje w JSP 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 2 3 4 5 6 7 8 <HTML> <BODY> <FORM METHOD=POST ACTION="SaveName.jsp"> What’s your name? <INPUT TYPE=TEXT NAME=username SIZE=20> <P><INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML> Po wypełnieniu tego formularza odwiedzajacy ˛ zostanie przekierowany na strone˛ ŚaveName.jsp", która zachowa jego imie˛ w obiekcie sesja. Zmienna sesion to kolejna zmienna, która jest dostepna ˛ w JSP, tak jak zmienne out i request. T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Sesje w JSP cd. SaveName.jsp zachowuje imie˛ użytkownika w sesji i udostepnia ˛ link do kolejnej strony NextPage.jsp. Listing 9: SaveName.jsp 1 2 3 4 5 6 7 8 9 <% String name = request.getParameter( "username" ); session.setAttribute( "theName", name ); %> <HTML> <BODY> <A HREF="NextPage.jsp">Continue</A> </BODY> </HTML> NextPage.jsp pokazuje jak odzyskać zachowane imie. ˛ Listing 10: NextPage.jsp 1 2 3 4 5 <HTML> <BODY> Hello, <%= session.getAttribute( "theName" ) %> </BODY> </HTML> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans JSP ułatwia korzystanie z formularzy. Standardowy sposób obsługi JSP polega na zdefiniowaniu "bean". Potrzebujemy tylko zdefiniować klase, ˛ która zawierać bedzie ˛ pola takie jak pola formularza. Pola klasy musza˛ mieć śetters"(atrybuty) pasujace ˛ do pół formularza. Przykład Listing 11: GetName.html 1 2 3 4 5 6 7 8 9 10 <HTML> <BODY> <FORM METHOD=POST ACTION="SaveName.jsp"> What’s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> What’s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> What’s your age? <INPUT TYPE=TEXT NAME=age SIZE=4> <P><INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ 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ć bedzie ˛ pola takie jak pola formularza. Pola klasy musza˛ mieć śetters"(atrybuty) pasujace ˛ do pół formularza. Przykład Listing 12: GetName.html 1 2 3 4 5 6 7 8 9 10 <HTML> <BODY> <FORM METHOD=POST ACTION="SaveName.jsp"> What’s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> What’s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> What’s your age? <INPUT TYPE=TEXT NAME=age SIZE=4> <P><INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML> Żeby przesyłać te dane, zdefiniujmy klase˛ 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. T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans c.d. Listing 13: GetName.html 1 2 3 4 5 6 7 8 9 10 11 12 13 public class UserData { String username; String email; int age; public void setUsername( String value ) { public void setEmail( String value ) { public void setAge( int value ) { public String getUsername() public String getEmail() public int getAge() username = value; } email = value; } age = value; } { return username; { return email; { return age; } } } } Trzeba sie˛ upewnić,czy jej ścieżka jest dostepna ˛ 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. T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans c.d. Listing 14: SaveName.jsp 1 2 3 4 5 6 7 <jsp:useBean id="user" class="UserData" scope="session"/> <jsp:setProperty name="user" property="*"/> <HTML> <BODY> <A HREF="NextPage.jsp">Continue</A> </BODY> </HTML> Tag useBean bedzie ˛ szukał instancji UserData w tej sesji. Jeśli znajdzie ja˛ to ja˛ uaktualni. W przeciwnym przypadku stworzy nowa˛ instancje˛ (nowy bean) UserData Tag setProperty automatycznie przesyła dane wejściowe, łaczy nazwy z odpowiednimi metodami i umieszcza dane w bean! T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Formularz i Beans c.d. Listing 15: NextPage.jsp 1 2 3 4 5 6 7 8 9 <jsp:useBean id="user" class="UserData" scope="session"/> <HTML> <BODY> You entered<BR> Name: <%= user.getUsername() %><BR> Email: <%= user.getEmail() %><BR> Age: <%= user.getAge() %><BR> </BODY> </HTML> Tag useBean sie˛ powtarza. Bean jest dostepny ˛ przez nazwe˛ 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 bed ˛ a˛ ciagle ˛ dostepne, ˛ jeśli tylko dodamy taga jsp:setProperty. SaveName.jsp można byłoby rozbudować o obsługe˛ błedów ˛ - i np prośbe˛ o poprawienie danych T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Tag libraries W celu skozystania z biblioteki dodaje sie˛ dyrektywe: ˛ <%@ 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 bedziemy ˛ 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 2 3 4 5 6 7 8 9 10 11 12 13 14 <%@ taglib prefix="blx" uri="/blx.tld" %> <jsp:useBean id="user" class="UserData" scope="session"/> <HTML> <BODY> <blx:getProperty name="user" property="*"> <FORM METHOD=POST ACTION="SaveName.jsp"> What’s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> What’s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> What’s your age? <INPUT TYPE=TEXT NAME=age SIZE=4> <P><INPUT TYPE=SUBMIT> </FORM> </blx:getProperty> </BODY> </HTML> Aby wszystkie formularze były prawidłowo modyfikowane przez bibliotek˛e tagów, umieszczamy wszystkie pola formularza wewnatrz ˛ blx:getProperty Użytkownik może terazT.edytować dane. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Tag libraries c.d Listing 17: SaveName.jsp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <%@ taglib prefix="blx" uri="/blx.tld" %> <%! boolean haveError; StringBuffer errors; public void errorHandler( String field, String value, Exception ex ) { haveError = true; if ( errors == null ) errors = new StringBuffer(); else errors.append( "<P>" ); errors.append( "<P>Value for field \"" + field + "\" is invalid." ); if ( ex instanceof java.lang.NumberFormatException ) errors.append( " The value must be a number." ); } %> <% / / V a r i a b l e s m u s t 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 ! haveError = false; errors = null; %> <HTML><BODY> <jsp:useBean id="user" class="UserData" scope="session"/> <blx:setProperty name="user" property="*" onError="errorHandler"/> <% if ( haveError ) { out.println( errors.toString()); pageContext.include( "GetName.jsp" ); } else pageContext.forward( "NextPage.jsp" ); %> </BODY></HTML> haveError T. Romańczukiewicz XML 09 za każdym razem dlatego, że sa˛ i errors musi być ponownie inicjalizowane JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Tag libraries c.d i errors musi być ponownie inicjalizowane za każdym razem dlatego, że sa˛ one inicjalizowane na zewnatrz ˛ deklaracji. haveError jeśli pojawi sie˛ bład ˛ w trakcie procesu blx:setProperty, wyświetli sie˛ bład ˛ i wtedy załacz ˛ GetName.jsp, żeby użytkownik mógł poprawiać błedy. ˛ Jeśli nie pojawia˛ sie żadne błedy, ˛ automatycznie przekazujemy użytkownika do NextPage.jsp. Wciaż ˛ jest problem z formularzami, jesli age"pokaże ˛ sie˛ 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) ˛ T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Definiowanie własnych tagów Aby zdefiniować własny tag należy Zaimplementować klase˛ 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 2 3 4 5 6 7 8 9 10 11 public SimpleTag extends Tag Support { public int doStartTag() throws JspException { try { pageContext.getOut().print("Hello."); } catch (Exception ex) { throw new JspTagException("SimpleTag: " + e.getMessage()); } return SKIP_BODY; } public int doEndTag() { return EVAL_PAGE; } } Implementowane sa˛ metody doStartTag() i doEndTag(). T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Descriptor tag library descriptor (TLD) Jest dokumentem XML opisujacym ˛ bibliotek˛e tagów <taglib> - element główny <tlibversion> <jspversion> <shortname> <uri> 1 2 3 4 5 - może być traktowane jako przedrostek - URI jednoznacznie definujace ˛ bibliotek˛e <info> <tag> - wersja - wersja JSP, od której zależy biblioteka - Dodatkowe informacje o bibliotece - opis tagu. W najprostszym przypadku: <tag> <tagclass>classname</tagclass> <bodycontent>empty</bodycontent> ... </tag> T. Romańczukiewicz XML 09 JSP Podsumowanie Przypomnienie JSP - wstep ˛ Dyrektywy JSP Znaczniki Sesje Beans Istnieje również możliwość rozszerzenia definicji tagów o atrybuty zawartość (bodycontent) T. Romańczukiewicz XML 09 JSP Podsumowanie Plan 1 JSP 2 Podsumowanie T. Romańczukiewicz XML 09 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) T. Romańczukiewicz XML 09