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

Podobne dokumenty