Tvorba informačních systémů

Podobné dokumenty
Tvorba informačních systémů

Tvorba informačních systémů

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Tvorba informačních systémů

Tvorba informačních systémů

Tvorba informačních systémů

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Aplikační rámce Jakarta Struts Framework

Aplikační rámce. Jakarta Struts Framework. Obsah přednášky. Aplikační rámce a knihovny. Co je to aplikační rámec? Enterprise Java Beans

Tvorba informačních systémů

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Michal Krátký, Miroslav Beneš

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

Tvorba informačních systémů

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Tvorba informačních systémů

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Michal Krátký, Miroslav Beneš

UJO Framework. revoluční architektura beans. verze

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Databázové a informační systémy

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

KIV/PIA 2013 Jan Tichava

KTE / ZPE Informační technologie

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Platforma J2EE. Lukáš Zapletal liberix.cz. Platforma Java 2 Enterprise Edition vývoj webových aplikací

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Komponenty v.net. Obsah přednášky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

RMI - Distribuované objekty v Javě

STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

Obsah přednášky. Vývoj aplikací řízený testy. Extrémní programování (XP) Požadavky na nástroje pro XP. Testování aplikací

JavaServer Faces Zdeněk Troníček

Java technologie pro webové aplikace

Architektury informačních systémů

Architektury informačních systémů

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Tvorba informačních systémů na platformě J2EE Petr Hetmánek Masarykova Univerzita, Fakulta Informatiky, Botanická 68a, Brno

Tvorba informačních systémů

Typ 2 - připojení prostřednictvím kódu nativního klienta pro přístup k síti

(X)HTML, CSS a jquery

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Internet 2 css, skriptování, dynamické prvky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Elektronická podpora výuky předmětu Komprese dat

Úvod do programovacích jazyků (Java)

Java Server-side. Štěpán Kuchař. VŠB-TUO FEI Katedra informatiky

Softwarové komponenty a Internet

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

Java - výjimky. private void vstup() throws IOException {... }

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

Vytváření a použití knihoven tříd

KIV/PIA Semestrální práce

Tvorba informačních systémů

Java a Caché IV: Manipulace s objekty

X33EJA Enterprise Java

Základy programování v jazyce JAVA

Datová vrstva informačního systému. Java Database Connectivity JDBC. Obsah přednášky JDBC. Datová vrstva informačního systému

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Čipové karty Lekařská informatika

Úvod do Javy, JDBC a multimediální databáze

Úvod do tvorby internetových aplikací

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Semináˇr Java X JDBC Semináˇr Java X p.1/25

Spring framework 2.0. Roman Pichlík CZJUG

Vývoj aplikací řízený testy. Miroslav Beneš

Architektura aplikace

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

UNIVERZITA PARDUBICE DOPRAVNÍ FAKULTA JANA PERNERA

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

4. lekce Přístup k databázi z vyššího programovacího jazyka

Návrhové vzory pro J2EE

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Abstraktní datové typy: zásobník

Oracle XML DB. Tomáš Nykodým

Technologie JavaBeans

MBI - technologická realizace modelu

ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA

ŠKOLENÍ PROGRAMOVACÍHO JAZYKA JAVA JAVA - ZÁKLADY

X36WWW. Technologie aplikačních serverů. Miroslav Bureš,, Martin Klíma. X36WWW: 12. přednáška 1

Datová vrstva informačního systému. Miroslav Beneš

RMI Remote Method Invocation

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Webová prezentační aplikace

InterSystems Caché Post-Relational Database

HTML Hypertext Markup Language

Rezervační systém Tvorba WWW stránek

Hypertext Transfer Protocol (HTTP/1.1 RFC 2616) Počítačové sítě Pavel Šinták

!!Via!AUREA,!s.r.o.!

Aplikace s grafickým uživatelským rozhraním

Transkript:

Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 1/43

Obsah 6. Aplikační rámec JakartaStrutsFramework II,,, Výjimky, Validace vstupu. c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 2/43

Strategie spojení s databází: Otevřít spojení pro každý požadavek, vykonat jej a pak spojení zrušit. Otevřít spojení pro každého uživatele a uchovávat jej v rámci session. Sdílet "pool" otevřených spojení mezi všemi uživateli. Struts udržuje tzv. connection pool (implementace třetí strategie). c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 3/43

Příklad, datové zdroje 1/3 struts-config.xml: <data sources> <data source type= " org. apache. tomcat. dbcp. dbcp. BasicDataSource " > <set p r operty p r operty=" driverclassname " value= "com. mysql. jdbc. D r i v e r " / > <set p r operty p r operty=" u r l " value= " j d b c : m y s q l : / / linux456. vsb. cz / t i s " / > <set p r operty p r operty=" username " value= " t i s " / > c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 4/43

Příklad, datové zdroje 2/3 <set p r operty p r operty=" password " value= " " / > <set p r operty p r operty=" maxactive " value= " 10 " / > <set p r operty p r operty=" maxwait " value= " 5000 " / > <set p r operty p r operty=" defaultautocommit " value= " f a l s e " / > c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 5/43

Příklad, datové zdroje 3/3 <set p r operty p r operty=" defaultreadonly " value= " f a l s e " / > <set p r operty p r operty=" v a l i d a t i o n Q u e r y " value= "SELECT COUNT( ) FROM person " / > < / data source> < / data sources> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 6/43

Po inicializaci bude connection pool uložen jako contextová proměnná servletu pod jménem specifikovaném atributem key. Implicitní název je Action.DATA_SOURCE_KEY. DataSource datasource = (DataSource) servlet.getservletcontext().getattribute( Action.DATA_SOURCE_KEY); Před začátkem práce s databází je nutné datový zdroj otevřít: datasource.open(). Je vytvořen počet spojení odpovídající mincount, podle potřeby jsou vytvářena další spojení až do počtu maxcount. Po provedení dotazu je nutné volat datasource.getconnection().close() pouze vrátíme spojení do poolu! c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 7/43

Příklad, datové zdroje 1/2 Třída rošiřující org.apache.struts.action.action. javax. s q l. DataSource datasource ; java. s q l. Connection connection= n u l l ; t r y { datasource = getdatasource ( request ) ; connection = datasource. getconnection ( ) ; Statement stmt = connection. createstatement ( ) ; ResultSet r s t = stmt. executequery ( " s e l e c t from person " ) ; while ( r s t. next ( ) ) { System. out. p r i n t l n ( r s t. g e t S t r i n g ( "name" ) ) ; } r s t. close ( ) ; c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 8/43

Příklad, datové zdroje 2/2 stmt. close ( ) ; } catch ( SQLException sqle ) { g e t S e r v l e t ( ). log ( " Connection. process ", sqle ) ; } f i n a l l y { t r y { connection. close ( ) ; } catch ( SQLException e ) { g e t S e r v l e t ( ). log ( " Connection. close ", e ) ; } } c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 9/43

1/2 zobrazovaných textů chybové zprávy, texty v uživatelském rozhraní. Nastavení struts-config.xml: <message-resources parameter="messageresources"/> jsp: <html:html locale= true > Automatický výběr podle nastavení klienta MessageResources.properties MessageResources_en_US.properties MessageResources_cs_CZ.properties c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 10/43

2/2 JSP <h1><bean:message key="jcms.login"/></h1> Není nutné definovat všechny zprávy <message-resources parameter="messageresources" null="false"/> MessageResources MessageResources_en_US.properties: jcms.login = login MessageResources_cs_CZ.properties: jcms.login = Uživatelské jméno c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 11/43

- jcms.jsp c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 12/43

- klient cs_cz c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 13/43

- klient en_us c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 14/43

- knihovna značek Tiles Sada značek JSP Oddělení formátu stránky od obsahu. Možnost změny formátu nastavení vzhledu uživatelem. Opakovaně použitelné definice šablona parametrizovaná stránka, instance šablony konkrétní obsah. c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 15/43

Příklad 1/4, Tiles, index-tiles.jsp <%@ t a g l i b u r i = " /WEB INF / s t r u t s t i l e s. t l d " p r e f i x = " t i l e s " %> < t i l e s : i n s e r t page= " / l a y o u t. j s p " f l u s h = " t r u e " > < t i l e s : p u t name= " t i t l e " value= " T i t l e " / > < t i l e s : p u t name= " header " value= " / header. j s p " / > < t i l e s : p u t name= " f o o t e r " value= " / f o o t e r. j s p " / > < t i l e s : p u t name= "menu" value= " / menu. j s p " / > < t i l e s : p u t name= " body " value= " / body. j s p " / > < / t i l e s : i n s e r t > c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 16/43

Příklad 2/4, Tiles, layout.jsp 1/2 <%@ t a g l i b u r i = " /WEB INF / s t r u t s t i l e s. t l d " p r e f i x = " t i l e s " %> <html> <head> < t i t l e >< t i l e s : g e t A s S t r i n g name= " t i t l e " / >< / t i t l e > < / head> <body> < t a b l e width= "100%" > < t r > < td colspan= " 2 " > < t i l e s : i n s e r t a t t r i b u t e = " header " / > < / td>< / t r > c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 17/43

Příklad 3/4, Tiles, layout.jsp 2/2 < t r > < td width= " 120 " > < t i l e s : i n s e r t a t t r i b u t e = "menu" / > < / td> < td> < t i l e s : i n s e r t a t t r i b u t e = " body " / > < / td>< / t r > < t r > < td colspan= " 2 " >< t i l e s : i n s e r t < / t r > < / t a b l e > < / body> < / html> a t t r i b u t e = " f o o t e r " / >< / td> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 18/43

Příklad 4/4, Tiles c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 19/43

Cascading Style Sheets (CSS) Oddělení obsahu od prezentace HTML. http://www.w3.org/style/css Definice vzhledu pomocí atributů značek. c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 20/43

Příklad, CSS, html soubor <!DOCTYPE HTML PUBLIC " //W3C/ / DTD HTML 3. 2 / /CZ" > <html> <head> < t i t l e >Tvorba informacnich systemu< / t i t l e > <meta name= "AUTHOR" CONTENT= " Michal Kratky " > <meta http equiv= " Content Type " content=" t e x t / html ; charset=iso 8859 2" > < l i n k r e l = " s t y l e s h e e t " type= " t e x t / css " h r e f = " s t y l e. css " > < / head> <body> <h1>tvorba informacnich systemu< / h1>... c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 21/43

Příklad, CSS, style.css body { background c o l o r : #d5d5d5 ; c o l o r : b l a c k ; font f a m i l y : A r i a l ; } h1 { font f a m i l y : A r i a l Black ; font s i z e : 25 pt ; c o l o r : blue ; t e x t a l i g n : c e n t e r ; } h2 { font f a m i l y : A r i a l Black ; font s i z e : 18 pt ; c o l o r : black ; t e x t a l i g n : l e f t ; } h3 { font s i z e : 16 pt ; c o l o r : b l a c k ; t e x t a l i g n : l e f t ; }... c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 22/43

Deklaratorní zachytávání výjimek Ošetření vstupu. Pomocí konfiguračních souborů, bez zásahu do zdrojových kódů. Příklad: c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 23/43

Příklad, přesměrování index.jsp: <%@ t a g l i b u r i = " / tags / s t r u t s l o g i c " p r e f i x = " l o g i c "%> < l o g i c : r e d i r e c t forward= " compute " / > WEB-INF/struts-config.xml: <global forwards>... <forward name= " compute " path= " / compute. j s p " / >... < / global forwards> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 24/43

Příklad, compute.jsp 1/3 <%@ page language= " java " contenttype= " t e x t / html ; charset=windows 1250" %> <%@ t a g l i b u r i = " / tags / s t r u t s html " p r e f i x = " html " %> <%@ t a g l i b u r i = " / tags / s t r u t s bean " p r e f i x = " bean " %> <%@ t a g l i b u r i = " / tags / s t r u t s l o g i c " p r e f i x = " l o g i c " % < h t m l : h t m l l o c a l e = " t r u e " > <head> < t i t l e >Ukazkova aplikace, TIS 2006< / t i t l e > < / head> <body bgcolor=" white " > <h1>jcms< / h1> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 25/43

Příklad, compute.jsp 2/3 < l o g i c : p r e s e n t name= " computepower " > <bean:message key= " computepower. r e s u l t " / > : < b e a n : w r i t e name= " computepower " p r o p e r t y = " r e s u l t " < / l o g i c : p r e s e n t > < html:form a c t i o n = " solve. do " > < t a b l e > < t r > < td><bean:message key= " computepower. exponent " / > < / td> < td> < h t m l : t e x t name= " ComputePowerForm " p r o p e r t y = " exponent " / > < / td> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 26/43

Příklad, compute.jsp 3/3 < t r > < td>< html:submit / >< / td> < / t r > < / t a b l e > < / html:form> < / body> < / h t m l : h t m l > c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 27/43

Příklad, registrace FormBean struts-config.xml <form beans>... <form bean name= " ComputePowerForm " type= " jcms. form. ComputePowerForm " / >... < / form beans> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 28/43

Příklad, FormBean - ComputePowerForm package jcms. form ; import org. apache. s t r u t s. a c t i o n. ActionForm ; public class ComputePowerForm extends ActionForm { private S t r i n g exponent ; } public ComputePowerForm ( ) { } public void setexponent ( S t r i n g exp ) { exponent = exp ; } public S t r i n g getexponent ( ) { return exponent ; } c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 29/43

Příklad, Model - ComputePower package jcms. common ; public class ComputePower { private i n t exponent ; private i n t r e s u l t ; } public ComputePower ( ) { } public void setexponent ( i n t exp ) { exponent = exp ; } public i n t getexponent ( ) { return exponent ; } public void setresult ( i n t res ) { } public void docompute ( ) { r e s u l t = ( i n t ) Math. pow ( 2, exponent ) ; } public i n t getresult ( ) { return r e s u l t ; } c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 30/43

Příklad, přiřazení akce k FormBean struts-config.xml <action mappings>... < a c t i o n path= " / solve " type= " jcms. a c t i o n. ComputePowerAction " name= " ComputePowerForm " scope= " request " / >... < / action mappings> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 31/43

Příklad, Controller - ComputePowerAction 1/2 package jcms. a c t i o n ; import javax. s e r v l e t. h t t p. HttpServletRequest ; import javax. s e r v l e t. h t t p. HttpServletResponse ; import javax. s e r v l e t. h t t p. HttpSession ; import org. apache. s t r u t s. a c t i o n. ; import jcms. common. ; import jcms. form. ; public class ComputePowerAction extends A c t i o n { public ActionForward execute ( ActionMapping mapping ActionForm form, HttpServletRequest request, HttpServletResponse response ) { c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 32/43

Příklad, Controller - ComputePowerAction 2/2 ComputePowerForm powercomputeform = ( ComputePowerForm ) form ; S t r i n g exponent = powercomputeform. getexponent ( ) ; ComputePower computepower = new ComputePower ( ) ; computepower. setexponent ( I n t e g e r. p a r s e I n t ( exponent ) ) ; computepower. docompute ( ) ; } } request. s e t A t t r i b u t e ( " computepower ", computepower ) ; return mapping. findforward ( " compute " ) ; c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 33/43

Příklad 6. Aplikační rámec JakartaStrutsFramework II c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 34/43

Příklad, deklaratorní zpracování výjimek struts-config.xml <global exceptions>... <exception key= " exception. f a t a l " path= " / compute. j s p " scope= " request " type= " java. lang. Exception " / >... < / global exceptions> Při chybném vstupu je uživateli předán prázdný formulář. c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 35/43

Příklad, compute.jsp... < / l o g i c : p r e s e n t > < h t m l : e r r o r s / > < html:form a c t i o n = " solve. do " >... MessageResource_en_US.properties: exception.fatal = Error Input! c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 36/43

Příklad 6. Aplikační rámec JakartaStrutsFramework II c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 37/43

Deklaratorní zpracování výjimek v rámci akce struts-config.xml <action mappings> < a c t i o n path= " / solve " type= " jcms. a c t i o n. ComputePowerAction " name= " ComputePowerForm " scope= " request " > <exception key= " exception. f a t a l " path= " / compute. j s p " type= " java. lang. Exception " / > < / a c t i o n > < / action mappings> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 38/43

Zachycení výjimky v rámci akce, ComputePowerAction... t r y {... computepower. setexponent ( I n t e g e r. p a r s e I n t ( exponent ) ) ;... } catch ( NumberFormatException e ) { A c t i o n E r r o r s e r r o r s = new A c t i o n E r r o r s ( ) ; e r r o r s. add ( A c t i o n E r r o r s.global_error, new A c t i o n E r r o r ( " e r r o r. f a t a l " ) ) ; saveerrors ( request, e r r o r s ) ; }... c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 39/43

Validace vstupu struts-config.xml <action mappings> < a c t i o n path= " / solve " type= " jcms. a c t i o n. ComputePowerAction " name= " ComputePowerForm " scope= " request " > v a l i d a t e = " t r u e " i n p u t = " / compute. j s p " > <exception key= " exception. f a t a l " path= " / compute. j s p " type= " java. lang. Exception " / > < / a c t i o n > < / action mappings> c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 40/43

Validace vstupu, ComputePowerForm... p u b l i c A c t i o n E r r o r s v a l i d a t e ( ActionMapping mapping HttpServletRequest request ) { A c t i o n E r r o r s e r r o r s = new A c t i o n E r r o r s ( ) ; t r y { I n t e g e r. p a r s e I n t ( exponent ) ; } catch ( NumberFormatException e ) { e r r o r s. add ( A c t i o n E r r o r s.global_error, new A c t i o n E r r o r ( " e r r o r. f a t a l " ) ) ; } r e t u r n e r r o r s ; }... c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 41/43

Validace vstupu - plugin Validate validation.xml <form v a l i d a t i o n > <formset>... < / formset> < / form v a l i d a t i o n > c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 42/43

Reference Struts - http://struts.apache.org/ CSS - http://www.w3.org/style/css Tiles - http://www.lifl.fr/dumoulin/tiles/index.html c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 43/43