Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Lumír Návrat Katedra informatiky FEI VŠB-TUO A-1018 / 597 323 252

Podobné prezentace


Prezentace na téma: "Lumír Návrat Katedra informatiky FEI VŠB-TUO A-1018 / 597 323 252"— Transkript prezentace:

1 Lumír Návrat Katedra informatiky FEI VŠB-TUO A-1018 /

2 Obsah Úvod do komponent JavaBeans komponenty JUnit JavaDoc

3 Motivace Vývoj Opakovaná použitelnost Snadnost testování Možnost specializace výrobců Distribuce Rychle uvedení na trh Nezávislost na dodavateli Údržba Snížení nákladů na údržbu Zaměnitelnost – tlak odběratelů na standardizaci

4 4 Co je to komponenta? (1) Stavební jednotka se smluvně definovanými: rozhraními; explicitními kontextovými vazbami Mobilní telefon IKeyboard IBluetooth Napájení GSM modul

5 5 Co je to komponenta? (2) Může být použita nezávisle na prostředí, pro které byla vytvořena, prostředí, ve kterém byla vytvořena. MPEG Player (C++) Movie Library (PHP) Home Video (Java) MS Office MyApp Print

6 6 Co je to komponenta? (3) Je určena pro integraci třetí stranou Autor komponenty Neví, kdo a k čemu bude jeho komponenty využívat Musí dodržet stanovené rozhraní Autor aplikace Neví, kdo bude dodávat komponenty Komunikuje přes stanovené rozhraní Integrátor Propojí aplikaci s vhodnými komponentami

7 7 Požadavky na komponenty Úplná dokumentace Důkladné testování Robustní kontrola platnosti vstupů Vracení dostatečných informativních chybových zpráv Vycházet s toho, že komponenta bude použita k předem nepředpokládaným účelům.

8 8 Specifikace komponenty Stav Vlastnosti – čtení, nastavení Chování Operace – volání, parametry, výsledek Interakce s okolím Události – registrace, oznámení

9 9 Java Beans “Write once, run anywhere, reuse everywhere” Přidávání funkcí bez nutnosti přepisovat úplně všechno Provádění na všech platformách Použití v různých scénářích – aplikacích, jiných komponentách, dokumentech, www stránkách, nástrojích pro vývoj aplikací, … Komponenta jako stavební blok Kontejnery – kombinace komponent do struktur Principy manipulace a komunikace s komponentami z vnějšího prostředí Introspekce Zpracování událostí Persistence

10 10 Typy komponent Vizuální komponenty Mají vizuální reprezentaci zabírající prostor v okně aplikace Příklad: tlačítko, tabulka, rolovací seznamy Podpora ve vizuálních nástrojích Nevizuální komponenty Příklad: časovač, databázové spojení, kontrola pravopisu, …

11 11 Scénáře použití (1) Využití grafického návrhového prostředí Rozložení komponent v okně aplikace Nastavení vlastností komponent Barva, typ písma, klávesové zkratky, … Využití editorů vlastností (property editor) Propojení komponent a zápis metod pro zpracování událostí Testování Vytvoření instalace aplikace včetně komponent

12 12 Scénáře použití (2)

13 13 Scénáře použití (3) Použití v ručně psaném programu Vytvoření instancí komponent a nastavení jejich rozměrů a pozic Nastavení vlastností komponent Vytvoření metod pro zpracování událostí Registrace metod pro zpracování událostí Testování Vytvoření instalace aplikace včetně komponent

14 14 Scénáře použití (4) import java.awt.Color; import javax.swing.JLabel; import java.io.Serializable; public class SimpleBean extends JLabel implements Serializable { public SimpleBean() { setText( "Hello world!" ); setOpaque( true ); setBackground( Color.RED ); setForeground( Color.YELLOW ); setVerticalAlignment( CENTER ); setHorizontalAlignment( CENTER ); }

15 Scénáře použití (4) JTextField textovePole = new JTextField(); JButton okTlacitko = new JButton(); SimpleBean nasBean = new SimpleBean(); private void jbInit() throws Exception { textovePole.setCaretColor(Color.orange); textovePole.setText(“Přednastavená hodnota”); okTlacitko.setText(“&Ok"); okTlacitko.addActionListener( new Aplikace_OKTlacitko_actionAdapter(this)); this.add(nasBean); this.add(textovePole); this.add(okTlacitko); } public void okTlacitko_actionPerformed(ActionEvent e) { //TODO: obsluha stisknutí Tlačítka }

16 Demo Ukázka vytvořené komponenty Její použití v GUI Zdrojové soubory: va va an.xml an.xml

17 17 Struktura komponenty Vlastnosti (properties) Přístup prostřednictvím přístupových metod (čtení, zápis hodnoty), ne přímo Metody (methods) Operace nad komponentami Události (events) Vazby mezi komponentami

18 18 Příklad komponenty Counter CounterBean int value void clear() void increment() vlastnosti metody Counter

19 PTE - Kompnentní technologie19 Vlastnosti – Přístupové metody (1) private int value; public int getValue() public void setValue(int val)

20 20 Přístupové metody (2) public class CounterBean implements Counter { private int value; public int getValue() { return this.value; } public void setValue(int val) { this.value=val; } //Pokračovaní kódu příště }

21 21 Přístupové metody (3) Vlastnosti určené pouze pro čtení Mají pouze metodu getXXX() Vlastnosti určené pouze pro zápis Mají pouze metodu setXXX() Vlastnosti typu boolean Metoda pro čtení se může jmenovat isXXX() public boolean isEmpty();

22 22 Indexované vlastnosti private int[] value; public int getValue(int index) public void setValue(int index,int val)

23 23 Speciální vlastnosti Vázané vlastnosti (bound proprties) Generují událost PropertyChange, pokud se mění jejich hodnota Vlastnosti s omezením (constrained properties) Generují událost VetoableChange, pokud se mění jejich hodnota Změna může být zakázaná

24 PTE - Kompnentní technologie24 Použití vlastností komponent Atributy objektů ve skriptovacích jazycích JavaScript, El-expresion language Programový přístup přes veřejné přístupové metody Přístup přes formuláře (property sheets) v návrhových prostředích Čtení a zápis do perzistentní paměti

25 Úkol Rozšiřte komponentu Counter o následující vlastnosti: Název vlastnostiTypPřístupPopis jeNulabooleanČteníTest zda Counter je ve výchozí hodnotě. pocetPrekroceniintČtení, bounded Každé dosažení maxima, zvýší hodnotu o jedna MaximumintČtení/zápis, constrained Maximální hodnota čítače. Po dosažení bude čítač vynulován.

26 26 Metody Za metody komponenty se považují všechny veřejné (public) metody třídy public void clear() { val=0; } public void increment() { val++; } Miniúkol: Přidejte metodu: increment

27 27 Události (1) Zdroj událostí Objekt, který generuje události Spravuje seznam registrovaných posluchačů Posluchač (listener) Objekt, který chce být o události informován Musí být registrován u zdroje událostí Musí implementovat dohodnuté rozhraní

28 28 Události (2) Zdroj událostí Registrovaní posluchači Posluchač addEventListener registrace Informace o události EventObject e vznik události nastala událost (e)

29 29 Zpracování událostí 1. Posluchač se zaregistruje u zdroje událostí (např. u tlačítka, na jehož stisknutí čeká) 2. Uživatel stiskne tlačítko – vznikne událost 3. Zdroj události (tlačítko) projde seznam registrovaných posluchačů a každému z nich oznámí vznik události: Zavolá dohodnutou metodu rozhraní posluchače Metodě předá informace o události (podtřída java.util.EventObject )

30 30 Informace o události //Objekt přenášející informace i vygenerované //události public class CounterEvent extends EventObject { public CounterEvent(Counter source) { super(source); } public Counter getCounter() { return (Counter)source; }

31 31 Posluchač (1) public interface CounterEventListener extends EventListener { //byla překročena maximální hodnota void limitReached( CounterEvent event); void reseted(CounterEvent event); } Miniúkol: Přidejte událost: Reseted

32 32 Posluchač (2) class MyListener implements CounterEventListener { public void limitReached(CounterEvent event){ System.out.println(“Čítač vynulován“); } public void reset(CounterEvent e) { System.out.println(“Překročen limit!“); } //Pokračování, pokud máme více událostí } Miniúkol: Implementujte pro předchozí události příslušné reakce.

33 33 Registrace posluchače (1) public class CounterBean implements Counter{ //Slíbené pokračování třídy public void addCounterEventListener( CounterEventListener listener) { //registrace posluchačů } public void removeCounterEventListener( CounterEventListener listener) { //zrušení registrace posluchače }

34 PTE - Kompnentní technologie34 Registrace posluchače (2) class MyListener implements CounterEventListener { void run() { Counter counter = new CounterBean(); counter.addCounterListener(this); counter.clear(); // … } // … public void limitReached(CounterEvent event){//…} public void reset(CounterEvent e) {//…} }

35 PTE - Kompnentní technologie35 Adaptér (1) Rozhraní EventListener pro konkrétní komponentu může obsahovat mnoho metod Chceme-li reagovat jen na některé události: 1. Musíme buď implementovat prázdné reakce na ostatní události 2. Nebo použijeme adaptér jako bázovou třídu a implementujeme jen zvolené metody Adaptér implementuje implicitní odezvu na všechny události

36 PTE - Kompnentní technologie36 Adaptér (2) class CounterAdapter implements CounterEventListener { public void reset(CounterEvent e) {} public void limitReached(CounterEvent e) {} }

37 PTE - Kompnentní technologie37 Adaptér (3) Counter counter = new Counter(); //použití anonymní vnitřní třídy counter.addCounterListener( new CounterAdapter { public void reset(CounterEvent e) { System.out.println(“Reset”); } });

38 Úkol Vytvořte komponentu, která bude představovat zásobník. Podrobné zadání:

39 Persistence Automatická Implementace rozhraní Serializable Vlastní Pomocí klíčového slova transient Metody readObject() a writeObject() private void writeObject(java.io.ObjectOutputStream out) throws IOException; private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException; Implementace rohraní Externalizable

40 40 Další informace Introspekce – automatická analýza komponenty, pomocí níž získáme informace o vlastnotech, metodách, událostech Property editory – možnost editovat vlastnosti v rámci jejich editorů (v GUI apod) BeanContext – vazby mezi komponentami a prostředím, ve kterém běží Odkazy na domovské stránky k Java Beans

41 41 Co je to chyba? Jakýkoliv problém, snižující kvalitu programu. Funkcionalita Užitná hodnota Spolehlivost Výkon Požadavky uživatele

42 42 Testování programů (1) Verifikace Ověřování interní konzistence produktu (zda produkt odpovídá návrhu, návrh analýze, analýza požadavkům) Formální verifikace – často obtížná Validace Ověřování (externím nezávislým zdrojem), zda celé řešení splňuje očekávání uživatelů nebo klientů.

43 43 Testování programů (2) Cíl: Snížení rizika výskytu chyby Nutný pesimismus! Výskyt chyby je třeba očekávat. Nejdůležitější pravidlo pro testování je dělat ho. (B. Keringham a R. Pike – The Practice of Programming) Opakované testování (re-testing) Kontrola, zda jsme chybu odstranili. Regresní testování Kontrola, zda jsme úpravou nevnesli nove chyby

44 44 Typy testů (1) Rozdělení na testy, které: jsou součástí výsledného produktu; jsou odděleny od výsledného produktu (náplní této kapitoly). Rozdělení dle množství informací, které máme pro testování. black box testing – osoba, která vytváří test nemusí mít informace o tom, jak funguje aplikace na úrovni, na které je test vytvářen. white box testing – pro vytváření testů je nutné znát informace o fungování testované části

45 45 Typy testů (2) „Ruční“ testování náročné není opakovatelné snadno se přehlédnou chyby Automatické testování generování testů – zajištění maximálního pokrytí zdrojového textu

46 46 Úrovně testování (1) 1. Jednotkové testy (Unit tests) Jsou vytvářeny pro malé části produktu – „jednotky“. Co to je jednotka závisí na konkrétním produktu, programovacím jazyce,… (třída, metoda třídy, funkcionalita tvořené aplikace,…) Při testování testují jen konkrétní jednotku. Neočekává se, že k testování bude použit zbytek aplikace. Simulují například činnost databáze, síťové zdroje a podobně. Obvykle pojmenované jako TestXXX (kde XXX je jméno testované jednotky).

47 47 Úrovně testování (2) 2. Integrační testy Testují větší moduly vytvářené aplikace. 3. Systémové testy Obvykle vytvářeny „testry“ Testují systém jako by byl nainstalován uživateli. Očekává se, že jsou přítomny všechny prostředky nutné pro běh aplikace (databáze, síťové zdroje,…). Testy funkcionality, uživatelského rozhraní, bezpečnosti,… 4. Zákaznický test (Customer tests, Acceptance tests) Testují hotový systém. „Black-box testing“ celého produktu, výsledkem je zda je produkt možno předat zákazníkovi.

48 48 Úrovně testování (3) Alfa Provádí se před zveřejněním produktu Vývojáři „Výstupní kontrola“ Beta Poskytnutí produktu vybrané skupině externích uživatelů, získání zpětné vazby. Gama Kompletní dílo, které zcela neprošlo interní kontrolou kvality

49 49 Funkce prostředí pro testování Prostředí pro testování by minimálně mělo: umět spustit série testů; rozhodnout, zda testy proběhly úspěšně. Jednotlivé testy by měly být prováděny nezávisle na ostatních; v případě, že test skončil chybou určit proč; sumarizovat získané výsledky. V ideálním případě by prostředí pro testování by mělo být nezávislé na vlastních testech.

50 Nástroje pro tvorbu programů50 Příprava před testováním Plánování testů Rozdělení do skupin podle toho, jaké části aplikace testují. Rozdělení do skupin tak, aby mohly být testy prováděny paralelně. Příprava dat Simulace různých zdrojů – databáze,… Generování náhodných dat. Příprava prostředí pro testování. Definování zodpovědnosti za části tvořené aplikace.

51 51 Spuštění testů Provedení jednoho, nějaké skupiny, všech testů. Jsou-li testy prováděny paralelně a nebo jsou některé činnosti prováděny na pozadí může být nutné tyto činnosti synchronizovat. Pokud používáme více počítačů a nebo více platforem může nám prostředí pro testování pomoct při řízení těchto strojů a nebo stírá rozdíly mezi platformami. Uchování výstupu nebo vstupu testů.

52 52 Po skončení testování Vygenerování zprávy, která shrnuje výsledky testu. Přehledný, úplný, flexibilní,… Měl by poskytovat přehled, které soubory a jak byly testovány. Měli bychom být schopni rozlišit mezi neúspěšně provedeným testem a chybě při testování. Měli bychom být schopni uměle vytvořit nalezenou chybu.

53 53 JUnit (1) prostředí Java, varianty i pro jiné jazyky (NUnit, CPPUnit,…) programátorské rozhraní pro tvorbu testů různé nástroje pro automatické provádění testů grafické rozhraní příkazový řádek, akce pro Ant podpora v řadě IDE využití reflexe pro vyhledání testů uvnitř tříd rozšíření pro testování webových aplikací, servletů, databázových aplikací...

54 54 JUnit (2) import junit.framework.TestCase; public class TestXYZ extends TestCase { } void setUp() {…}inicializace void tearDown() {…}finalizace void testX() {…}krok testu assertTrue(podmínka), assertFalse(…) assertEquals(x,y), assertNotNull(x) …

55 55 JUnit (3) package cviceni3; import junit.framework.TestCase; public class TestZlomek extends TestCase { protected Zlomek z1 = new Zlomek(1, 3); protected Zlomek z2 = new Zlomek(2, 6); protected Zlomek z3 = new Zlomek(2, 3); protected void setUp() { } protected void tearDown() { } public void testEquals() { assertEquals(z1, z1); assertEquals(z1, z2); } public void testAdd() { Zlomek result = Zlomek.plus(z1, z2); assertEquals(result, z3); }

56 56 Junit (4) JUnit verze 4.x Java 1.5 Použity anotace public void testVyhledej() { … } protected void setUp() throws Exception protected void tearDown() throws Exception {…}

57 57 JUnit (5) import static org.junit.Assert.*; public class PoleTest protected void setUp() throws Exception { pole = new Pole(); protected void tearDown() throws Exception { pole = null; public void vratPocet() { … assertEquals("return value", expectedReturn, actualReturn); }

58 Demo Spuštění vytvořených testů, odhalení chyby

59 Nástroje pro tvorbu programů59 Jak napsat testy v JUnit(1) Obecně chceme, aby testy ověřovaly funkcionalitu nějaké části vyvíjeného produktu. Informace co testovat získáme spíše z popisu funkcionality než ze zdrojových kódů. Test by měl odhalit, pokud testovaná část neimplementuje „popsané“ funkce.

60 60 Jak napsat testy v JUnit(2) Příklad: Testujeme metodu isEmpty() třídy Vector. Metoda vrátí true v případě, že vektor je prázdný a false v případě že není. Můžeme test napsat takto: public void testIsEmpty () { Vector vector=new Vector(); assertTrue(vector.isEmpty()); } Špatné řešení! Takováto implementace metody isEmpty by testem prošla a přitom neodpovídá popisu! public boolean isEmpty() { return true;} Lepší řešení by bylo otestovat obě varianty výstupů.

61 61 Jak napsat testy v JUnit(3) Konkrétní řešení závisí na testovaném problému! Obecné rady Pokud testovaná metoda vrací víc „typů“ výsledku (například metoda compareTo() třídy Integer vrací -1, 0, 1) otestujte všechny varianty. Obvykle nejsme schopni otestovat všechny varianty vstupů a výstupu. Ověříme nejčastěji používané. Otestujeme „krajní meze“ vstupů a výstupů.

62 Úkol Vytvořte sadu testů, které budou pokrývat testy vaši komponentu Zasobnik Měli by jste testovat činnost následujících metod: E pop() Otestujte i výjimku, kterou tato metoda generuje. E peek() Otestujte i výjimku, kterou tato metoda generuje. Při řešení předpokládejte, že konstruktor i metoda push již byly otestovány a fungují správně.

63 63 Další vlastnosti JUnit (1) Testy lze „združovat“ pomocí třídy TestSuite Výsledek testu lze získat pomocí třídy TestResult Další informace naleznete na:h ttp://junit.sourceforge.net/javadoc/h ttp://junit.sourceforge.net/javadoc/ Aplikace ke stažení na: public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(cviceni2.TestPredmet.class); suite.addTestSuite(cviceni2.TestPredmetIO.class); return suite; } TestResult result = new TestResult(); suite.run(result); result.wasSuccessful();

64 64 Další nástroje pro testování aplikace (1) Analyzátory paměti Uchovává informace o tom, jak a kolik paměti bylo při běhu aplikace použito. Purify, Electric Fence, … Coverage tools Nástroje zjišťující jak velká část aplikace je použita při testování. Výsledek může být zdrojový kód, který nebyl při testování použit. Další možností (branche coverage) je, které části podmínek nebyly provedeny respektive, které větve programu nebyly použity.

65 Nástroje pro tvorbu programů65 Další nástroje pro testování aplikace (2) Testování výkonnosti Sledování počtu volání určitých funkcí Sledování času stráveného výpočtem různých částí programu podklad pro optimalizaci změnou algoritmu Nástroje označované jako profilery. Bývají součástí vývojových prostředí. Profilaci může podporovat překladač a nebo lze použít samostatný program jako: gprof.

66 Nástroje pro tvorbu programů66 Další nástroje pro testování aplikace (3) Analyzátory kódu (static code analyzers) Testují různé statické vlastnosti zdrojových kódů Jak přesně splňují normy pro daný programovací jazyk (ANSI C). Bezpečnost – hledá potencionálně nebezpečné příkazy. Korektnost – některé jazyky umožňují matematicky dokazovat vlastnosti (funkcionální jazyky) nebo hledají vzory častých chyb (FindBug) Velikost případně komplexnost Analýzy dokumentace, která je součástí zdrojových kódů. „Stabilita“ API – jak často se v čase mění

67 Nástroje pro tvorbu programů67 Vývoj řízený testy (TDD) 1. Napíšeme testy 2. Napíšeme program 3. Spustíme automatizované testování 4. Provedeme refaktorizaci 5. Opakujeme až do odstranění všech chyb Hlavním cílem je dosáhnout toho, aby všechny testy prošly Mohou být ale chybné testy!

68 Nástroje pro tvorbu programů68 Refaktorizace (1) Transformace zdrojového kódu, která vede ke zlepšení jeho čitelnosti nebo struktury, avšak bez změny významu nebo chování. Přejmenování proměnné Vytvoření podprogramu ze zadaného úseku programu. Nahrazení posloupnosti příkazu if polymorfismem. … Důležitá součást metodiky TDD, XP Nástroje pro refaktorizaci bývají součástí IDE.

69 69 Testování programů – Refaktorizace (2)

70 70 Sledování chyb (1) Nástroj, který umožňuje uložit informace o chybách a rozliší jednotlivé chyby (jednoznačně je identifikuje). Nástroj využívají všichni členové týmu. Nástroj pomáhá celé skupince lidí pracovat na řadě malých problémů (jednotlivých chybách). Celá řada nástrojů Bugzilla, GNATS, FogBugs, JIRA, TestTrack,… Většina nástrojů jsou informační systémy, které pro uložení dat používají databázi a nejčastěji komunikují přes webové rozhraní.

71 71 Sledování chyb (2) Dobrý nástroj pro sledování chyb by měl: uchovávat informace o chybě, včetně stavu ve kterém je (nevyřešena, řešena, …); umět pracovat se skupinami chyb (odstranění komplexnějšího problému); vyhledat chyby a sledovat aktuální změny; generovat statistiky a komplexnější zprávy o sledovaných chybách; podporovat historii jednotlivých chyb a být schopen spojit chyby s příslušnou verzí dané aplikace (integrace s SCM); rozlišovat závažnost chyby; …

72 72 Sledování chyb – Bugzilla Asi nepoužívanější volně dostupný nástroj pro sledování chyb. Napsána v Perlu, komunikuje přes internetový prohlížeč a používá ke komunikaci. Implementuje běžné funkce očekávané od nástroje pro sledování změn. Vyhledávání - regulární výrazy, boolovské výrazy LDAP, historie změn každé chyby, podpora závislostí mezi chybami, „hlasování“ pro určení „otravných“ chyb …

73 73 Generování dokumentace Dokumentace je vytvářena současně s aplikací Oddělená dokumentace problémy s aktualizací nutnost uvádět kompletní specifikace Dokumentace určená pro: uživatele aplikace; pro potřeby tvůrců aplikace. Dokumentace jako součást zdrojového textu snadnější údržba (např. včetně verzování) literární programování (D. Knuth) dokumentační značky - javadoc

74 74 Program javadoc Dokumentace ve speciálních poznámkách /** * Dokumentační poznámka */ Dokumentační značky + x Popis parametru Rozšíření – generování zdrojových textů pomocí šablon - XDoclet

75 Konvence - (třídy, rozhraní, metody a (jen synonymum přidané v Javadoc (třídy a rozhraní, (třídy a @serial @deprecated

76 76 Program javadoc /** * Konstruktor zlomku. * Naplní čitatele a jmenovatele a převede * zlomek do normalizovaného tvaru. citatel Čitatel zlomku. jmenovatel Jmenovatel zlomku. */ public Zlomek(int citatel, int jmenovatel) { this.citatel = citatel; this.jmenovatel = jmenovatel; normalizuj(); }

77

78 Generování (1) - Ant Test ]]> Copyright © 2000 Dummy Corp. All Rights Reserved. ]]>

79 Generování (2) - IDE

80 Úkol Již dříve vytvořené třídy doplňte o Javadoc komentáře.

81 doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

82 Technologie JSP82 Obsah přednášky Java Servlets Struktura webové aplikace Java Server Pages Komponenty Java Beans Uživatelské značky Knihovny značek (JSTL / Jakarta Struts)

83 Technologie JSP83 Java Servlets Standardní metoda rozšiřování webových serverů o dynamické generování obsahu Základní rozhraní pro aplikace s tenkým klientem (webový prohlížeč) Web Browser Java Servlet Container Servlet

84 Technologie JSP84 Výhody servletů Perzistence mezi voláními – rychlejší odezva na požadavky, sdílení dat CGI – opakované zavádění Přístup k celému Java API JDBC – databáze JAXP – práce s XML JNDI – adresářové služby

85 Technologie JSP85 Servletový kontejner Zajišťuje běh servletu JVM Správa sezení Udržování kontextu Konfigurační informace Perzistence Různí dodavatelé – standardizace Java Servlet API 2.4

86 Technologie JSP86 Typy servletových kontejnerů Rozšíření WWW serveru Apache/JServ S vestavěným WWW serverem Jetty (Mortbay.com) WebSphere (IBM) Samostatné aplikační servery Apache Tomcat Sun Application Server /Glassfish JBoss

87 Technologie JSP87 Java Servlet API GenericServlet servletInfo init() service(request, response) destroy() ServletConfig servletName getInitParameter(n) servletConfig ServletContext attribute(n) getInitParameter(n) servletContext HttpServlet lastModified doGet() doPost() … 1 * 11 javax.servlet.* javax.servlet.http.*

88 Technologie JSP88 Reprezentace požadavku ServletRequest remoteHost, … parameter(name) reader HttpServletRequest contextPath header(name) cookies[] HttpSession attribute(n) removeAttribute(n) invalidate() session *1 - context path

89 Technologie JSP89 Reprezentace odpovědi ServletResponse contentType writer outputStream HttpServletResponse header(name) addCookie(cookie) addHeader(name, value) sendError(sc, msg)

90 Technologie JSP90 Struktura webové aplikace Servlety.class Statický obsah.html,.jpg,.gif, … JSP.jsp Knihovny tříd.jar WEB-INF classes lib web.xml images … index.jsp

91 Technologie JSP91 Java Server Pages Oddělení prezentace od aplikační logiky Zjednodušení realizace stránek Servlety na všechno Statický obsah HTML + servlety pro akce Dynamický obsah v rámci statického Možnost editace HTML editory Kompilace na Java servlet Při prvním požadavku, kontrolují se změny

92 Technologie JSP92 Prvky JSP Direktivy Vložený úsek programu Výraz x : Vestavěné značky akcí Uživatelem definované značky

93 Technologie JSP93 Příklad 1 První pokus Vítejte na mé stránce Dnešní datum je

94 Technologie JSP94 Příklad 2 <% out.println("x\tx^2"); for(int i = 1; i <= 10; i++) { out.println(I + "\t“ + (i * i)); } %>

95 Technologie JSP95 Příklad 3 <% Iterator i = cart.getItems().iterator(); while (i.hasNext()) { ShoppingCartItem item = (ShoppingCartItem)i.next(); BookDetails bd = (BookDetails)item.getItem(); %> /bookdetails?bookId= ">... <% // End of while } %>

96 Technologie JSP96 Předdefinované proměnné HttpServletRequest request HttpServletResponse response HttpSession session PrintWriter out ServlerContext application ServletConfig config PageContext pageContext page (= this)

97 Technologie JSP97 Komponenty Java Beans Konstruktor public StringBean() {} Vlastnosti (properties) private String msg = “Nic”; public String getMsg() { return msg; } public void setMsg(String m) { msg=m; } Metody public void clear() { msg = “Nic”; } Události (events)

98 Technologie JSP98 Příklad package cviceni2; import java.util.Hashtable; import java.util.Collection; public class SeznamUzivatelu { private Hashtable tabulka = new Hashtable(); public void uloz(Uzivatel u) { tabulka.put(u.getLogin(), u); } public Uzivatel hledej(String login) { return (Uzivatel)tabulka.get(login); } public Collection getSeznam() { return tabulka.values(); } }

99 Technologie JSP99 Použití JavaBeans v JSP Zavedení komponenty Přístup k vlastnostem Nastavení vlastnosti

100 Technologie JSP100 Sdílení komponent scope=“page” (implic. hodnota) v objektu PageContext scope=“application” v objektu ServletContext sdílí se všemi servlety ve stejné aplikaci scope=“session” v objektu HttpSession scope=“request” v objektu ServletRequest

101 Technologie JSP101 Uživatelské značky Třída obslužného programu (handler) rozhraní javax.servlet.jsp.tagext.Tag metody doStartTag(), doEndTag() Deskriptor knihovny značek soubor xxx.tld ve formátu XML Soubor JSP používající značky …

102 Technologie JSP102 Příklad – DatumTag.java package tis.tags; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class DatumTag extends TagSupport { public int doStartTag() { try { JspWriter out = pageContext.getOut(); out.print(new java.util.Date()); } catch( java.io.IOException e ) {…} return SKIP_BODY; }

103 Technologie JSP103 Příklad – tis-taglib.tld tis Testy pro TIS datum tis.tags.DatumTag Vloží dnešní datum

104 Technologie JSP104 Příklad – tags.jsp Dnes je

105 Technologie JSP105 JSTL – JavaServer Standard Tag Library Core výrazy tok řízení … práce s URL XML analýza transformace I18n (Internationalization) formátování textů formátování čísel a data/času Database volba zdroje dat SQL dotazy a transakce …

106 Technologie JSP106 Apache Struts Tag Library bean definice a zpřístupnění JavaBeans z různých zdrojů html HTML formuláře a další prvky uživ. rozhraní logic řízení toku aplikace template práce se šablonami stránek tiles tvorba stránek z komponent

107 Technologie JSP107 Příklad Seznam uživatelů

108 Technologie JSP108 Literatura Marty Hall: Java servlety a stránky JSP. Neocortex, Praha, 2001, ISBN


Stáhnout ppt "Lumír Návrat Katedra informatiky FEI VŠB-TUO A-1018 / 597 323 252"

Podobné prezentace


Reklamy Google