Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Podzikowania ......................................................................................................................................... 13
O autorach ................................................................................................................................................ 14
Wprowadzenie ......................................................................................................................................... 15
Rozdzia 1. Oglne informacje o serwletach i JavaServer Pages ........................................................25
1.1. Rola serwletw .................................................................................................. 25
1.2. Dlaczego warto dynamicznie generowa strony WWW? .......................................... 27
1.3. Przedstawienie kodu serwletu ............................................................................. 28
1.4. Zalety serwletw w porwnaniu ze zwykymi programami CGI ................................. 30
Efektywno ................................................................................................. 30
Wygoda ........................................................................................................ 30
Due moliwoci ............................................................................................ 31
Przenono ................................................................................................. 31
Niewielkie koszty ........................................................................................... 31
Bezpieczestwo ............................................................................................ 32
Gwny kierunek rozwoju ................................................................................ 33
1.5. JavaServer Pages .............................................................................................. 33
Cz I Serwlety
35
Spis treci
Spis treci
Cz II JavaServer Pages
285
Rozdzia 11. Wywoywanie kodu Javy przy uyciu elementw skryptowych JSP ........................... 303
11.1. Tworzenie tekstu szablonu .............................................................................. 303
11.2. Wywoywanie kodu Javy w stronach JSP ........................................................... 304
Typy elementw skryptowych JSP .................................................................. 305
11.3. Ograniczanie iloci kodu umieszczanego na stronach JSP ................................. 305
Znaczenie stosowania pakietw ................................................................... 307
11.4. Stosowanie wyrae JSP ................................................................................ 309
Zmienne predefiniowane .............................................................................. 309
Te same rozwizania w serwletach i stronach JSP .......................................... 309
Zapis wyrae przy uyciu skadni XML .......................................................... 311
11.5. Przykad: wyraenia JSP .................................................................................. 311
11.6. Porwnanie serwletw i stron JSP ................................................................... 313
11.7. Pisanie skryptletw ........................................................................................ 315
Te same rozwizania w serwletach i stronach JSP .......................................... 316
Skadnia XML do zapisu skryptletw ............................................................. 317
11.8. Przykad skryptletu ......................................................................................... 317
11.9. Zastosowanie skryptletw do warunkowego wykonywania fragmentw stron JSP ... 319
Spis treci
Rozdzia 15. Integracja serwletw i JSP: architektura model-widok-kontroler (MVC) ................... 401
15.1. Potrzeba stosowania architektury MVC ............................................................ 401
Szkielety MVC ............................................................................................. 403
Architektura czy podejcie? .......................................................................... 403
15.2. Implementacja architektury MVC przy uyciu interfejsu RequestDispatcher ......... 403
Definiowanie komponentw reprezentujcych dane ........................................ 404
Tworzenie serwletw obsugujcych dania .................................................. 404
Zapis danych w komponentach ..................................................................... 405
Zapis wynikw ............................................................................................. 405
Przekazywanie dania na stron JSP ........................................................... 406
Pobieranie danych z komponentw ............................................................... 408
15.3. Podsumowanie kodu architektury MVC ............................................................ 409
Przechowywanie wspuytkowanych danych w obiekcie dania ..................... 409
Przechowywanie wspuytkowanych danych w obiekcie sesji .......................... 409
Przechowywanie wspuytkowanych danych w obiekcie aplikacji ..................... 410
15.4. Interpretacja adresw URL na stronie docelowej ............................................... 410
15.5. Stosowanie architektury MVC: dostp do stanu konta bankowego ..................... 411
15.6. Porwnanie trzech sposobw wspuytkowania danych .................................... 417
Wspuytkowanie danych przy uyciu obiektu dania ................................... 418
Wspuytkowanie danych przy uyciu obiektu sesji ........................................ 419
Wspuytkowanie danych przy uyciu kontekstu serwletu ............................... 422
15.7. Przekazywanie da ze stron JSP ................................................................... 424
15.8. Doczanie stron ............................................................................................ 425
Rozdzia 16. Upraszczanie dostpu do kodu Javy: jzyk wyrae JSP 2.0 ...................................... 427
16.1. Cele stosowania jzyka wyrae ...................................................................... 427
16.2. Stosowanie jzyka wyrae ............................................................................. 429
Oznaczanie znakw specjalnych ................................................................... 430
16.3. Zapobieganie przetwarzaniu wyrae EL ........................................................... 430
Wyczanie obsugi jzyka wyrae w caej aplikacji ........................................ 430
Wyczanie obsugi jzyka wyrae na wielu stronach JSP ............................... 431
Wyczanie obsugi jzyka wyrae na konkretnych stronach JSP ..................... 431
Wyczanie obsugi konkretnych instrukcji jzyka wyrae ............................... 432
16.4. Uniemoliwianie stosowania zwyczajnych elementw skryptowych ...................... 432
10
455
Rozdzia 17. Obsuga baz danych przy uyciu JDBC ........................................................................... 457
17.1. Podstawowe sposoby stosowania JDBC ........................................................... 458
Zaadowanie sterownika .............................................................................. 459
Okrelenie adresu URL poczenia ................................................................ 461
Nawizanie poczenia ................................................................................. 461
Utworzenie polecenia ................................................................................... 462
Wykonanie zapytania ................................................................................... 462
Przetworzenie wynikw ................................................................................. 463
Zamknicie poczenia ................................................................................ 466
17.2. Prosty przykad wykorzystania JDBC ................................................................. 466
17.3. Narzdzia JDBC uatwiajce korzystanie z baz danych ....................................... 472
17.4. Stosowanie polece przygotowanych ............................................................... 483
17.5. Tworzenie polece wywoywanych .................................................................... 487
Zdefiniowanie wywoania procedury zachowanej ............................................. 488
Przygotowanie obiektu CallableStatement reprezentujcego procedur ............ 488
Zarejestrowanie typw parametrw wyjciowych ............................................. 489
Podanie wartoci parametrw wejciowych .................................................... 489
Wykonanie procedury zachowanej ................................................................. 489
Pobranie parametrw wyjciowych ................................................................ 489
Przykad ...................................................................................................... 490
17.6. Stosowanie transakcji .................................................................................... 493
17.7. Odwzorowywanie danych na obiekty przy uyciu szkieletw ORM ........................ 497
Rozdzia 18. Konfiguracja baz danych MS Access, MySQL oraz Oracle9i ......................................... 505
18.1. Konfiguracja programu Microsoft Access do wsppracy z JDBC ......................... 506
Wybr systemowej nazwy rda danych
w programie Administrator rde danych ODBC ........................................ 507
Wybr sterownika dla DSN ........................................................................... 507
Wybr rda danych .................................................................................... 508
Zaakceptowanie nowego DSN ...................................................................... 509
Spis treci
11
Dodatki
593
16
428
Cz II
JavaServer Pages
Rysunek 16.1.
Strategie
wywoywania
dynamicznego
kodu ze stron JSP
jedynie na pobieranie wartoci prostych waciwoci; jeli waciwo jest kolekcj lub innym komponentem, to odczytanie jej wartoci wymaga zastosowania zoonego wyraenia
napisanego w Javie (a przecie zastosowanie architektury MVC ma na celu uniknicie takiej koniecznoci).
Jzyk wyrae JSP 2.0 pozwala na uproszczenie warstwy prezentacji aplikacji WWW, poprzez zastpienie trudnego do utrzymania kodu skadajcego si z elementw skryptowych
JSP lub znacznikw akcji jsp:useBean oraz jsp:getProperty znacznie krtszymi i bardziej
przejrzystymi wyraeniami o postaci:
${wyraenie}
Rozdzia 16.
429
W niniejszym rozdziale zostao przedstawione zastosowanie jzyka wyrae w zwyczajnym tekcie. Natomiast w II tomie ksiki podano informacje o stosowaniu elementw EL
w atrybutach samodzielnie tworzonych znacznikw niestandardowych oraz znacznikw
wchodzcych w skad bibliotek JSTL (ang. JSP Standard Tag Library) i JSF (ang. JavaServer Faces).
430
Cz II
JavaServer Pages
Rozdzia 16.
431
zgodny ze specyfikacj JSP 1.2, a zatem oznacza, e jzyk wyrae powinien zosta domylnie wyczony w caej aplikacji.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
</web-app>
Z kolei poniszy plik web.xml jest zgodny ze specyfikacj JSP 2.0, co sprawia, e jzyk
wyrae bdzie domylnie wczony. (Oba pliki XML mona znale w archiwum przykadw zamieszczonych w niniejszej ksice, dostpnym pod adresem ftp://ftp.helion.pl/
przyklady/jsjsp1.zip).
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
</web-app>
432
Cz II
JavaServer Pages
Naley zauway, i atrybut isELEnabled zosta wprowadzony w specyfikacji JSP 2.0, a zastosowanie go w aplikacjach zgodnych ze specyfikacj JSP 1.2 zostanie potraktowane jako
bd. Nie mona zatem wykorzysta tej metody, by zapewni poprawne dziaanie stron JSP
na nowszych i starszych serwerach, bez koniecznoci wprowadzania adnych zmian w ich
kodzie. Dlatego te zastosowanie elementu jsp-property-group jest zazwyczaj lepszym
rozwizaniem ni stosowanie atrybutu isELEnabled.
Rozdzia 16.
433
W rzeczywistoci, niektry programici decyduj si nawet na cakowit rezygnacj ze stosowania takich standardowych elementw skryptowych. W takim przypadku mona uy
elementu scripting-invalid umieszczanego wewntrz elementu jsp-propety-group, ktry
sprawia, e zastosowanie standardowego elementu skryptowego zostanie potraktowane jako
bd. Poniszy plik web.xml przedstawia przykad zastosowania tego elementu:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</web-app>
434
Cz II
JavaServer Pages
Jak wida, drugie z przedstawionych wyrae jest znacznie dusze, a co gorsza, wymaga
jawnego zastosowania kodu napisanego w jzyku Java. Istnieje co prawda moliwo wyeliminowania kodu Javy, jednak w efekcie trzeba uy jeszcze bardziej rozbudowanego
znacznika akcji jsp:useBean:
<jsp:useBean id="nazwa" type="jakisPakiet.JakasKlasa" scope="...">
<%= nazwa %>
Poza tym, w przypadku stosowania znacznika jsp:useBean naley wiedzie, w jakim zakresie
zostaa zapisana zmienna, oraz zna pen nazw jej klasy. Stanowi to dosy duy problem,
zwaszcza jeli tworzeniem stron JSP nie zajmuje si autor serwletu, lecz inna osoba.
Przykad
W ramach przedstawienia sposobu korzystania ze zmiennych dostpnych w okrelonym
zakresie, serwlet ScopedVars (przedstawiony na listingu 16.1) zapisuje pewien acuch znakw
w obiekcie HttpServletRequest, inny acuch w obiekcie HttpSession oraz dat w obiekcie
ServletContext. Nastpnie obsuga dania jest przekazywana na stron JSP (przedstawion
na listingu 16.2 oraz rysunku 16.2), na ktrej atrybuty te s wywietlane przy uyciu wyraenia
${nazwaAtrybutu}.
Listing 16.1. ScopedVars.java
package coreservlets;
/** Serwlet tworzy zmienne dostpne w okrelonym zakresie
* (czyli obiekty zapisywane jako atrybuty w pewnych
* standardowych miejscach). Nastpnie przekazuje obsug
* dania do strony JSP, ktra wywietla wartoci zapisane
* przez serwlet przy uyciu jzyka wyrae.
*/
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ScopedVars extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
Rozdzia 16.
Rysunek 16.2.
Jzyk wyrae
JSP 2.0 upraszcza
dostp
do zmiennych
dostpnych
w okrelonych
zakresach
czyli obiektw
zapisywanych
jako atrybuty obiektu
strony, dania,
sesji lub kontekstu
serwletu
435
436
Cz II
JavaServer Pages
Warto zwrci uwag, i strona JSP odwouje si do wszystkich atrybutw przy uyciu tego samego zapisu, niezalenie od tego, w jakim zakresie zostay one zapisane. Zazwyczaj
takie rozwizanie jest wygodne, gdy serwlety obsugujce rozwizania typu MVC nadaj
zapamitywanym obiektom unikalne nazwy atrybutw. Niemniej jednak, z technicznego
punktu widzenia, istnieje moliwo kilkukrotnego zastosowania tej samej nazwy. Dlatego
naley pamita, e jzyk wyrae poszukuje atrybutu w nastpujcej kolejnoci: obiekt
PageContext, obiekt HttpServletRequest, obiekt HttpSession i na kocu obiekt ServletContext.
Aby przedstawi ten aspekt dziaania jzyka wyrae, serwlet zapisuje obiekt w trzech rnych zakresach, za kadym razem nadajc mu t sam warto klucza repeated. Warto zwrcona przez wyraenie ${repeated} (widoczna na rysunku 16.2) odpowiada pierwszemu atrybutowi odnalezionemu podczas przeszukiwania zakresw (w tym przypadku
zostanie ona odczytana z obiektu HttpServletRequest). Informacje na temat ograniczania
poszukiwania atrybutw do konkretnego zakresu zostay podane w podrozdziale 16.8 (Odwoania do obiektw niejawnych).
Co wicej, w przypadku zastosowania jzyka wyrae, jeli nie uda si odnale atrybutu, to
zostanie zwrcony pusty acuch znakw. Z kolei stosujc standardowe elementy skryptowe,
naleayby doda kolejny fragment kodu Javy, zabezpieczajcy przez zgoszeniem wyjtku
NullPointerException.
Rozdzia 16.
437
Czytelnik zapewne pamita, e elementy skryptowe JSP nie s jedyn alternatyw dla jzyka
wyrae. O ile tylko znany jest zakres, w jakim zosta zapisany obiekt, oraz pena nazwa jego
klasy, to wyraenie:
${klient.firstName}
Jednak jzyk wyrae pozwala na dowolne zagniedanie waciwoci. A zatem, gdyby klasa
NameBean dysponowaa waciwoci address (czyli metod getAddress) zwracajc obiekt typu
Address, ktry zawieraby waciwo zipCode (czyli metod getZipCode), to do waciwoci
zipCode mona by si odwoa w nastpujcy sposb:
${klient.address.zipCode}
Podobnego odwoania nie mona wykona przy uyciu znacznikw jsp:useBean oraz
jsp:getProperty konieczne byoby zastosowanie jawnego kodu napisanego w Javie.
mona napisa:
${nazwa["wlasciwosc"]}
438
Cz II
JavaServer Pages
Przykad
Na listingu 16.3 zosta przedstawiony przykadowy serwlet BeanProperties. Serwlet ten
tworzy komponent EmployeeBean (przedstawiony na listingu 16.4), zapisuje go w obiekcie
dania, jako atrybut o nazwie employee, po czym przekazuje danie do strony JSP.
Listing 16.3. BeanProperties.java
package coreservlets;
/** Serwlet tworzcy kilka komponentw, ktrych waciwoci
* zostan wywietlone przy uyciu jzyka wyrae JSP 2.0.
*/
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class BeanProperties extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
NameBean name = new NameBean("Marty", "Hall");
CompanyBean company =
new CompanyBean("coreservlets.com",
"J2EE - Kursy i konsulatacje");
EmployeeBean employee = new EmployeeBean(name, company);
request.setAttribute("employee", employee);
RequestDispatcher dispatcher =
request.getRequestDispatcher("/el/bean-properties.jsp");
dispatcher.forward(request, response);
}
}
Rozdzia 16.
439
Klasa EmployeeBean definiuje dwie waciwoci name oraz company zawierajce odpowiednio obiekty typw NameBean (patrz listing 16.5) oraz CompanyBean (patrz listing 16.6).
Klasa NameBean definiuje waciwoci lastName oraz firstName, z kolei klasa CompanyBean
definiuje waciwoci companyName oraz business. Strona JSP, przedstawiona na listingu 16.7,
wywietla wartoci wszystkich czterech atrybutw, uywajc do tego celu nastpujcych
wyrae EL:
${employee.name.firstName}
${employee.name.lastName}
${employee.company.companyName}
${employee.company.business}
440
Cz II
JavaServer Pages
Rozdzia 16.
441
Jeli taka zamienna jest tablic, to nazwa elementu podawana w wyraeniu EL bdzie indeksem
tej tablicy, a warto caego wyraenia zostanie pobrana przy uyciu kodu: tablica[indeks].
Na przykad, jeli zmienna nazwyKlientow zawiera tablic acuchw znakw, to wyraenie:
${nazwyKlientow[0]}
zwrci acuch znakw "annapolis". Jeli klucze obiektu Map speniaj wymagania narzucane
dopuszczalnym postaciom nazw zmiennych w jzyku Java, to zamiast zapisu z nawiasami
kwadratowymi mona uy notacji kropkowej. A zatem, powysze wyraenie mona take
zapisa w postaci:
${stoliceStanow.maryland}
Przykad
Zastosowanie wyrae EL do pobierania zawartoci kolekcji zostao przedstawione na
przykadzie serwletu Collections (patrz listing 16.8), ktry tworzy tablic acuchw znakw,
obiekt typu ArrayList oraz obiekt typu HashMap. Nastpnie serwlet przekazuje danie do strony
JSP (przedstawionej na listingu 16.9 oraz na rysunku 16.4), ktra wywietla elementy tych
trzech obiektw uywajc wyrae EL.
442
Cz II
JavaServer Pages
Rozdzia 16.
443
Rysunek 16.4.
Podczas odwoywania
si do elementw
kolekcji mona uywa
notacji kropkowej
lub zapisu
wykorzystujcego
nawiasy kwadratowe.
Notacja kropkowa moe
by uywana wycznie
w przypadku, gdy nazwy
kluczy speniaj
wymagania okrelajce
dopuszczaln posta
nazw zmiennych w Javie
Nazwy waciwoci komponentw nie mog skada si wycznie z cyfr, dlatego podczas
odwoywania si do elementw tablic oraz zawartoci obiektw ArrayList naley uywa
zapisu wykorzystujcego nawiasy kwadratowe. Jednak zawarto obiektw HashMap mona
pobiera, uywajc zarwno zapisu z nawiasami kwadratowymi, jak i notacji kropkowej.
W celu uzyskania spjnego zapisu wyrae, w stronie JSP przedstawionej na listingu 16.9
zastosowano zapis wykorzystujcy nawiasy kwadratowe, jednak uyte na stronie wyraenie:
${company["Ellison"]}
444
Cz II
JavaServer Pages
pageContext
Obiekt pageContext reprezentuje obiekt PageContext biecej strony JSP. Z kolei
klasa PageContext definiuje waciwoci request, response, session, out oraz
servletContext (czyli metody: getRequest, getResponse, getSession, getOut oraz
getServletContext). A zatem ponisze wyraenie wywietla identyfikator biecej
sesji:
${pageContext.session.id}
oraz
${header["Accept"]}
cookie
Obiekt cookie pozwala na szybki dostp do cookies przesyanych z przegldarki.
Jednak koniecznie naley pamita, e zwracan wartoci jest obiekt Cookie,
a nie sama warto cookie. A zatem w celu odczytania wartoci cookie, naley
dodatkowo uy waciwoci value (czyli metody getValue) obiektu Cookie.
Na przykad, oba ponisze wyraenia wywietlaj warto cookie o nazwie
cookieUzytkownika (lub pusty acuch znakw, jeli wskazane cookie nie zostanie
odnalezione):
${cookie.cookieUzytkownika.value}
${cookie["cookieUzytkownika"].value}
Rozdzia 16.
445
initParam
Obiekt initParam pozwala na bardzo atwy dostp do parametrw inicjalizacyjnych
kontekstu. Na przykad, ponisze wyraenie wywietla warto parametru
inicjalizacyjnego o nazwie domyslnyKolor:
${initParam.domyslnyKolor}
Przykad
Strona przedstawiona na listingu 16.10 uywa obiektw niejawnych w celu wywietlenia
parametrw dania, nagwkw dania HTTP, wartoci cookies oraz informacji dotyczcych
serwera. Wyniki generowane przez t stron zostay przedstawione na rysunku 16.5.
Listing 16.10. implicit-objects.jsp
<%@ page contentType="text/html; charset=ISO-8859-2" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>Using Implicit Objects</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-2">
<LINK REL=STYLESHEET
HREF="/el/JSP-Styles.css"
TYPE="text/css">
</HEAD>
<BODY>
<TABLE BORDER=5 ALIGN="CENTER">
<TR><TH CLASS="TITLE">
Zastosowanie obiektw niejawnych
</TH></TR>
</TABLE>
<P>
<UL>
<LI><B>Parametr dania "test":</B> ${param.test}
<LI><B>Nagwek User-Agent:</B> ${header["User-Agent"]}
446
Cz II
JavaServer Pages
Rysunek 16.5.
Dostpnych jest
kilka zmiennych
definiowanych
automatycznie.
Takie
predefiniowane
zmienne
s nazywane
obiektami
niejawnymi
Operatory arytmetyczne
Operatory arytmetyczne dostpne w jzyku wyrae s zazwyczaj uywane do wykonywania
prostych operacji na wartociach zapisanych w komponentach. Nie naley stosowa ich do
realizacji zoonych algorytmw; taki kod naley umieszcza w zwyczajnych klasach Javy.
Rozdzia 16.
447
Operatory + oraz
To standardowe operatory dodawania i odejmowania, ktre maj dwie szczeglne
cechy. Po pierwsze, jeli ktrykolwiek z operandw jest acuchem znakw,
to przed wykonaniem dziaania zostanie on skonwertowany do postaci liczby
(trzeba przy tym pamita, e system nie przechwytuje automatycznie wyjtkw
NumberFormatException). Poza tym, jeli ktrykolwiek z operandw jest typu
BigInteger lub BigDecimal, to system wykona dziaania uywajc odpowiednich
metod add lub subtract.
Operatory relacyjne
Operatory relacyjne najczciej s stosowane wraz z operatorem warunkowym udostpnianym przez jzyk wyrae (patrz podrozdzia 16.10), bd te w znacznikach niestandardowych, ktrych atrybuty wymagaj podania wartoci logicznej (na przykad, w znacznikach
umoliwiajcych wielokrotne przetwarzanie, takich jak te dostpne w bibliotece JSLT, opisanej w II tomie niniejszej ksiki).
Operatory == oraz eq
Te dwa rwnowane sobie operatory sprawdzaj, czy podane argumenty s sobie
rwne. Jednak pod wzgldem sposobu dziaania przypominaj one raczej metod
equals Javy, ni stosowany w tym jzyku operator ==. Operatory te zwracaj
warto true, jeli oba operandy s tym samym obiektem. Jeli operandy s
liczbami, to zostaj one porwnane przy uyciu standardowego operatora == Javy.
Jeli jeden z operandw ma warto null, to porwnanie zawsze zwraca warto
false. Jeli ktry z operandw jest obiektem typu BigInteger lub BigDecimal,
to operandy s porwnywane przy uyciu metody compareTo. We wszystkich
pozostaych przypadkach operandy s porwnywane przy uyciu metody equals.
448
Cz II
JavaServer Pages
Operatory != oraz ne
Te dwa rwnowane sobie operatory sprawdzaj, czy podane argumenty s rne
od siebie. Jednak take i one pod wzgldem sposobu dziaania przypominaj
raczej negacj metody equals Javy, ni stosowany w tym jzyku operator !=.
Jeli oba operandy s tym samym obiektem, to operatory te zwracaj warto false.
Jeli operandy s liczbami, to zostaj one porwnane przy uyciu standardowego
operatora != Javy. Jeli jeden z operandw ma warto null, to porwnanie zawsze
zwraca warto true. Jeli ktry z operandw jest obiektem typu BigInteger
lub BigDecimal, to operandy s porwnywane przy uyciu metody compareTo.
We wszystkich pozostaych przypadkach operandy s porwnywane przy uyciu
metody equals, a wynik wyraenia jest negacj wartoci zwrconej przez t metod.
Operatory logiczne
Te operatory su do czenia wynikw zwracanych przez operatory relacyjne.
Operator empty
Ten operator zwraca warto true, jeli jego argumentem jest warto null, pusty acuch
znakw, pusta tablica, pusty obiekt Map lub pusta kolekcja. W przeciwnym razie operator
zwraca warto false.
Przykad
Listing 16.11 przedstawia zastosowanie kilku standardowych operatorw. Wyniki zostay
pokazane na rysunku 16.6.
Rozdzia 16.
449
450
Cz II
JavaServer Pages
</TR>
<TR ALIGN="CENTER">
<TD>\${!(1<2)}<TD>${!(1<2)} <%-- NOT -%>
<%-- Obsuga wartoci null oraz pustych acuchw znakw
w parametrach dania --%></TD>
<TD>\${empty param.blah}<TD>${empty param.blah}</TD>
</TR>
</TABLE>
</BODY></HTML>
Rysunek 16.6.
Jzyk wyrae
JSP 2.0
udostpnia
niewielki zbir
operatorw.
Naley ich uywa
z duym umiarem
logika
biznesowa
powinna by
wykonywana
przez serwlety,
a nie na stronach
JSP
Rozdzia 16.
451
zwrci warto wyraenia wyraenie1; w przeciwnym przypadku zwrci ono warto wyraenia wyraenie2. Nie mona jednak zapomina, i podstawowym przeznaczeniem jzyka
wyrae jest upraszczanie logiki prezentacji; dlatego naley pamita, by nie stosowa tego
operatora do wykonywania operacji zwizanych z logik biznesow.
Przykad
Serwlet przedstawiony na listingu 16.12 tworzy dwa obiekty SalesBean (patrz listing 16.13),
po czym przekazuje danie na stron JSP (patrz listing 16.14) odpowiedzialn za przedstawienie wynikw (patrz rysunek 16.7). Jednak jeli cakowita ilo sprzedanych produktw bdzie mniejsza od 0, to strona JSP powinna zastosowa czerwone to w odpowiedniej
komrce tabeli. Implementacja takiego sposobu dziaania strony naley do zada logiki
prezentacji, a zatem zastosowanie operatora ?: jest waciwe.
Listing 16.12. Conditionals.java
package coreservlets;
/** Serwlet tworzy zmienne dostpne w zakresie dania, ktre
* zostan zastosowane do przedstawienia operatora warunkowego
* jzyka wyrae (xxx ? xxx : xxx).
*/
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Conditionals extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
SalesBean apples =
new SalesBean(150.25, -75.25, 22.25, -33.57);
SalesBean oranges =
new SalesBean(-220.25, -49.57, 138.25, 12.25);
request.setAttribute("apples", apples);
request.setAttribute("oranges", oranges);
RequestDispatcher dispatcher =
request.getRequestDispatcher("/el/conditionals.jsp");
dispatcher.forward(request, response);
}
}
q1Sales,
q2Sales,
q3Sales,
q4Sales) {
452
Cz II
q1
q2
q3
q4
=
=
=
=
JavaServer Pages
q1Sales;
q2Sales;
q3Sales;
q4Sales;
}
public double getQ1() { return(q1); }
public double getQ2() { return(q2); }
public double getQ3() { return(q3); }
public double getQ4() { return(q4); }
public double getTotal() { return(q1 + q2 + q3 + q4); }
}
Rozdzia 16.
453
<TD ALIGN="RIGHT"
BGCOLOR="${(apples.total < 0) ? "RED" : "WHITE" }">
${apples.total}</TD>
<TD ALIGN="RIGHT"
BGCOLOR="${(oranges.total < 0) ? "RED" : "WHITE" }">
${oranges.total}</TD>
</TR>
</TABLE>
</P>
</BODY></HTML>
Rysunek 16.7.
W celu warunkowego
wywietlania rnych
elementw mona
zastosowa operator ?:
przypominajcy
analogiczny operator
znany z jzyka C.
Jednak czsto zdarza
si, i tak warunkow
prezentacj znacznie
wygodniej mona
zaimplementowa
przy uyciu
niestandardowych
znacznikw dostpnych
w bibliotece znacznikw
JSTL