eské vysoké u£ení technické v Praze Fakulta jaderná a fyzikáln¥ inºenýrská
Katedra softwarového inºenýrství v ekonomii Obor: Inºenýrská informatika Zam¥°ení: Softwarové inºenýrství v ekonomii
Internetový obchod E-Shop
BAKALÁSKÁ PRÁCE
Vypracoval: Vedoucí práce: Rok:
Vo jt¥ch Drábek Ing. Miroslav Virius, Csc. 2007
P°ed svázáním místo téhle stránky vloºíte zadání práce s podpisem d¥kana (bude to jediný oboustranný list ve Va²í práci) !!!!
Prohlá²ení Prohla²uji, ºe jsem svou bakalá°skou práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu.
V Praze dne ....................
........................................ Vojt¥ch Drábek
Pod¥kování D¥kuji Ing. Miroslavu Viriusovi, Csc. za vedení mé bakalá°ské práce a za podn¥tné návrhy, které ji obohatily.
Vojt¥ch Drábek
Název práce:
Internetový obchod Autor:
Vojt¥ch Drábek
Obor: Druh práce:
Inºenýrská informatika Bakalá°ská práce
Vedoucí práce:
Ing. Miroslav Virius, Csc. Katedra softwarového inºenýrství v ekonomii, Fakulta jaderná a fyzikáln¥ inºenýrská, eské vysoké u£ení technické v Praze
Abstrakt:
P°edloºená práce popisuje technologie pot°ebné pro tvorbu webových
aplikací na platform¥ Java a dokumentuje tvorbu webové aplikace Internetový obchod, která slouºí jako softwarová podpora pro internetový obchod s elektronikou a po£íta£i. Tato aplikace je zaloºena na platform¥ Java 2 Enterprise Edition a vyuºívá technologie, které jsou její sou£ástí, zejména servlety a stránky JSP. P°i její tvorb¥ byl vyuºit open-source rámec pro tvorbu webových aplikací Struts. Webové rozhraní této aplikace respektuje standardy XHTML a CSS. Zabezpe£ení pouºívá autentikaci na základ¥ uºivatelského jména a hesla a zabezpe£ený protokol HTTPS. Datová vrstva aplikace je tvo°ena rela£ní databází. P°i návrhu aplikace byl kladen d·raz na p°enositelnost mezi r·znými webovými kontejnery a rela£ními databázemi.
Klí£ová slova:
internetový obchod, Java, JSP, J2EE, Struts
Title:
E-Shop Author: Abstract:
Vojt¥ch Drábek The presented bachelor work describes technologies needed to develop
web applications on the Java platform and documents the creation of the E-shop web application, which serves as software support for an e-shop with electronics and computers. The application is based on the Java 2 Enterprise Edition Platform and leverages its subordinate technologies, mainly servlets and JSP pages. OpenSource web framework Struts was used for its creation. Interface of the application is based on web pages respecting the XHTML and CSS standards. Security is based on authentication of username and password and the HTTPS protocol. Data layer of the application consists of a relational database. Design of the application was aimed at portability to various web containers and relational databases.
Key words:
e-shop, Java, JSP, J2EE, Struts
Obsah
Úvod
8
1 Pouºité technologie
9
1.1
1.2
Protokol HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1
Poºadavek HTTP . . . . . . . . . . . . . . . . . . . . . . . . .
10
1.1.2
Odezva HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.1.3
HTTPS
11
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Java 2 Enterprise Edition
. . . . . . . . . . . . . . . . . . . . . . . .
1.2.1
Struktura webové aplikace v J2EE
1.2.2
Servlety
1.2.3
Java Server Pages (JSP)
12
. . . . . . . . . . . . . . .
13
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
. . . . . . . . . . . . . . . . . . . . .
15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
1.3
Struts
1.4
Rela£ní databáze
1.5
9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
1.4.1
Normální formy . . . . . . . . . . . . . . . . . . . . . . . . . .
19
1.4.2
Jazyk SQL (Structured Query Language) . . . . . . . . . . . .
20
1.4.3
MySQL Community Server
20
. . . . . . . . . . . . . . . . . . .
Zna£kovací jazyk XHTML a webové stránky 1.5.1
P°ístupnost
. . . . . . . . . . . . . .
21
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2 Webová aplikace Internetový obchod
23
2.1
Poºadavky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.2
Návrh
24
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1
Model
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
2.2.2
Pohled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
2.2.3
Tvorba °adi£e s rámcem Struts
28
6
. . . . . . . . . . . . . . . . .
2.2.4
Kongurace
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
2.2.5
Zabezpe£ení . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3 Uºivatelská p°íru£ka 3.1
3.2
3.3
31
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.1.1
Poºadavky na systém . . . . . . . . . . . . . . . . . . . . . . .
31
3.1.2
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
Správa aplikace
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
3.2.1
Zm¥na nastavení aplikace
33
3.2.2
Procházení produkt· a kategorií a jejich úprava
. . . . . . . .
35
3.2.3
Procházení a úprava uºivatelských ú£t· . . . . . . . . . . . . .
35
3.2.4
Prohlíºení objednávek
. . . . . . . . . . . . . . . . . . . . . .
35
Pouºívání aplikace zákazníkem . . . . . . . . . . . . . . . . . . . . . .
35
Záv¥r
38
Seznam pouºitých zdroj·
39
P°ílohy
41
A Obsah CD
42
A.1
Adresá° install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
A.2
Adresá° Eshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
A.3
Adresá° javadoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
A.4
Soubor drabek_eshop.pdf
43
. . . . . . . . . . . . . . . . . . . . . . . .
7
Úvod
Prodej zboºí prost°ednictvím webových stránek je velmi £astým vyuºitím Internetu a technologie WWW. Pro zaji²t¥ní funkcí, které s takovým prodejem souvisí, se pouºívají nejr·zn¥j²í druhy webových aplikací, od jednoduchých stránek zaloºených pouze na (X)HTML, které obsahují pouze kontaktní informace na prodejní místa, po komplexní podnikové aplikace, které krom¥ prezentace výrobk· a jejich prodeje zaji²´ují i nejr·zn¥j²í dal²í funkce a mohou být propojeny s podnikovými informa£ními systémy. Jednou z nejroz²í°en¥j²ích technologií pro vývoj serverových aplikací je Java 2 Enterprise Edition (J2EE), která vyuºívá výhod platformy Java (multiplatformnost, rozsáhlá standardní knihovna, správa pam¥ti) a p°idává rozsáhlou podporu pro tvorbu a provozování aplikací spou²t¥ných na serverech (z technologií pouºitých v této bakalá°ské práci jsou to servlety, stránky JSP, JDBC, XML, JavaMail). Tato bakalá°ská práce si klade za cíl vytvo°it webovou aplikaci v J2EE, která bude zaji²´ovat prezentaci a prodej zboºí pro malou rmu. Jako p°íklad prodávaného zboºí slouºí elektronika a po£íta£e. Jako jeden ze stavebních kamen· aplikace jsem se rozhodl pouºít opensource rámec pro tvorbu webových aplikací Struts. V první kapitole uvádím p°ehled technologií a nástroj·, které jsem p°i tvorb¥ internetového obchodu pouºil. Ve druhé kapitole p°edkládám popis poºadavk· na aplikaci a návrhu aplikace. T°etí kapitolu potom tvo°í uºivatelská p°íru£ka pro práci s touto aplikací.
8
Kapitola 1 Pouºité technologie
1.1
Protokol HTTP
P°ístup k webovým stránkám probíhá prost°ednictvím protokolu HTTP. P°i pouºití tohoto protokolu vy²le klientský po£íta£ (typicky na n¥m spu²t¥ný webový prohlíºe£) na webový server poºadavek v prostém textu. Jako odpov¥¤ na tento poºadavek ode²le webový server rovn¥º v prostém textu odezvu. Specikace protokolu HTTP se nachází na Internetu jako RFC 2616[15]. Kaºdá zpráva (odezva i poºadavek) za£íná jedním °ádkem textu, obsahuje libovolný po£et hlavi£ek (kaºdá na jednom °ádku) a prázdný °ádek. Pokud zpráva obsahuje t¥lo (nap°íklad webovou stránku, obrázek nebo CSS styl), následuje za prázdným °ádkem t¥lo zprávy. Hlavi£ky zprávy HTTP mohou být obecné (lze je pouºít v poºadavku i v odezv¥) nebo specické pro poºadavek nebo pro odezvu. Následuje seznam n¥kterých £asto pouºívaných hlavi£ek:
• Accept-Charset (pouze poºadavek): Ur£uje seznam kódování, které je klientský systém ochoten p°ijmout.
• If-Modified-Since (pouze poºadavek): Poºadavek má být povaºován za platný jen v p°ípad¥, ºe byl poºadovaný zdroj zm¥n¥n od data a £asu uvedeného v této hlavi£ce (v opa£ném p°ípad¥ webový prohlíºe£ typicky pouºije data z mezipam¥ti).
• Referer
(pouze poºadavek): Zasílá URI, ze kterého byla získána adresa uve-
dená v URI poºadavku.
• User-Agent
(pouze poºadavek): Informuje o softwaru (webovém prohlíºe£i)
pouºívaném pro zpracování p°ijatých dat.
• Location (pouze odezva): P°i p°esm¥rování ur£uje nové umíst¥ní poºadovaného zdroje.
9
• Content-Length (pokud je p°ítomno t¥lo zprávy): Ur£uje délku zprávy zaslané v odezv¥.
• Content-Type
(pokud je p°ítomno t¥lo zprávy): Ur£uje typ informací, které
byly zaslány v odezv¥.
• Expires (pokud je p°ítomno t¥lo zprávy): Datum a £as, kdy informace zaslané v odezv¥ p°estanou být aktuální.
• Cache-Control:
Nastavuje zp·sob vyuºívání mezipam¥ti bu¤ pro server (p°i
pouºití v poºadavku) nebo pro klientský software (p°i pouºití v odezv¥).
• Connection: • Date:
Ur£uje informace o uzavírání spojení.
Datum a £as, kdy byla zpráva odeslána.
• Transfer-Encoding:
Kódování pouºité pro p°enos zprávy.
1.1.1 Poºadavek HTTP První °ádek poºadavku HTTP má následující strukturu:
Metoda<MEZERA>URI poºadavku<MEZERA>Verze HTTP
Metoda
je jedna z následujících metod protokolu HTTP:
Metoda poºadavku Ú£el metody DELETE
Smazání prost°edku uloºeného na URI poºadavku
GET
Zaslání zdroje ur£eného URI poºadavku
HEAD
Dotaz na existenci zdroje ur£eného URI poºadavku
OPTIONS
ádost o zaslání informací o moºnostech komunikace
POST
Zaslání zdroje ur£eného URI poºadavku a HTTP hlavi£kami
PUT
Poºadavek na uloºení zasílaných dat na URI poºadavku
TRACE
ádost o zp¥tné zaslání zadaných vstupních informací
p°ípadn¥ jiná metoda, pokud je pouºíváno n¥jaké roz²í°ení protokolu HTTP (nebo nestandardní implementace).
URI (Uniform Resource Identier) poºadavku m·ºe být absolutní (http://server/cíl) nebo relativní (/cíl). Hodnota URI v HTTP poºadavku m·ºe být nahrazena znakem hv¥zdi£ky (*) v p°ípad¥, ºe se poºadavek netýká konkrétního zdroje na serveru, ale samotného serveru (nap°íklad poºadavek OPTIONS).
Verze HTTP
za£íná °et¥zcem HTTP/ a obsahuje £íslo pouºívané verze protokolu
HTTP. V sou£asnosti se pouºívají verze 1.0 a 1.1. P°íklad HTTP poºadavku:
GET /eshop/categories/audio-video.html HTTP/1.1 Host: localhost:8084 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; \ cs; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4 10
Accept: text/xml,application/xml,application/xhtml+xml, \ text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: cs,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1250,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://localhost:8084/eshop/ Cookie: JSESSIONID=B6A8469DF323520C9E3E6BFD5F33BC88 (t°etí a £tvrtý °ádek byly kv·li p°íli²né délce rozd¥leny)
1.1.2 Odezva HTTP První °ádek odezvy HTTP má tento tvar:
Verze HTTP<MEZERA>Stavový kód<MEZERA>Popis stavového kódu
Verze HTTP
má stejný tvar jako v poºadavku HTTP.
Stavový kód obsahuje t°i £íslice a odráºí výsledek zpracování poºadavku. První £íslice stavového kódu ur£uje jednu z p¥ti moºných kategorií, do kterých m·ºe výsledek zpracování spadat: 1xx
Informace
2xx
Úsp¥²né zpracování
3xx
P°esm¥rování
4xx
Chyba poºadavku
5xx
Chyba serveru
Popis stavového kódu je krátká textová informace, která vystihuje význam vráceného stavového kódu. P°íklad odezvy HTTP:
HTTP/1.x 200 OK Server: Apache-Coyote/1.1 Content-Type: application/xhtml+xml;charset=UTF-8 Transfer-Encoding: chunked Date: Sat, 30 Jun 2007 17:26:14 GMT (následuje prázdný °ádek a t¥lo zprávy - stránka HTML)
1.1.3 HTTPS HTTPS (HTTP over SSL) je nadstavba protokolu HTTP, která pro p°enos pouºívá zabezpe£ené spojení pomocí protokolu SSL nebo TLS. P°i pouºívání t¥chto protokol· po²le nejprve server klientskému po£íta£i bezpe£nostní certikát (v¥t²inou odpovídající standardu X.509 - viz [20]). Pokud klient tento certikát p°ijme (po
11
J2EE aplikační server
Klientská aplikace (Java)
Webový kontejner
EJB kontejner
Servlety
Enterprise JavaBeans Databáze
JSP Webový prohlížeč HTTP server IIOP Webové služby
Klientská aplikace (jiné technologie)
Java 2 Standard Edition
Obrázek 1.1: J2EE aplika£ní server.
zkontrolování uvedených údaj· a platnosti), po²le mu server ve°ejný klí£ a je zahájena ²ifrovaná komunikace. Zp·sob ²ifrování není pevn¥ daný, na za£átku komunikace se server s klientem dohodnou na pouºívaném ²ifrování. Na samotné p°ená²ení dat je z výkonnostních d·vod· v¥t²inou pouºito symetrické ²ifrování (s tajným klí£em), asymetrické ²ifrování se pouºívá jen p°i zahájení komunikace a pro p°enos tajného klí£e.
1.2
Java 2 Enterprise Edition
Java 2 Enterprise Edition (J2EE) je pr·myslový standard pro vytvá°ení a provozování serverových aplikací vytvo°ených v programovacím jazyku Java. Jednotlivé sou£ásti platformy Java EE jsou denovány pomocí technologických specikací (zejména aplika£ních programovacích rozhraní, API). Tyto specikace jsou nejprve navrºeny jako Java Specication Request (poºadavek na specikaci, JSR) a následn¥ procházejí schvalovacím procesem nazvaným Java Community Process (JCP), ve kterém má váhu nejen názor rmy Sun Microsystem (tv·rce Javy), ale i dal²ích rem a jednotlivých vývojá°·. Samotná platforma J2EE je potom denována jako jedna z t¥chto specikací (JSR 151). Úst°edním bodem platformy je takzvaný aplika£ní server. Jedná se o softwarový engine, ve kterém jsou spu²t¥ny serverové aplikace a který poskytuje jejich výstup na základ¥ poºadavk· klientských po£íta£·. Výhodou spou²t¥ní aplikací v aplika£ním serveru je centralizovaná správa prost°edk· (databázová p°ipojení, pam¥´, zatíºení procesoru), správa výjimek, kongurace nebo nap°íklad funkce zabezpe£ení. Sou£ástí J2EE aplika£ního serveru je webový kontejner. Na webovém kontejneru
12
Webový kontejner Servlety Databáze
JSP
Webový prohlížeč
HTTP server
Java 2 Standard Edition
Obrázek 1.2: Aplikace vyuºívající pouze webový kontejner.
spo£ívá správa komponent webové vrstvy aplikací. Mezi komponenty webové vrstvy pat°í statické webové stránky, servlety a stránky JSP. Pro men²í aplikace, u kterých je p°ímo propojena webová vrstva a datová vrstva (databáze), proto sta£í samostatná implementace webového kontejneru. Takovou aplikací je i internetový obchod vytvo°ený v rámci této bakalá°ské práce. P°íklady aplika£ních server· jsou BEA WebLogic, IBM WebSphere nebo JBoss. Nejznám¥j²ím webovým kontejnerem je Tomcat (byl pouºit i v této bakalá°ské práci).
1.2.1 Struktura webové aplikace v J2EE Aplikace vytvo°ené v rámci platformy J2EE nemusejí vyuºívat v²echny funkce J2EE aplika£ního serveru. Zejména pouºívání komponent Enterprise JavaBeans (EJB) p°iná²í zna£né zesloºit¥ní aplikace. A£koliv ve specikaci EJB 3.0 byly zavedeny n¥které zjednodu²ující prvky (anotace, podpora perzistence), pro men²í aplikace se jejich pouºívání nevyplatí. Takové aplikace vyuºívají pouze sluºeb webového kontejneru a k databázi p°istupují p°ímo z webové vrstvy. Schéma typické webové aplikace vyuºívající pouze webový kontejner je na obrázku 1.2. Sou£ásti webové vrstvy platformy J2EE se d¥lí do
modul·.
Kaºdý modul p°ed-
stavuje soubor s p°íponou .WAR, který reprezentuje adresá° zkomprimovaný v¥t²inou metodou ZIP a má pevn¥ ur£enou adresá°ovou strukturu:
• \
Stránky JSP, HTML, CSS, obrázky Podadresá°e obsahující stránky JSP, HTML, CSS, obrázky
13
WEB-INF \ ∗ web.xml - Popisova£ nasazení webového modulu. Obsahuje informace o servletech, ltrech, chybových stránkách a jiné.
∗ r·zné kongura£ní soubory, soubory TLD ∗ lib \ - umíst¥ní knihoven (soubor· JAR) ∗ classes \ - zkompilované t°ídy aplikace
aplikace
META-INF \ ∗ Manifest.mf
- Informace o souboru WAR
Pokud aplikace vyuºívá pouze webovou vrstvu, je obvyklé vytvá°et jeden samostatný modul.
1.2.2 Servlety Servlety jsou t°ídy programovacího jazyka Java spravované kontejnerem servlet·, které se pouºívají pro dynamické vytvá°ení dokument· a interakci s nimi prost°ednictvím ur£itého protokolu. Vytvá°enými dokumenty mohou být webové stránky v jazyku HTML nebo XHTML, dokumenty XML, prosté textové dokumenty a jiné. V naprosté v¥t²in¥ se v²ak servlety pouºívají pro vytvá°ení dynamických webových stránek a pro °ízení toku webových aplikací. Protokolem, který zprost°edkovává interakci se servlety, je obvykle HTTP (Hypertext Transfer Protocol). Lze pouºít i jiný protokol, av²ak na Internetu se obvykle pouºívá práv¥ jen HTTP a pro jiné protokoly v¥t²inou ani neexistují implementace kontejneru servlet·. V dal²ím textu budeme hovo°it jiº jen o servletech pracujících nad protokolem HTTP. Vytvá°ení servlet· se °ídí stejnými pravidly jako vytvá°ení kterékoliv jiné t°ídy v Jav¥. Jediným poºadavkem je, ºe servlet musí roz²í°it t°ídu javax.servlet.http.HttpServlet, která poskytuje metody pro práci s protokolem HTTP. Funkce servletu jsou zabezpe£eny p°ekrytými metodami zd¥d¥nými z této t°ídy. T°ída HttpServlet poskytuje odpovídající metody pro v²echny standardní poºadavky protokolu HTTP (doDelete(),
doGet(), ...). Volání t¥chto metod probíhá
prost°ednictvím metody service(), která je téº sou£ástí t°ídy HttpServlet. V praxi se v¥t²inou p°ekrývají pouze metody doGet a doPost. Vzhledem k tomu, ºe bývá uºite£né, aby odpov¥di na poºadavky GET a POST byly stejné, se £asto spole£ný kód vkládá do jedné z t¥chto metod a druhá metoda obsahuje pouze volání první metody. Naproti tomu nebývá vhodné p°ekrýt metodu service(), a to hned z n¥kolika d·vod·:
•
Zt¥ºuje se tím p°idání podpory pro jiné poºadavky, neº jsou GET a POST.
•
Metoda service() automaticky p°idává podporu pro poºadavky HEAD, OPTIONS a TRACE.
•
Metoda service() vykonává krom¥ volání metod odpovídajících HTTP poºadavk·m dal²í funkce, nap°íklad automaticky nastavuje n¥které hlavi£ky.
14
ivotní cyklus servletu probíhá následovn¥:
1. Je p°ijat poºadavek na URI, které je mapováno na ur£itý servlet. 2. Pokud neexistuje instance tohoto servletu, webový kontejner (a) Na£te t°ídu servletu (b) Vytvo°í instanci této t°ídy (c) Inicializuje tuto instanci spu²t¥ním metody init() 3. Webový kontejner zavolá metodu service(), které p°edá objekty, které zapouzd°ují poºadavek HTTP a odezvu HTTP. 4. Metoda service() zavolá p°íslu²nou metodu servletu nebo vykoná automatickou odpov¥¤. 5. Pokud je zapot°ebí servlet odstranit, zavolá webový kontejner metodu destroy() a odstraní odkazy na servlet. Ten je potom vymazán správcem pam¥ti.
Sou£ástí specikace servlet· od verze 2.3 jsou
ltry servlet·. Filtry jsou t°ídy jazyka
Java, kterým webový kontejner p°ed a po zavolání metody service() servletu p°edá informace o HTTP poºadavku (instanci t°ídy HttpServletRequest) a HTTP odezv¥ (instanci t°ídy HttpServletResponse). Filtr potom m·ºe tyto objekty zm¥nit a p°edat je k dal²ímu zpracování, nebo m·ºe °et¥z zpracování p°eru²it a provést nap°íklad p°esm¥rování poºadavku na jinou stránku.
1.2.3 Java Server Pages (JSP) Java Server Pages (JSP) je technologie, která umoº¬uje vytvá°et dynamické webové stránky pomocí zna£ek podobn¥ jako statické HTML. Stránka se potom p°evádí na t°ídu servletu. Dynamický obsah lze vkládat n¥kolika zp·soby: prost°ednictvím JSP deklarací, skriptlet· a výraz·, prost°ednictvím výrazového jazyka (Expression Language), prost°ednictvím JSP akcí nebo prost°ednictvím vlastních zna£ek. Nastavení vlastností výsledného servletu lze zm¥nit prost°ednictvím direktiv.
Direktivy
na stránkách JSP jsou ohrani£eny zna£kami <%@ a %>. Direktivy
poskytují následující funkce:
•
Direktiva
include
ur£enou atributem
•
Direktiva
page
vloºí p°i p°ekladu JSP stránky na servlet jinou stránku
page.
umoº¬uje zm¥nit nastavení stránky pomocí následujících atribut·:
15
language="java"
Skriptovací jazyk pouºitý ve skriptletech, výrazech a deklaracích. Jediná povolená hodnota je "java".
extends="balík.t°ída"
Název nadt°ídy, kterou bude tato JSP stránka po p°eloºení na servlet roz²i°ovat.
import="balík.t°ída, ..."
Seznam balík· Javy, které budou k dispozici ve skriptletech, výrazech a deklaracích na této stránce.
session="true|false"
Pokud je "false", nelze na stránce pouºívat objekty uloºené v rozsahu relace.
buer="none|8kb|velikostkb"
Velikost vyrovnávací pam¥ti pouºité pro stránku.
autoFlush="true|false"
Automatické vyprazd¬ování vyrovnávací pam¥ti.
isThreadSafe="true|false"
Ur£uje, zda je moºné se stránkou pracovat najednou ve více vláknech.
info="text"
Informa£ní text, který bude vrácen metodou getServletInfo() výsledného servletu.
errorPage="relativníURL"
Cesta k JSP stránce, které budou poslány
contentType="typ obsahu"
Typ obsahu a kódování, které bude vráceno
vyvolané výjimky. v odpov¥di na poºadavek na tuto stránku. isErrorPage="true|false"
Ur£uje, jestli má kód na stránce p°ístup ke vzniklým výjimkám.
pageEncoding="kódování"
Kódování, které bude vráceno v odpov¥di.
isELIgnored="true|false"
Ur£uje, jestli má být povoleno vyhodnocování výrazového jazyka.
•
taglib umoº¬uje pouºít na JSP stránce vlastní knihovnu zna£ek. uri ur£uje umíst¥ní souboru TLD (Tag Library Descriptor), který obsahuje denici této knihovny zna£ek. Atribut prefix obsahuje p°edponu, Direktiva Atribut
která bude na JSP stránce pouºita pro odli²ení zna£ek z této knihovny.
JSP výrazem je výraz v programovacím jazyku Java, který je uzav°en mezi zna£kami <%= a %> (není ukon£en st°edníkem). Na stránce JSP se provede vyhodnocení tohoto výrazu a výsledek je p°eveden na text a zobrazen ve výstupu JSP stránky (servletu, na který se zkompiluje). Vloºení výrazu je ekvivalentní JSP akci <jsp:expression> (o JSP akcích bude °e£ dále).
Skriptlety jsou £ásti kódu v jazyku Java, které jsou p°i p°ekládání stránky p°evedeny na odpovídající kód ve výsledném servletu. Kód skriptletu se musí nacházet mezi zna£kami <% a %>. Pro zjednodu²ení práce mají vývojá°i p°i psaní skriptlet· k dispozici osm
implicitních objekt·,
které poskytují p°ístup k n¥kterým d·leºitým
informacím:
16
out
Výstupní proud, do kterého lze zapisovat.
request
Informace o poºadavku.
response
Informace o odezv¥.
session
Informace o sezení (relaci).
application
Informace dostupné v rámci celé aplikace.
cong
Informace o konguraci servletu.
pageContext
Kontext stránky umoº¬ující manipulaci se stránkou a objekty stránky.
page
Reprezentuje instanci servletu, který bude vygenerován z této stránky.
Skriptlet lze nahradit JSP akcí <jsp:scriptlet>.
JSP deklarace neslouºí ke generování výstupu, ale k deklaraci prom¥nných, které budou pozd¥ji pouºity ve vygenerovaném servletu. Tyto prom¥nné se nevkládají do t¥la p°ekrývané metody (doGet(),
doPost(),. . . )
jako lokální prom¥nné, ale tvo°í
atributy (£lenské prom¥nné) ve výsledném servletu. Vzhledem k tomu, ºe servlety jsou vícevláknové (pokud neimplementují rozhraní SingleThreadModel), sdílejí tyto prom¥nné v²echna vlákna a jsou tedy p°ístupné v celé aplikaci. JSP deklarace jsou uzav°eny mezi zna£kami <%! a %>. Odpovídá jim JSP akce <jsp:declaration>.
Výrazový jazyk
byl zaveden ve specikaci JSP 2.0. Pouºívání výrazového jazyka
zna£n¥ zjednodu²uje p°ístup k vlastnostem komponent JavaBean a k hodnotám vlastností objekt· typu klí£hodnota (rozhraní Map) na stránkách JSP. Vyhodnocování výrazového jazyka lze vypnout nebo zapnout pomocí direktivy page nastavením hodnoty isELIgnored (implicitn¥ je nastaveno na
true,
zapnuto):
<%@ page isELIgnored ="true|false" %> Výrazový jazyk lze pouºít v prostém textu stránky nebo v atributech standardních nebo vlastních zna£ek, ve kterých je povoleno jeho pouºívání. Výrazy jsou obklopeny znaky ${ a }. Ve výrazovém jazyku je povoleno pouºívání v¥t²iny standardních operátor· Javy (+, =, *, /, ==, . . . ), vlastností t°íd, které spl¬ují specikaci JavaBean a t°íd, které implementují rozhraní Map. Navíc jsou podobn¥ jako u skriptlet· k dispozici implicitní objekty: cookie
Názvy a hodnoty stavových záznam· prohlíºe£e (Cookie)
header
Názvy a hodnoty HTTP hlavi£ek poºadavku (pouze první nalezená hodnota dané hlavi£ky)
headerValues
Názvy a hodnoty HTTP hlavi£ek poºadavku (v²echny hodnoty dané hlavi£ky jsou vráceny jako pole)
initParam
Názvy a hodnoty inicializa£ních parametr· aplikace
param
Názvy a hodnoty parametr· poºadavku (pouze první nalezená hodnota daného parametru)
paramValues
Názvy a hodnoty parametr· poºadavku (v²echny hodnoty daného parametru jsou vráceny jako pole)
pageContext
Kontext stránky umoº¬ující manipulaci se stránkou
pageScope
P°ístup k objekt·m uloºeným v rozsahu stránky
requestScope
P°ístup k objekt·m uloºeným v rozsahu poºadavku
sessionScope
P°ístup k objekt·m uloºeným v rozsahu sezení (relace)
applicationScope
P°ístup k objekt·m uloºeným v rozsahu aplikace
17
P°ístup k vlastnostem komponent JavaBeans probíhá prost°ednictvím operátoru . (te£ka) nebo ekvivalentn¥ prost°ednictvím operátoru [] (hranaté závorky - v tomto p°ípad¥ se název vlastnosti pí²e do uvozovek). Následující p°íklad vypí²e vlastnost totalPrice beanu s názvem cart, který se nachází v rozsahu sezení:
${sessionScope.cart.totalPrice} Ekvivalentní zápis tohoto výrazu pomocí hranatých závorek je následující:
${sessionScope.cart["totalPrice"]} P°ístup k hodnotám objekt· implementujících rozhraní Map je naprosto stejný, s tou výjimkou, ºe pokud klí£, jehoº hodnotu pot°ebujeme získat, obsahuje znak pouºít pouze operátor
[] .
. , lze
Pro výrazový jazyk lze denovat i vlastní funkce, které je poté moºné pouºívat na JSP stránkách. Podrobný popis vytvá°ení funkcí výrazového jazyka lze nalézt v [14].
JSP akce
jsou speciální XML zna£ky s p°edponou jsp, které jsou vestav¥ny do
webového kontejneru a jsou tedy vºdy dostupné. JSP akcemi lze nahradit v²echny ostatní zp·soby vytvá°ení dynamického obsahu a proto je moºné vytvo°it stránky JSP, které jsou zárove¬ validním XML dokumentem (tzv. JSP Document).
Vlastní zna£ky (vlastní akce) umoº¬ují vývojá°·m p°idat na stránky JSP vlastní funkce, aniº by se poru²ila struktura JSP stránky sloºené ze zna£ek a p°ípadn¥ výrazového jazyka. Oproti skriptlet·m mají vlastní zna£ky n¥kolik výhod:
•
Nemísí kód Javy s elementy stránky, kv·li £emuº jsou skriptlety v¥t²inou nep°ehledné.
•
Stránka obsahující skriptlet nem·ºe být validním XML dokumentem.
•
Lze je opakovan¥ pouºít na více stránkách.
Naproti tomu zna£nou nevýhodou vlastních zna£ek je sloºitost jejich vytvá°ení. Pro kaºdou vlastní zna£ku je t°eba vytvo°it zvlá²tní t°ídu Javy a p°idat její popis do vlastní knihovny zna£ek. Knihovna zna£ek je XML soubor s p°íponou .TLD, který obsahuje popis v²ech uºivatelských zna£ek sdruºených do jednoho celku. Dále je nutné na kaºdou stránku, která danou knihovnu zna£ek pouºívá, p°idat p°íslu²nou deklaraci.
1.3
Struts
Jakarta Struts je vývojá°ský rámec (framework) pro tvorbu webových aplikací na platform¥ J2EE. Historie rámce Struts se za£ala psát v roce 2000, kdy Craig R. McClanahan napsal jeho základ a v¥noval jej nadaci Apache Software Foundation. Následujícího roku byla vydána verze 1.0. V dal²ích letech se Struts stal jedním z nejpouºívan¥j²ích
18
webových rámc·. V poslední dob¥ se stále více prosazuje technologie Java Server Faces (JSF) a tomu odpovídá i vývoj rámce Struts, který se ve verzi 2.0 slou£il s projektem WebWorks a zam¥°uje se zejména na podporu JSF. Struts je postaven na architekturálním vzoru Model-View-Controller (MVC) Model 2. Webovým vývojá°·m poskytuje zejména funkce °adi£e (Controller) a pohledu (View) vzoru MVC. Krom¥ základních funkcí zpracovávání a p°eposílání nebo p°esm¥rovávání poºadavk· nabízí téº kontrolu vstupních údaj· ve formulá°ích (plugin Validator), jednoduchou správu £ástí podobných webových stránek (plugin Tiles) i centralizovanou správu výjimek a jejich mapování na chybové stránky.
1.4
Rela£ní databáze
Systémy pro správu databází (DataBase Management Systems, DBMS) se pouºívají jiº n¥kolik desetiletí jako efektivní zp·sob uchovávání dat a manipulaci s nimi. P·vodn¥ ²lo o velmi rozdílné systémy, které pouºívaly nejr·zn¥j²í metody ukládání a manipulace s daty. V roce 1970 publikoval E. F. Codd práci
A Relational Model of Data for Large Shared Data Banks , ve kterém navrhl rela£ní databázový model. Ten se (v pon¥kud pozm¥n¥né podob¥) zakrátko prosadil na drtivou v¥t²inu systém· pro ukládání a správu dat. Rela£ní databázový model sdruºuje data do tzv. tabulek, které obsahují neuspo°ádané n-tice (°ádky). Tabulka je struktura záznam·, která se skládá ze sloupc· (atribut·). Ty mají jednozna£ný název (v rámci tabulky) a pevn¥ stanovený typ (doménu). Pokud v tabulce existuje sloupec (p°ípadn¥ skupina sloupc·), který jednozna£n¥ ur£uje celý záznam tabulky, mluvíme o
primárním klí£i.
Pokud v tabulce
existuje sloupec, který má stejný typ jako primární klí£ v jiné tabulce a vyjad°uje závislost na této tabulce (jeho hodnoty odpovídají hodnotám primárního klí£e této tabulky), nazývá se
cizím klí£em. Mezi tabulkami mohou prost°ednictvím cizích klí£·
existovat vazby, které ur£ují vzájemnou závislost záznam· v jednotlivých tabulkách.
1.4.1 Normální formy Návrh struktury databáze není jednoduchý úkol a p°i ²patném návrhu databáze se mohou vyskytnout velké problémy p°i pouºívání databáze. Pokud se stane, ºe se stejné informace vyskytují na více místech, mohou nastat problémy se správou dat a s jejich konzistencí. P°i velkém mnoºství dat je dobrý návrh databáze d·leºitý také z výkonnostních d·vod·. Proto byla zavedena jednoduchá pravidla pro navrhování databází, tzv. normální formy. První t°i normální formy byly zavedeny jiº v p·vodní Coddov¥ práci.
•
Nultá normální forma (0NF) znamená, ºe v tabulce existuje alespo¬ jedna poloºka, která obsahuje více neº jednu hodnotu.
19
•
Tabulka je v první normální form¥ (1NF), pokud v²echny poloºky obsahují práv¥ jednu hodnotu.
•
Tabulka je ve druhé normální form¥ (2NF), pokud je v první normální form¥ a pokud v ní existuje takový klí£, ºe v²echna neklí£ová pole jsou funkcí celého tohoto klí£e (a ne jen jeho £ásti).
•
Tabulka je ve t°etí normální form¥ (3NF), pokud je ve druhé normální form¥ a neexistují závislosti mezi sloupci, které nejsou klí£i.
Existují i dal²í normální formy (Boyle-Coddova, £tvrtá, pátá, ²está), které se v²ak týkají r·zných speciálních p°ípad· a v¥t²inou nemají praktický význam. Tabulky by m¥ly být navrºeny v co nejvy²²í normální form¥. To se v²ak vºdy nemusí poda°it, a´ jiº z d·vodu chyb¥jících funkcí v pouºívaném databázovém systému nebo z výkonnostních d·vod·.
1.4.2 Jazyk SQL (Structured Query Language) Pro manipulaci s rela£ní databází byl jiº v 70. letech vyvinut jazyk SQL, p·vodn¥ ve rm¥ IBM. Ten se v roce 1986 stal standardem ANSI a pozd¥ji n¥kolikrát standardem ISO. Asi nejd·leºit¥j²ím standardem, který se týká SQL, je SQL-92, který s ur£itými odchylkami podporuje v¥t²ina databází. Jazyk SQL se £asto d¥lí na následující sou£ásti:
•
Data Denition Language slouºí k vytvá°ení, zm¥nám a ru²ení tabulek. Do DDL pat°í p°íkazy CREATE TABLE, DROP TABLE a ALTER TABLE.
•
Data Manipulation Language slouºí k p°idávání, zm¥nám, ru²ení a £tení záznam· v tabulkách. Do DML jsou za°azovány p°íkazy INSERT, UPDATE, DELETE a SELECT.
•
Data Control Language °ídí p°ístup k dat·m na základ¥ sv¥°ených oprávn¥ní. Oprávn¥ní lze p°idávat p°íkazem GRANT nebo odebírat p°íkazem REVOKE.
Vzhledem k mnohdy zna£ným odchylkám od standardu v podstat¥ u v²ech rela£ních databázových systém· není bohuºel £asto moºné vytvo°it dotazy, které by fungovaly ve v²ech systémech stejn¥.
1.4.3 MySQL Community Server MySQL Community Server je opensource rela£ní databázový systém, který vytvá°í ²védská spole£nost MySQL AB. Velkou výhodou tohoto databázového systému je cena: je k dispozici zdarma. Nevýhodou pak mohou být £áste£né odchylky od standardu SQL a n¥které chyb¥jící funkce.
20
1.5
Zna£kovací jazyk XHTML a webové stránky
XHTML (Extensible Hypertext Markup Language) je zna£kovací jazyk pro tvorbu webových stránek. Jeho výhodou oproti klasickému HTML je za cenu dodrºení o n¥co p°ísn¥j²ích pravidel pro jeho vytvá°ení to, ºe dokument v XHTML vyhovuje specikaci XML, coº zjednodu²uje jeho strojové zpracování. Specikace jazyka XHTML 1.0 Strict se nachází v [19].
1.5.1 P°ístupnost P°ístupný web by svým uºivatel·m nem¥l klást ºádné p°ekáºky p°i jeho pouºívání. P°ístupnost neznamená jen snadnou pouºitelnost pro handicapované uºivatele (nevidomé, slabozraké, t¥lesn¥ postiºené), ale i pro uºivatele se zastaralými nebo omezenými technologiemi nebo uºivatele-za£áte£níky v pouºívání výpo£etní techniky. Pro podporu p°ístupnosti na webu vzniklo sdruºení Web Accessibility Initiative (WAI), které je sou£ástí konsorcia W3C. Zásady p°ístupnosti byly tímto sdruºením shrnuty do následujících bod·:
•
Netextový zvukový a vizuální obsah by m¥l mít textovou alternativu.
•
Barevné rozli²ení by nem¥lo být jediným nositelem informací.
•
Zna£ky HTML by se m¥ly pouºívat v souladu se specikací a pro úpravu stylu stránky by se m¥ly pouºívat kaskádové styly (CSS) a ne zna£ky.
•
Dokumenty by m¥ly mít denován jazyk a zkratky a cizí slova by m¥ly mít vysv¥tlivky.
•
Tabulky by m¥ly být správn¥ strukturovány a popsány.
•
Stránky s novými nebo z°ídka pouºívanými technologiemi by m¥ly pracovat i se softwarem, který tyto technologie nepodporuje.
•
U prvk· stránky, které se s £asem m¥ní, by m¥la existovat moºnost tyto zm¥ny vypnout.
•
Pokud stránka obsahuje vlastní uºivatelské rozhraní (skripty, aplety), m¥la by být v¥nována pozornost i p°ístupnosti tohoto rozhraní.
•
Stránky by m¥ly být co nejvíce nezávislé na za°ízení, které se pouºívá pro jejich zobrazení.
•
Stránky by m¥ly pouºívat pouºívat pouze technologie, které jsou jiº dostate£n¥ roz²í°ené.
•
Stránky by m¥ly dodrºovat standardy a doporu£ení konsorcia W3C
•
Stránky by m¥ly poskytovat popisné a orienta£ní informace pro snadnou orientaci uºivatele.
21
•
Stránky by m¥ly umoº¬ovat rycholu a jednoduchou navigaci (pohyb mezi stránkami).
•
Stránky by m¥ly být jednoduché a správn¥ strukturované.
Podrobný popis t¥chto zásad se nachází v [18]
22
Kapitola 2 Webová aplikace Internetový obchod
Tato kapitola popisuje poºadavky kladené na webovou aplikaci Internetový obchod, návrh této aplikace na základ¥ poºadavk· a implementaci návrhu.
2.1
Poºadavky
Analýza poºadavk· je velmi d·leºitou sou£ástí vývoje jakékoliv aplikace. Je to proces, p°i kterém se snaºíme stanovit funk£ní a nefunk£ní poºadavky. Funk£ní poºadavky popisují sluºby, které by aplikace m¥la poskytovat svým uºivatel·m. Nefunk£ní poºadavky ur£ují omezující podmínky, za jakých bude aplikace pracovat. Pro aplikaci Internetový obchod byly stanoveny následující funk£ní poºadavky:
•
Aplikace poskytne rozhraní, jehoº prost°ednictvím bude uºivatel moci pohodln¥ prohlíºet zboºí a p°idávat kupované zboºí do nákupního ko²íku.
•
V uºivatelském rozhraní bude moºné vyhledávat produkty na základ¥ názvu, klí£ových slov v popisu produktu nebo p°ípadn¥ dal²ích kritérií.
•
Aplikace poskytne moºnost objednat zboºí, které se nachází v nákupním ko²íku, na zadanou adresu.
•
Aplikace poskytne zákazník·m moºnost zaregistrovat se pod uºivatelským jménem a heslem. Registrace m·ºe být vyuºita pro automatické zasílání novinek a upozorn¥ní e-mailem nebo pro ukládání specického nastavení uºivatele.
•
Po uskute£n¥ní objednávky bude zákazníkovi zasláno e-mailové potvrzení.
•
Po vy°ízení objednávky bude zákazníkovi zasláno e-mailové upozorn¥ní.
•
Sou£ástí aplikace bude administrátorské rozhraní, které poskytne správci aplikace následující funkce:
Moºnost zm¥nit nastavení aplikace Moºnost p°idat, zm¥nit nebo odebrat druh prodávaného zboºí
23
Webová aplikace
Controller
mění stav
Požadavek HTTP Uživatel (Webový prohlížeč)
Model
vybírá aktualizuje Odezva HTTP
dotaz na stav
View
Obrázek 2.1: Schéma webové aplikace pouºívající vzor Model-View-Controller.
2.2
Moºnost p°idat, zm¥nit nebo odebrat kategorii zboºí Moºnost upravit údaje o uºivatelích Moºnost procházet p°ípadn¥ ru²it zadané objednávky
Návrh
Návrh aplikace pouºívá návrhový vzor Model-View-Controller Model 2. Vzor MVC d¥lí aplikaci na t°i základní £ásti: model, pohled (View) a °adi£ (Controller). Schéma tohoto vzoru se nachází na obrázku 2.1.
2.2.1 Model Model ve vzoru MVC reprezentuje data v aplikaci a soubor pravidel, podle kterých se tato data chovají. Zahrnuje i vnit°ní operace aplikace, které nemají p°ímý vliv na zobrazení dat. V aplikaci Internetový obchod je model tvo°en rela£ní databází, balíkem t°íd
com.eshop.db
(t°ídy pro p°ístup k databázi) a £ástí balíku
com.eshop.common.
Schéma databáze bylo navrºeno s ohledem na normální formy (viz p°edcházející kapitola). Ideální schéma (viz obrázek 2.2.1) spl¬uje minimáln¥ omezení kladená na 3. normální formu. Pon¥kud nestandardní jsou °et¥zce pouºité jako primární klí£e tabulky produkt· a tabulky kategorií. Jejich smyslem je umoºnit uºivateli p°istoupit k danému produktu nebo kategorii p°ímo jejich zadáním do URL v prohlíºe£i. Dal²í výhodou m·ºe být £áste£ná optimalizace pro vyhledáva£e, ve které hraje roli i struktura URL.
24
Products PK
FK1
string_id
Orders_Products PK,FK2 PK,FK1
name description image price stock category delivery vendor
order product
Orders PK
id
FK1
delivery date state address
amount
Addresses PK Categories
address_id
Users
PK
string_id
PK
username
FK1
supercategory description name
FK1
password address role
Obrázek 2.2: Navrºené schéma databáze.
25
name surname title street streetnum citypart city zip state email
InnoDB Products PK
MyISAM Products_text PK
string_id
I1 I2
name description
(trigger)
FK1
Orders_Products
string_id
PK,FK2 PK,FK1
name description image price stock category delivery vendor
order product
Orders PK
id
FK1
delivery date state address
amount
Addresses PK Categories
address_id
Users
PK
string_id
PK
username
FK1
supercategory description name
FK1
password address role
name surname title street streetnum citypart city zip state email
Obrázek 2.3: Skute£né schéma databáze.
P°i implementaci s pouºitím MySQL v²ak nastávají problémy s implementací fulltextového vyhledávání. Z výkonnostních d·vod· by vyhledávání m¥lo probíhat na úrovni databáze, v MySQL v²ak typ tabulky, který podporuje fulltextové vyhledávání (MyISAM), nepodporuje cizí klí£e. Moºná °e²ení jsou t°i: pouºít typ tabulky MyISAM a udrºovat integritu cizích klí£· ru£n¥, nepouºívat fulltextové vyhledávání vestav¥né v databázi a vyhledávat s pomocí aplikace, nebo udrºovat v databázi dal²í tabulku typu MyISAM, která bude obsahovat pouze textová data a bude s odpovídající tabulkou typu InnoDB propojena tzv. spou²t¥£i (trigger). Kv·li rychlosti vyhledávání a relativn¥ malému mnoºství dat v databázi (i p°i v¥t²ím po£tu produkt· bude databáze zabírat °ádov¥ desítky MB) jsem se rozhodl pouºít t°etí °e²ení. Výsledné schéma databáze je zobrazeno na obrázku 2.3. Ve schématu není uvedena jednak do£asná tabulka __subcats, která vzniká p°i dotazu na podkategorie n¥které kategorie, a tabulka preregistered_users, která slouºí jako p°echodné úloºi²t¥ údaj· o uºivatelích, jejichº registrace je²t¥ nebyla potvrzena.
P°ístup k databázi se °ídí návrhovým vzorem Data Access Object. Tento vzor pouºívá dal²í roz²í°ený vzor Abstraktní továrna (Abstract Factory, [1]) pro odd¥lení abstrakce p°ístupu k databázi (rozhraní, která je t°eba implementovat) od konkrétní implementace. Diagram t°íd abstraktní továrny pro p°ístup k databázi se nachází na obrázku 2.4. Jako prevence známého druhu útoku na webové aplikace, tzv.
SQL Injection , se u v²ech °et¥zc·, které vcházejí jako parametry do databáze, vyhledávají znaky, které by mohly zp·sobovat problémy (apostrof, anglické uvozovky, obrácené lomítko) a o²et°ují se takovým zp·sobem, aby se zabránilo vstupu do databáze p°ípadným
26
DAOFactory +getDAOFactory() : DAOFactory +getOrderDAO() : OrderDAO +getUserDAO() : UserDAO +getCategoryDAO() : CategoryDAO +getProductDAO() : ProductDAO +getAuthenticationService()
MySQLDAOFactory +getOrderDAO() : OrderDAO +getUserDAO() : UserDAO +getCategoryDAO() : CategoryDAO +getProductDAO() : ProductDAO +getAuthenticationService() : MySQLAuthenticationService
MySQLCategoryDAO
MySQLOrderDAO
«interface» OrderDAO +getUserOrders() +getOrderById() +deleteOrder() +insertOrder() +updateOrder() +getOrderAddress() +getOrdersByDate() +getOrders()
«interface» CategoryDAO +getTopLevelCategories() +getSubcategories() +getCategoryById() +getSupercategory() +deleteCategory() +updateCategory() +insertCategory() +getCategories()
MySQLUserDAO
«interface» UserDAO +getUserByUsername() +getAllUsers() +getUserByEmail() +createPreregisteredUser() +updateUser() +deleteUser() +confirmUserCreation() +createUser() +insertAddress() +isUserPreregistered()
MySQLProductDAO
MySQLAuthenticationService
«interface» ProductDAO +getProductById() +getProducts() +getProductsByCategory() +insertProduct() +deleteProduct() +updateProduct() +findProducts() +getImage() +getLastResultSize() +getItemsByOrder()
«interface» AuthenticationService +Authenticate()
Obrázek 2.4: Schéma t°íd pro p°ístup k databázi.
úto£níkem. Popis nej£ast¥j²ích útok· na webové aplikace na platform¥ J2EE se nachází v [12]. Sou£ástí modelu je i podsystém pro kontrolu a odesílání elektronické po²ty. Pro p°ístup k e-mailové schránce a pro odesílání e-mailových zpráv je pouºit balík JavaMail. Kontrola e-mailové schránky probíhá ve zvlá²tním vlákn¥, které v zadaných £asových intervalech kontroluje její obsah a podle doru£ených zpráv upozor¬uje komponenty, které se zaregistrovaly pro p°ijímání informací z e-mail·. Odesílání e-mail· probíhá v prostém textu a kv·li problém·m s p°evodem kódování bylo zvoleno kódování windows-1250.
2.2.2 Pohled Pohled je ve vzoru MVC £ástí aplikace, která zodpovídá za interakci uºivatele se zobrazenými daty. Zobrazené informace jsou získávány jako výsledek modelu. Pro pohled není podstatné, jak model informace zpracovává, d·leºitý je výsledek. Komponenty pohledu v aplikaci Internetový obchod jsou tvo°eny stránkami JSP ve spolupráci s modulem Tiles. Stránky pouºívají zna£kovací jazyk XHTML 1.0 Strict a formátování kaskádovými styly (CSS). Na stránkách JSP jsou pouºity vlastní zna£ky rámce Struts (knihovny zna£ek strutshtml.tld a struts-bean.tld) a zna£ky standardní knihovny zna£ek JSTL (Java Standard Tags Library). V administrátorském rozhraní pouºívám pro usnadn¥ní zadávání
27
kategorií zboºí vlastní zna£ku v rozbalovacím seznamu.
categories-combo , která zobrazuje seznam kategorií
Internetový obchod £asto pouºívá webové formulá°e - a´ jiº pro registraci zákazník· nebo pro p°idávání a úpravu zboºí v administrátorském rozhraní. Uºivatel aplikace by v²ak mohl zadat hodnoty, které nejsou platné (nap°. písmena do pole, které vyºaduje £íslo domu). Z tohoto d·vodu se data vloºená do formulá°· a odesílaná na server ov¥°ují jednak na stran¥ klienta (pomocí javascriptu), jednak na stran¥ serveru. K ov¥°ování pouºívám modul Validator, který je sou£ástí Struts. Pravidla pro ov¥°ování se zadávají do soubor·
validator-rules.xml
a
validator.xml.
2.2.3 Tvorba °adi£e s rámcem Struts adi£ aplikace postavené na Struts se skládá z °ídícího servletu (instance t°ídy ActionServlet) a z
akcí,
kterým je p°i°azena ur£itá adresa URL. Akcemi jsou v rámci
Struts t°ídy, které roz²i°ují t°ídu
Action a p°ekrývají metodu execute(). Akce typ-
icky provád¥jí na£ítání dat z databáze a jejich vloºení do prom¥nných v ur£itém rozsahu (v¥t²inou ukládají data do rozsahu poºadavku nebo relace) a p°esm¥rování na stránky JSP. O tom, které akci nebo stránce JSP bude p°edáno °ízení, rozho-
struts-config.xml (atribut forward elementu ActionForward, který vrátí metoda execute() p°íslu²né
duje nastavení p°eposlání v souboru
action)
a objekt typu
akce. Pro aplikaci Internetový obchod jsem vytvo°il následující akce:
• BuyProductAction:
Provádí vloºení zboºí do ko²íku. ízení p°edá stránce
cart.jsp, která zobrazuje obsah ko²íku.
• CategoryAction: Na základ¥ informací z URL vyhledá kategorii zboºí v databázi a do prostoru poºadavku vloºí tuto kategorii, seznam podkategorií a seznam produkt· v dané kategorii. ízení je p°edáno stránce JSP, která zobrazuje produkty.
• OrderProductsAction:
P°i zobrazení ko²íku zahájí proces zadávání objed-
návky. Zobrazí uºivatelovy kontaktní údaje (pokud je uºivatel p°ihlá²en) a vyºaduje potvrzení.
• ConfirmContactAction: Ov¥°í uºivatelovy kontaktní údaje a p°ejde na stránku, která vyºaduje kone£né potvrzení objednávky.
• ConfirmOrderAction: Po potvrzení objednávky vytvo°í objednávku v databázi, ode²le potvrzující e-maily a p°ejde na stránku informující o uskute£n¥ní objednávky.
• DeleteCategoryAction:
Smaºe kategorii a p°esune v²echny produkty, které
se v ní nacházejí, do její nad°azené kategorie.
• DeleteOrderAction:
Smaºe objednávku.
28
• DeleteProductAction:
Smaºe produkt.
• DetailProductAction:
Na£te podrobnosti o produktu a zobrazí je.
• EditCategoryAction: • EditProductAction:
Na£te kategorii a zobrazí stránku pro její úpravu.
Na£te produkt a zobrazí stránku pro jeho úpravu.
• ImageAction:
Vrátí obrázek z databáze.
• LoginAction:
Pokusí se ov¥°it uºivatele. Pokud usp¥je, zapí²e jej do objektu
HttpSession.
• LogoffAction:
Odstraní p°ihlá²eného uºivatele z objektu HttpSession.
• RegisterUserAction:
Spustí p°edb¥ºnou registraci uºivatele. Plná registrace
nastane aº po ov¥°ení e-mailové adresy.
• SaveCategoryAction: • SaveProductAction:
Uloºí upravenou kategorii.
Uloºí upravené zboºí.
• SavePropertiesAction:
Uloºí zm¥nu nastavení.
• SearchAction: Na základ¥ informace z URL (pouze poºadavek GET) vyhledá zboºí odpovídající vyhledávacím kritériím a jeho seznam vloºí do prostoru poºadavku. ízení je p°edáno stránce JSP, která zobrazuje produkty.
• SetCookieAction:
Uloºí záznam prohlíºe£e (cookie).
• ViewOrdersAction: • ViewUsersAction:
V administrátorském rozhraní zobrazí objednávky.
V administrátorském rozhraní zobrazí uºivatele.
2.2.4 Kongurace eshop.properties v balíku com.eshop.common. Krom¥ základních nastavení, která se po vydání aplikace nem¥ní
Základní kongurace aplikace je uloºena v souboru
(názvy pouºívaných cookies, název uºivatelského kongura£ního souboru) a slouºí pouze pro sdruºení v²ech nastavení na jednom míst¥ kv·li jednodu²²í správ¥, obsahuje i výchozí hodnoty pro m¥nitelná nastavení. P°i na£ítání kongurace se krom¥ základního souboru kontroluje i existence uºivatelského souboru s nastavením. Pokud tento soubor existuje, nachází se v domovském adresá°i aktuálního uºivatele v podadresá°i a souboru, jejichº název je zadán v základním kongura£ním souboru. Tento soubor by m¥l být vytvo°en p°i instalaci nebo p°i prvním spu²t¥ní aplikace. Nastavení v uºivatelském kongura£ním souboru mají p°ednost p°ed základním souborem.
29
2.2.5 Zabezpe£ení Zabezpe£ení aplikace Internetový obchod je implementováno ov¥°ováním uºivatele na základ¥ uºivatelského jména a hesla. Omezení p°ístupu do nepovolených £ástí aplikace je zaji²t¥no ltrem servlet· zp·sobem, který je obm¥nou p°ístupu popsaného v [17]. Filtr kontroluje poºadovanou URI adresu a pokud pro danou adresu aplikace nepovoluje p°ístup (v aplikaci Internetový obchod je to adresa, která obsahuje pevn¥ daný °et¥zec
/admin), provede p°esm¥rování na p°ihla²ovací stránku a
poºádá uºivatele o p°ihlá²ení. Pokud je navíc v aplikaci nastaven p°ístup k administrátorskému rozhraní pouze p°es lokální po£íta£ (localhost), kontroluje tento ltr i adresu, ze které se uºivatel p°ipojuje, a pro vzdálené adresy p°ístup odmítne. Pokud se uºivatel dostane na stránky, které zobrazují citlivé informace (nap°íklad informace o objednávce), p°epne aplikace na ²ifrovaný protokol HTTPS. Tato operace vyºaduje serverový bezpe£nostní certikát vydaný a podepsaný certika£ní autoritou. Pokud takový certikát není k dispozici, je moºné pouºít vlastní nepodepsaný bezpe£nostní certikát. V takovém p°ípad¥ v²ak webový prohlíºe£ na stran¥ klienta zobrazí varování o ned·v¥ryhodnosti certikátu. P°epínání protokol· zaji²´uje opensource knihovna ssl-ext[21]
30
Kapitola 3 Uºivatelská p°íru£ka
Tato uºivatelská p°íru£ka popisuje instalaci a pouºívání internetové aplikace Internetový obchod.
3.1
Instalace
3.1.1 Poºadavky na systém Systém, na kterém je aplikace nainstalována, by m¥l obsahovat následující nástroje|aplikace|...:
•
Java Runtime Environment (JRE) 1.6.0 nebo nov¥j²í.
•
Webový kontejner nebo aplika£ní server, který spl¬uje specikaci servlet· 2.3 a Java Server Pages 2.0 a podporuje protokol HTTPS.
•
P°ístup k databázi MySQL verze 5.0 nebo nov¥j²í. Aplikace m·ºe fungovat i se star²ími verzemi MySQL, nicmén¥ nebyla pro n¥ testována a mohou se proto vyskytovat chyby.
•
P°ístup k e-mailovému serveru, který podporuje protokoly POP3 a SMTP, a minimáln¥ jednu e-mailovou schránku.
•
Serverový bezpe£nostní certikát podepsaný platnou certika£ní autoritou. Ten lze nahradit nap°. nepodepsaným certikátem vygenerovaným nástrojem keytool, který je sou£ástí balíku Java Development Kit, av²ak za cenu varování o ned·v¥ryhodnosti serveru, které se objeví na klientském po£íta£i p°i p°echodu na zabezpe£ené spojení.
Klientský systém by m¥l mít nainstalován webový prohlíºe£, který dokáºe korektn¥ zobrazit stránky XHTML verze 1.0 a podporuje protokol HTTPS (nap°. Mozilla Firefox 2.0, Internet Explorer 7).
31
3.1.2 Instalace P°ed provedením vlastní instalace je zapot°ebí nainstalovat pot°ebné softwarové nástroje: MySQL, JRE verze 1.6.0 nebo nov¥j²í a webový kontejner s podporou servlet· a JSP (viz poºadavky na systém). P°ipomínám, ºe webový kontejner by m¥l mít zapnutu podporu protokolu HTTPS (u Tomcatu je podpora HTTPS implicitn¥ vypnuta - o nastavení HTTPS pro Tomcat pojednává nap°íklad webová stránka
http://tomcat.apache.org/tomcat-5.0-doc/ssl-howto.html.) Po nainstalování a ov¥°ení funk£nosti pot°ebných nástroj· prove¤te následující kroky:
• Nasazení webové aplikace. Zp·sob nasazení aplikace se li²í v závislosti na pouºívaném webovém kontejneru. V¥t²inou nasazení spo£ívá ve zkopírování souboru eshop.war do p°íslu²ného adresá°e webového kontejneru a p°ípadn¥ v úprav¥ kongura£ních soubor· kontejneru. Podrobné informace o nasazení naleznete v dokumentaci pouºívaného webového kontejneru. Informace o nasazení webové aplikace ve webovém kontejneru Tomcat se nacházejí na
http://tomcat.apache.org/tomcat-6.0-doc/deployer-howto.html • Nastavení MySQL
zahrnuje vytvo°ení tabulek a uloºených prodedur a zm¥nu
nastavení v kongura£ním souboru. Tabulky lze vytvo°it zadáním p°íkazu mysql -u
uºivatel
-p
heslo
eshop < eshop.sql
(nebo provedením v²ech p°íkaz·, které se nacházejí v souboru eshop.sql, prost°ed-
Uºivatel je název uºiheslo je heslo k tomuto
nictvím klientského programu p°ipojeného k MySQL). vatelského ú£tu MySQL s administrátorskými právy,
ú£tu a eshop je existující databáze v MySQL. V souboru eshop.sql se nacházejí p°íkazy pro vytvo°ení tabulek a uloºených procedur a p°idání uºivatelského ú£tu nazvaného admin s heslem eshop, který lze pouºít pro p°ihlá²ení do administrátorského rozhraní. Pokud chcete zm¥nit toto uºivatelské jméno nebo heslo, zm¥¬te p°íslu²ný p°íkaz INSERT na konci souboru eshop.sql. Soubor eshop.sql se nachází v adresá°i se zdrojovým kódem aplikace v podadresá°i
sql.
V kongura£ním souboru MySQL je dále t°eba nastavit hodnotu parametru
max_sp_recursion_depth na dostate£n¥ velké £íslo (nap°. 100), jinak nebude fungovat zobrazování produkt·. Kongura£ní soubor má název my.cnf nebo my.ini a nachází se v instala£ním adresá°i MySQL.
• Vyvolejte administrátorské rozhraní zadáním odkazu http://localhost//admin/admin.html do webového prohlíºe£e a zadejte uºivatelské jméno admin a heslo eshop. Klikn¥te na odkaz Upravit nastavení aplikace a podle pokyn· uvedených v £ásti v¥nované správ¥ aplikace zm¥¬te nastavení (zejména p°ipojení k databázi a nastavení e-mailu).
3.2
Správa aplikace
Administrátorské rozhraní lze vyvolat zobrazením stránky
http://<doména>//admin/admin.html. (doména je doménové jméno Va²eho 32
Obrázek 3.1: Administrátorské rozhraní.
po£íta£e, je kontextová cesta zadaná p°i nasazení). Zobrazí se úvodní stránka administrátorského rozhraní (viz obrázek 3.1) Zde si m·ºete zvolit jednu z akcí, k nimº je oprávn¥n administrátor systému:
•
Upravit nastavení aplikace.
•
P°idat produkty a kategorie produkt·.
•
Zobrazit a upravit produkty a kategorie produkt·.
•
Zobrazit a upravit uºivatele.
•
Zobrazit a zru²it objednávky.
3.2.1 Zm¥na nastavení aplikace Nastavení aplikace lze zm¥nit bu¤ ru£n¥ v souboru eshop.properties nebo prost°ednictvím administrátorského rozhraní. Zm¥nit lze následující poloºky (v závorce je název poloºky v souboru eshop.properties):
•
POP3 server pro p°ístup k e-mailu aplikace (mail.pop.server): Adresa pop3 serveru, který má p°ístup k e-mailové schránce pouºívané aplikací.
•
E-mailová schránka aplikace (mail.pop.address): Adresa e-mailové schránky, kterou bude pouºívat aplikace pro p°ijímání potvrzení objednávek a platnosti uºivatelských e-mailových schránek.
•
Uºivatelské jméno k e-mailové schránce aplikace (mail.pop.username): Uºivatelské jméno, jehoº prost°ednictvím se lze p°ipojit k e-mailové schránce aplikace.
33
•
Heslo k e-mailové schránce aplikace (mail.pop.password): Heslo, které je zapot°ebí pro p°ipojení k e-mailovému ú£tu aplikace.
•
SMTP server pouºívaný aplikací (mail.smtp.server): SMTP server, který bude aplikace pouºívat pro odesílání e-mailových zpráv (upozorn¥ní expedi£ního odd¥lení na novou objednávku, r·zná oznámení zákazník·m).
•
Uºivatelské jméno pro p°ístup k SMTP serveru (mail.smtp.username): Uºivatelské jméno, jehoº prost°ednictvím se lze p°ipojit k serveru odchozí po²ty.
•
Heslo pro p°ístup k SMTP serveru (mail.smtp.password): Heslo, které je zapot°ebí pro p°ístup k serveru odchozí po²ty.
•
E-mailová schránka expedi£ního odd¥lení (skladu) (mail.stock): E-mailová adresa, na kterou se budou posílat oznámení o uskute£n¥ných objednávkách. Pokud není pot°eba informace o objednávkách nikam zasílat, nechte toto pole nevypln¥no. V takovém p°ípad¥ budou objednávky, které byly potvrzeny uºivatelem, rovnou ozna£eny jako
•
zpracované .
Interval kontroly e-mailové schránky (s) (mail.check.interval): Ur£uje, jak £asto se má aplikace p°ipojovat do své e-mailové schránky a kontrolovat do²lé vzkazy.
•
Výchozí po£et sloupc· p°i zobrazení produkt· (cols): V kolika sloupcích se budou zákazník·m ve výchozím nastavení zobrazovat produkty. Toto nastavení si zákazník m·ºe p°izp·sobit. Podporováno je zobrazování od 2 do 5 sloupc·
•
Výchozí po£et °ádk· p°i zobrazení produkt· (rows): V kolika °ádcích se budou zákazník·m ve výchozím nastavení zobrazovat produkty. Toto nastavení si zákazník m·ºe p°izp·sobit. Podporováno je zobrazování od 2 do 50 °ádk·.
•
Maximální po£et produkt· na sklad¥, jaký se bude zobrazovat (maxStockInfo): P°i zobrazení podrobností o produktu se zobrazuje i p°ibliºný po£et kus· na sklad¥. Pokud je po£et produkt· men²í neº tato hodnota, zobrazí se informace z databáze. Jinak se zobrazí pouze informace, ºe je na sklad¥ více produkt· neº je tato hodnota.
•
URL adresa databáze (db.url): Adresa, ke které se má p°ipojit ovlada£ databázového p°ipojení, v£etn¥ protokolu a portu. Nap°.:jdbc:mysql://localhost:3306/
•
Název databáze (db.name):databáze v databázovém systému, kterou bude aplikace pouºívat.
•
Uºivatelské jméno pro p°ístup k databázi (db.username): Uºivatelské jméno, pod kterým se lze p°ipojit k databázi.
•
Heslo pro p°ístup k databázi (db.password): Heslo, které je zapot°ebí pro p°ipojení k databázi.
•
Povolit administrátorský p°ístup pouze p°es localhost (admin.localhost): Pokud je za²krtnuto (v souboru eshop.properties má hodnotu
true ), bude kaºdý pokud o p°ihlá²ení jako administrátor z jiné adresy neº z místního po£íta£e odmítnut.
34
Ostatní poloºky, které se nacházejí v souboru eshop.properties, ale nevyskytují se v uºivatelském rozhraní, jsou v kongura£ním souboru pouze z d·vodu umíst¥ní t¥chto informací na jednom míst¥ a v¥t²inou je není t°eba m¥nit.
3.2.2 Procházení produkt· a kategorií a jejich úprava V administrátorském rozhraní funguje prohlíºení produkt· úpln¥ stejn¥ jako p°i b¥ºném pouºívání zákazníkem. Jediný rozdíl je v tom, ºe místo moºnosti nákupu zboºí (tla£ítko Koupit) se na stránce nachází tla£ítko Upravit produkt. Stisknutím tohoto tla£ítka lze vyvolat formulá°, který obsahuje p°edvypln¥né informace o p°íslu²ném produktu a jehoº prost°ednictvím lze informace o produktu zm¥nit. Dále je ve zobrazení produkt· p°ítomen odkaz Odstranit, jehoº aktivací lze produkt odstranit. Kategorie lze upravovat kliknutím na odkaz Upravit aktuální kategorii. Zobrazí se formulá°, ve kterém jsou p°edvypln¥ny informace o aktuální kategorii, které lze zm¥nit. Odkazem Odstranit aktuální kategorii lze odstranit aktuáln¥ prohlíºenou kategorii z databáze a p°esunout v²echny produkty, které se v ní nacházejí, do její nad°azené kategorie.
3.2.3 Procházení a úprava uºivatelských ú£t· Kliknutím na odkaz Upravit uºivatele lze zobrazit seznam v²ech uºivatel· a prost°ednictvím odkaz· na stránce lze zm¥nit jejich adresy, hesla a podobn¥.
3.2.4 Prohlíºení objednávek Objednávky lze prohlíºet kliknutím na odkaz Zobrazit objednávky v uºivatelském rozhraní. Kaºdou objednávku lze i zru²it.
3.3
Pouºívání aplikace zákazníkem
Pro zákazníky je aplikace intuitivní a podobá se v¥t²in¥ sou£asných internetových obchod·. V levé £ásti okna prohlíºe£e se nachází menu, ve kterém jsou zobrazeny kategorie zboºí. Nad tímto menu je edita£ní pole, jehoº prost°ednictvím lze vyhledávat produkty podle názvu nebo podle slova v jeho popisu. Nad edita£ním polem pro hledání se nachází p°ihla²ovací formulá°, kterým se po zadání uºivatelského jména a hesla lze p°ihlásit jako registrovaný uºivatel. Na obrázku 3.2 je zobrazena úvodní stránka. V centrální £ásti okna prohlíºe£e se zobrazují aktuální informace vyºádané uºivatelem. Obvykle je to seznam produkt·, které se nacházejí v ur£ité kategorii. Kaºdý zobrazený produkt obsahuje odkaz (název produktu a jeho obrázek), jehoº prost°ednictvím lze zobrazit podrobnosti o produktu. Produkt lze vloºit do ko²íku stisknutím
35
Obrázek 3.2: Uºivatelské rozhraní.
tla£ítka Koupit. Do ko²íku se vloºí mnoºství, které bylo zadáno do p°íslu²ného edita£ního pole. Zobrazení produkt· ukazuje obrázek 3.3. Objednávku lze uskute£nit prost°ednictvím Ko²íku stisknutím tla£ítka Objednat. Zobrazí se nejprve poºadavek na vypln¥ní kontaktních údaj· zákazníka (pokud je zákazník p°ihlá²en, jsou tyto údaje p°edvypln¥ny). Po jejich potvrzení se zobrazí stránka, která shrnuje objednávku a vyºaduje kone£né potvrzení. Pokud není zákazník p°ihlá²en, bude mu na uvedenou e-mailovou adresu zaslána ºádost o potvrzení objednávky. Po denitivním potvrzení objednávky se zákazníkovi ode²le potvrzení o uskute£n¥né objednávce.
36
Obrázek 3.3: Uºivatelské rozhraní se zobrazenými produkty.
37
Záv¥r
V této bakalá°ské práci jsem popsal základní postupy pro tvorbu webových aplikací na platform¥ J2EE a tyto postupy jsem vyuºil p°i tvorb¥ ukázkové aplikace Internetový obchod. Návrh této aplikace vyuºívá roz²í°ený návrhový vzor ModelView-Controller a rámec s otev°eným kódem pro tvorbu webových aplikací Struts. Aplikace Internetový obchod si neklade za cíl vyrovnat se profesionálním softwarovým produkt·m, ale poskytuje základní funkce nezbytné pro provozování internetového obchodu. Pro nasazení do b¥ºného provozu by v²ak bylo vhodné d·kladn¥ji aplikaci otestovat zejména z hlediska zatíºení a neo£ekávaných situací a p°ípadn¥ vyladit její výkon. Dal²ím potenciálním problémem aplikace je bezpe£nost. Hlavní p°ínos této bakalá°ské práce vidím v ilustraci krok·, které je t°eba u£init pro vytvo°ení webové aplikace na platform¥ Java. V oblasti serverových aplikací je totíº v dne²ní dob¥ Java jednou z vedoucích technologií a stále roste poptávka po vývojá°ích z této oblasti.
38
Seznam pouºitých zdroj·
[1] GAMMA, Erich, VLISSIDES, John, HELM, Richard, JOHNSON, Ralph.
Návrh program· pomocí vzor·.
První vydání. Praha: GRADA 2003. ISBN 80-
247-0302-5 [2] CAVANESS,
Chuck.
Programujeme Jakarta Struts.
První
vydání.
Praha:
GRADA, 2003. ISBN 80-247-0667-9. [3] BOLLINGER, Gary, NATARAJAN, Bharathi.
JSP - Java Server Pages. Praha:
GRADA 2003. ISBN 80-247-0340-8. [4] ECKEL,
Thinking
Bruce.
Poslední
úprava
20.11.2002.
in
Java
[cit.
3rd
26.
£ervna
edition
.
2007]
[online].
Dostupné
na:
. [5] ECKEL, Bruce.
Thinking in Patterns. [online]. Poslední úprava 20.5.2003. .
[cit.
26. £ervna 2007] Dostupné na: [6] HEROUT,
Pavel.
U£ebnice jazyka Java.
Dotisk
prvního
vydání.
eské
Bud¥jovice: Kopp, 2000. ISBN 80-7232-1150-3. [7] HALL, Marty.
JAVA servlety a stránky JSP.
První vydání. Praha: Neocortex,
2001. ISBN 80-86330-06-0. [8] BLOCH, Joshua
Java EFEKTIVN
.
První vydání. Praha: GRADA, 2002.
ISBN 80-247-0416-1. [9]
[10]
[11]
MySQL 5.0 reference manual [online]. 2007 [cit. 20. £ervna 2007]. Dostupné na: . Wikipedie (£eská verze) . Wikipedia (anglická verze) .
[online].
[online].
od
r.
od
r.
[12] TAYLOR, Art, BUEGE, Brian, LAYMAN, Randy.
a J2EE.
2001
2001
Dostupné
na:
Dostupné
na:
Hacking bez tajemství: Java
První vydání. Brno: Computer press, 2003. ISBN 80-7226-868-6.
[13] KANISOVÁ, Hana, MÜLLER, Miroslav.
UML srozumiteln¥.
Brno: Computer Press, 2004. ISBN 80-251-0231-9.
39
První vydáni.
[14]
JSR-000152
JavaServer
zm¥na
listopadu
24.
PagesTM 2003
2.0
[cit.
Specication
26.
£ervna
[online].
2007].
Poslední
Dostupné
na:
. [15]
Hypertext úprava:
Transfer £erven
1999
Protocol [cit.
26.
HTTP/1.1 £ervna
[online].
2007].
Poslední
Dostupné
na:
[16]
JSR-000154 zm¥na
24.
JavaTM listopadu
Servlet 2003
2.4 [cit.
Specication 26.
£ervna
[online].
2007].
Poslední
Dostupné
na:
. [17]
Web app security using Struts, servlet lters, and custom taglibs
[on-
line]. Poslední zm¥na 2. zá°í 2004. [cit. 28. £ervna 2007]. Dostupné na:
. [18]
[19]
Web Content Accessibility Guidelines 1.0 [online]. Poslední zm¥na 5. kv¥tna 1999. [cit. 28. £ervna 2007]. Dostupné na: . XHTMLTM 1.0 The Extensible HyperText Markup Language (Second Edition) [online]. Poslední zm¥na 1.srpna 2002. [cit. 28. £ervna 2007]. Dostupné na:
. [20]
[21]
Internet X.509 Public Key Infrastructure - Certicate and Certicate Revocation List (CRL) Prole [online]. Poslední zm¥na: duben 2002. [cit. 28. £ervna 2007]. Dostupné na: http://tools.ietf.org/html/rfc3280. sslext - The Struts SSL Extension for HTTP/HTTPS switching
[on-
line]. Poslední zm¥na 3. °íjna 2004. [cit. 30. £ervna 2007]. Dostupné na:
http://sslext.sourceforge.org.
40
P°ílohy
41
P°íloha A Obsah CD
A.1
Adresá° install
V tomto adresá°i se nacházejí instala£ní soubory aplikací pot°ebných pro spu²t¥ní internetového obchodu. Jedná se o JRE 1.6u1, Tomcat 6.0.13 a MySQL 5.0.41.
A.2
Adresá° Eshop
Zde se nacházejí kompletní zdrojové kódy aplikace. Tento adresá° byl vytvo°en vývojovým prost°edím NetBeans. Obsahuje následující d·leºité podadresá°e:
• build
obsahuje v podadresá°i
web
zkompilované t°ídy aplikace, stránky JSP
a kongura£ní soubory tak, jak budou vloºeny do komprimovaného souboru .WAR.
• dist
obsahuje komprimovaný soubor Eshop.war, který je vhodný pro dis-
tribuci aplikace.
• nbproject
obsahuje projekt vytvo°ený NetBeans.
• src
obsahuje zdrojové kódy t°íd aplikace.
• web
obsahuje stránky JSP a kongura£ní soubory.
Ostatní podadresá°e nemají d·leºitý význam.
A.3
Adresá° javadoc
Tento adresá° obsahuje programátorskou dokumentaci aplikace ve formátu JavaDoc.
42
A.4
Soubor drabek_eshop.pdf
Tento soubor obsahuje tuto bakalá°skou práci ve formátu PDF.
43