Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaMeta Gerhardt Megváltozta több, mint 6 éve
1
Program felépítése, alapvető nyelvi elemek, osztályok, interfészek
Java alapok Program felépítése, alapvető nyelvi elemek, osztályok, interfészek
2
Java alapok Program felépítése Nyelvi alapok Osztályok Öröklés/Interfész/Polimorfizmus Alapvető osztályok #TOC 1
3
Java alapelvek Kialakulása Tervezési célok Kiadások
1996 SUN Microsystems 2009 Oracle Tervezési célok Objektum-orientált Robusztus Biztonságos Architektúrafüggetlen Kiadások ME – Micro Edition SE – Standard Edition EE – Enterprise Edition
4
Végrehajtás Byte kód Java Virtuális Gép
A Java programokat (általában) nem natív gépi kódra fordítjuk, hanem egy Java byte kódot hozunk létre Ez biztosítja a platformfüggetlenséget Java Virtuális Gép Mivel nem létezik byte kódot közvetlenül futtató processzor, ezt emulálni kell Erre szolgál a JVM (Java Virtual Machine), ami futtatni tudja Főbb elemei execution engine class loader garbage collector Legtöbb operációs rendszerre van JVM implementáció
5
Program belépési pont Main függvény Desktop program indítása
public static void main(String[] args) Ilyen szignatúrájú függvény lehet a program belépési pontja Az args tömb megadja az indítási paramétereket Desktop program indítása A virtuális gép indításakor egy osztály nevet kell megadni Ebben az osztálybak kell lennie main függvénynek Ez fog elsőként elindulni Enterprise program indítása Egy alkalmazásszervert indítunk Telepítjük a szükséges komponenseket Az alkalmazásszerver példányosítja szükség esetén az objektumokat
6
Java alapok Program felépítése Nyelvi alapok Osztályok Öröklés/Interfész/Polimorfizmus Alapvető osztályok #TOC 2
7
Alapvető típusok Primitív típusok Csomagolóosztályok szerepe
Primitív típus objektumként kezelése (pl. gyűjteményeknél) Alapvető műveletek az adott típussal kapcsolatban Primitív típus Csomagoló osztály Leírás boolean Boolean Logikai típus (true/false) char Character 16 bites UNICODE byte Byte 8 bites előjeles egész short Short 16 bites előjeles egész int Integer 32 bites előjeles egész long Long 64 bites előjeles egész float Float 32 bites lebegőpontos szám double Double 64 bites lebegőpontos szám
8
Tömbök Tömbök deklarációja Tömb létrehozása Tömb használata
típus[ ] név; Tömb létrehozása név = new típus[méret]; Tömb használata név[index] Indexelés mindig 0-tól indul Többdimenziós tömb Tömbök tömbje hozható csak létre Ez persze lehet fűrészfogas is Tömb méretének lekérdezése név.length
9
Alapvető operátorok Operátor precedencia Operátor felülírás nincs
Művelet Operátor Posztfix kif++ kif–- Unáris ++kif --kif +kif -kif ~ ! Multiplikatív * / % Additív + - Shift << >> >>> Relációs < > <= >= instanceof Egyenlőség vizsgálat == != Bitenkénti ÉS & Bitkitenkénti kizáró VAGY ^ Bitenkénti megengedő VAGY | Logikai ÉS && Logikai VAGY || Ternáris ? : Értékadás = += -= *= /= %= &= ^= |= <<= >>= >>>=
10
Vezérlési szerkezetek
Szekvencia Blokkok képzése { } jelekkel lehetséges Elágazás Kétirányú if (kifejezés) utasítás; [else utasítás;] Többirányú switch(kifejezés) { case eset1: utasítások; [break;] case eset2: utasítások; [break;] [default: utasítások;] }
11
Vezérlési szerkezetek (2)
Ciklusok Elöltesztelő while (logikai_feltétel) utasítás; Hátultesztelő do utasítás; while (logikai_feltétel) Számláló for(kezdőérték;feltétel;módosítás) utasítás; Bejárás for(változó : gyűjtemény) utasítás; Kilépési lehetőségek break continue
12
Java alapok Program felépítése Nyelvi alapok Osztályok Öröklés/Interfész/Polimorfizmus Alapvető osztályok #TOC 3
13
Osztály definíció Osztály létrehozása Hozzáférési módosító
class név { } segítségével Publikus osztálynak mindig azonos nevű .java fájlban kell lennie Hozzáférési módosító public – az osztály minden más osztály számára látható jelzés nélkül – az osztály csak csomagon belül látható Egyéb módosítók abstract – Absztrakt osztály jelzése, nem példányosítható final – Lezárt osztály jelzése, nem lehet származtatni belőle Példányosítás new osztálynév([konstruktor paraméterek]);
14
Mezők definiálása Mező definiálása Hozzáférési módosító
[módosítók] típus név [= kezdőérték]; Hozzáférési módosító Egyéb módosítók final – mező értéke nem változtatható (csak inicializálható) static – statikus mező transient – nem szerializálandó volatile – központi memóriában tárolandó osztály csomag leszármazott egyéb public protected jelzés nélkül private
15
Metódusok definiálása
Metódus definíció [módosítók] [típus] [név]([paraméterek]) { } Visszatérési érték lehet void bármilyen egyéb típus (return kulcsszóval adható meg a visszatérési érték) Módosítók Hozzáférési szintek: ua. mint mezőknél final – leszármazottban nem definiálható felül static – statikus metódus native – a metódus nem Java nyelven íródott abstract – absztrakt metódus synchronized – a metódus egyidőben csak egyszer futhat
16
Konstruktorok Konstruktorok Inicializáló blokk Destruktor
Neve ugyanaz mint az osztály neve Nincs visszatérési értéke Ha nem írunk konstruktort, automatikusan létrejön egy paraméter nélküli, üres implicit konstruktor Inicializáló blokk Jelölése az osztályon belül { és } között Konstruktor előtt lefut Statikus inicializáló blokk is készíthető: static { } Destruktor Destruktor nincs Helyette felüldefiniálható egy finalize() nevű metódus
17
JavaBean Szabvány, ami többek között az alábbiakat várja el
Tulajdonságok lenti formájú használata Paraméter nélküli konstruktor megléte Szerializálhatóság Tulajdonság jelzése Szám/szöveg mezők: Kiolvasás: <típus> get<név>() Módosítás: void set<név>(<típus> value) Logikai mezők: Kiolvasás: <típus> is<név>() Indexelt mezők: Kiolvasás: <típus> get<név>(int index) Módosítás: void set<név>(int index, <típus> value)
18
Csomagok Csomagok használata Csomagok elhelyezése Csomagok készítése
package csomagnév; Csomagok importálása import csomag.osztály; import csomag.*; Csomagok elhelyezése A csomagnévnek igazodnia kell a könyvtár struktúrához Forráskód esetén (.java állományok) Futtatás esetén (.class állományok) JVM paraméter CLASSPATH környezeti változó Csomag tárolható .zip/.jar fájlban
19
Java alapok Program felépítése Nyelvi alapok Osztályok Öröklés/Interfész/Polimorfizmus Alapvető osztályok #TOC 4
20
Öröklés Öröklés használata Konstruktorok szerepe
Java egyszeri öröklést engedélyez class osztálynév extends ősosztály { } Leszármazottban a super kulcsszó segítségével lehet elérni az ős metódusait, pl. super.metódus(…) Konstruktorok szerepe Konstruktorok nem öröklődnek Leszármazott meghívhatja az ős konstruktorát a saját konstruktorának első sorába írt super(paraméterek) formával Szabályok Minden leszármazottnak meg kell hívnia az ős valamely konstruktorát Amennyiben ez nem történik meg, alapból meghívódik az ős paraméter nélküli konstruktora
21
Object ősosztály java.lang.Object Metódusai
Java esetében minden osztálynak az őse Metódusai protected Object clone() boolean equals(Object obj) void finalize() Class<?> getClass() int hashCode() void notify() void notifyAll() String toString() void wait()
22
Interfészek Interfész definiálása Interfész implementálása
interface név { } segítségével Tartalmazhat Metódus szignatúrákat Konstansokat Interfész implementálása class osztálynév implements interfész1, interfész2 { } Az osztálynak implementálnia kell az interfészek metódusait Vagy absztrakt metódusként kell megadni Interfészek kiterjesztése interface név extends interfacenév1, interfacenév2
23
Java alapok Program felépítése Nyelvi alapok Osztályok Öröklés/Interfész/Polimorfizmus Alapvető osztályok #TOC 5
24
Alapvető csomagok Csomag Tartalma javax.applet Appletek java.awt
Vizuális felület java.beans Javabeans létrehozás/kezelés java.io Kommunikáció java.lang Alapvető nyelvi elemek java.math Matematikai osztályok java.net Hálózatok Java.nio Új kommunikáció java.rmi Távoli metódushívás java.security Biztonságpolitika Java.text Szövegkezelés java.sql Adatbáziskezelés java.util Segédosztályok
25
Csomagolóosztályok java.lang.Integer java.lang.Double
public Integer(int value) Integer objektum létrehozása public int intValue() Integer objektumból a szám érték kiolvasása public static String toString(int i) Egész szám átalakítása szöveggé public int parseInt(String s) Szöveg átalakítása számmá public static final int MIN_VALUE java.lang.Double java.lang.Character java.lang.Boolean
26
Szövegek kezelése java.lang.String java.lang.StringBuilder
Szöveges literálok ("valami") String objektumot hoznak létre equals(object anObject) Egyenlőségvizsgálat (mivel a == nincs felülírva!) compareTo(String anotherString) Két String összehasonlítása (eredmény lehet, =0, <0, >0) format(String format, Object… args) String.format("%1$d szó: %2$s", 10, "Valami"); eredménye: „10. szó: Valami” length() char charAt(int index) String substring(int beginIndex, int endIndex) java.lang.StringBuilder
27
Matematikai műveletek
java.lang.Math public static final double PI public static double sin(double a) public static double sqrt(double a) public static double ceil(double a) public static double floor(double a) public static int round(float a) public static double pow(double a, double b) public static double random() public static int abs(int a) public static int max(int a, int b) …
28
Collection Framework TreeSet : RBTree Szinkronizáció
( TreeSet : RBTree Szinkronizáció
29
Alapvető gyűjtemények
java.util.ArrayList<E> public boolean add(E e) public void add(int index, E element) public E remove(int index) public boolean remove(Object o) public E get(int index) public E set(int index, E element) java.util.HashMap<K,V> public V put(K key, V value) public V get(Object key) public V remove(Object key) public boolean containsKey(Object key) …
30
Kivételkezelés Kivétel eldobása Nem ellenőrzött kivételek
throw kivételobjektum; try – catch – finally blokkok használata Nem ellenőrzött kivételek RuntimeException osztály leszármazottai Nem kötelező őket ellenőrizni Ellenőrzött kivételek Exception osztály leszármazottai Ezeket vagy Catch blokkban ellenőrizzük Metódus fejlécénél megadott throws kivételnév formával specifikáljuk. Ez esetben az ellenőrzés felelőssége a hívóra hárul #SAVE Java_alapok
31
Streamek, Szűrők, Szerializáció, TCP/IP kapcsolat kezelése
I/O Stream Streamek, Szűrők, Szerializáció, TCP/IP kapcsolat kezelése
32
I/O Stream Stream fogalma Stream megvalósítások Szűrők szerepe Szerializáció TCP/IP kapcsolat kliens oldalon TCP/IP kapcsolat szerver oldalon #TOC 1
33
Hagyományos I/O kezelés (Pascal/Delphi)
Filekezelés Alap filekezelés – Pascal eljárások AssignFile/Reset/Rewrite/Append/CloseFile eljárás Read/ReadLn/Write/WriteLn eljárás TZipFile komponens Open/Close metódus Read metódus TCP/IP kezelés TClientSocket komponens Host/Address tulajdonság DoActivate metódus OnConnect/OnRead eseménykezelő Titkosítás, CRC, …
34
Stream fogalma Stream: egy adatforrást, vagy -célt reprezentál
Elrejti a tényleges megvalósítást, csak műveleteket nyújt Megnyitás Írás/olvasás Lezárás A háttérben egy fizikai forrás/cél hajtja ezeket végre File Hálózati kapcsolat Csatolt eszközök Tömb a memóriában Más programok Standard I/O stb. Adatforrás Input stream Program | | Adatforrás Output stream Program | |
35
Stream életciklusa Streamek irányítottsága Egy stream életciklusa
Írható és olvasható streamek (pl. C#) Csak írható vagy csak olvasható streamek (pl. Java) Egy stream életciklusa Megnyitás A példányosításkor automatikusan megnyitott streamet kapunk A konstuktor tartalmazza az elérni kívánt adatfolyam adatait file esetén filenév hálózati kapcsolat esetén hostnév/portszám stb. Írás/olvasás A stream megfelelő műveletei segítségével Bezárás A stream objektum megfelelő metódusával
36
Java stream ősosztályok
Ősosztályok szerepe Minden stream ezek leszármazottja lesz Alapvető műveleteket meghatározzák Byte szervezésű streamek Legkisebb írható/olvasható egység a byte Ősosztályok java.io.InputStream java.io.OutputStream Karakter szervezésű streamek Legkisebb írható/olvasható egység a Unicode karakter Működésük során figyelembe veszik a kódolási különbségeket java.io.Reader java.io.Writer
37
Byte szervezésű stream műveletei
Megnyitás: konstruktor hívással Byte(ok) írása (OutputStream) write(int a) throws IOException write(byte b[]) throws IOException Byte(ok) olvasása (InputStream) int read() throws IOException Visszatérési értéke -1 ha vége az adatfolyamnak Ha nincs adat, akkor a program futását blokkolja int read(byte b[]) throws IOException Visszatérési értéke a beolvasott elemek száma Lezárás close() Puffer bármikor üríthető a flush() metódus segítségével Mindig le kell zárni (tipikusan finally blokkban) Ellenőrzött kivételek szerepe Flush szerepe (log, hálózat)
38
Karakter szervezésű stream műveletei
Megnyitás: konstruktor hívással Karakter(ek) írása (Writer) write(int c) throws IOException write(char c[]) throws IOException Byte(ok) olvasása (Reader) int read() throws IOException Visszatérési értéke -1 ha vége az adatfolyamnak Ha nincs adat, akkor a program futását blokkolja int read(char c[]) throws IOException Visszatérési értéke a beolvasott elemek száma Lezárás close() Puffer bármikor üríthető a flush() metódus segítségével
39
I/O Stream Stream fogalma Stream megvalósítások Szűrők szerepe Szerializáció TCP/IP kapcsolat kliens oldalon TCP/IP kapcsolat szerver oldalon #TOC 2
40
File alapú megvalósítások és konstruktoraik
Byte szervezésű java.io.FileInputStream FileInputStream(String filename) throws FileNotFoundException FileInputStream(File file) throws FileNotFoundException FileInputStream(FileDescriptor fd) java.io.FileOutputStream FileOutputStream(String filename) throws FileNotFoundException FileOutputStream(String filename, bool append) throws FileNotFoundExc… … Karakter szervezésű java.io.FileReader Konstruktorok hasonlóak java.io.FileWriter
41
Egyéb stream megvalósítások
Csövekre leképező osztályok PipedInputStream/PipedOutputStream PipedReader/PipedWriter Tömbökre leképező osztályok ByteArrayInputStream/ByteArrayOutputStream CharArrayReader/CharArrayWriter Stringre leképező osztály StringReader/StringWriter
42
java.io csomag Stream kezelés File kezelés Ősosztályok
InputStream OutputStream Reader Writer File megvalósítások FileInputStream stb. Technikai megvalósítások StringReader Szűrők File kezelés File osztály
43
Stream alapú adatcsere
A módszer előnyei Objektumorientált Jól strukturált osztály hierarchia Ugyanazokkal a metódusokkal kezelhető minden fizikai megvalósítás Az egyes stream megvalósítások könnyen cserélhetők A módszer hátrányai Elsőre bonyolultnak tűnhet Csak alacsony szintű kommunikációt tesz lehetővé byteok írása/olvasása karakterek írása/olvasása
44
I/O Stream Stream fogalma Stream megvalósítások Szűrők szerepe Szerializáció TCP/IP kapcsolat kliens oldalon TCP/IP kapcsolat szerver oldalon #TOC 3
45
Szűrők alapvető szerepe
Alap streamek hiányosságai Tetszőleges típus írása/olvasása int, float, double, objektumok, stb. Kiegészítő szolgáltatások tömörítés, titkosítás, CRC, stb. Szűrők szerepe Tetszőleges streamhez kapcsolódnak, ezzel egy magasabb szintű kezelést biztosítanak az adatfolyamhoz Adatforrás Input stream Input szűrő Program | | 3.57 | | | | … Adatforrás Output stream Output szűrő Program | | 3.57 | | | | …
46
Szűrők használata Szűrő ősosztályok Szűrő létrehozása Szűrő használata
FilterOutputStream/FilterInputStream FilterWriter/FilterReader Szűrő létrehozása Szűrő objektum példányosításával hozható létre A konstruktorban kell megadni a hozzárendelt streamet Szűrő használata A szűrők saját speciális metódusain keresztül A szűrő kezeli a mögöttes streamet Szűrő lezárása A szűrő close() metódusának segítségével (flush() is használható) A szűrő lezárásakor lezárja a mögöttes streamet is Közvetlenül a streamhez nem is célszerű hozzáférni
47
java.io.PrintWriter szűrő használata
Feladata: Java alaptípusok írása szöveges formában Életciklusa Szűrő létrehozása: PrintWriter(Writer out) PrintWriter(Writer out, boolean autoFlush) … Alapvető típusok írása public void print(int v) throws IOException public void print(float v) throws IOException Alapvető típusok írása sortöréssel public void println(int v) throws IOException Lezárás void close()
48
Java alaptípusok írása/olvasása
java.io.DataOutputStream Feladata: Java alaptípusok írása byte típusú streambe Alapvető műveletei public void writeInt(int v) throws IOException public void writeFloat(float v) throws IOException public void writeChar(char v) throws IOException ... java.io.DataInputStream Feladata: Java alaptípusok olvasása byte típusú streamből public int readInt() throws IOException public float readFloat() throws IOException public char readChar() throws IOException Stream vége után olvasva egy EOFException kivételt dob
49
Pufferelt olvasás Szerepe Byte alapon Karakter alapon
Gyakran nem hatékony a byteonként/karakterenkénti I/O Célszerű ilyenkor nagyobb egységeket írni/olvasni (pufferelés) Erre a célra szolgálnak az alábbi szűrők Byte alapon BufferedInputStream/BufferedOutputStream Metódusai hasonlóak a normál streameknél látottakhoz Karakter alapon BufferedReader String readLine() Érdemes ezt külön kiemelni, mivel ezzel tudunk hatékonyan olvasni egy szöveges fájlból sorokat BufferedWriter
50
További szűrők Tömörítés Ellenőrzött átvitel Titkosítás
ZipInputStream/ZipOutputStream GZIPInputStream/GZIPOutputStream Ellenőrzött átvitel CheckedInputStream/CheckedOutputStream Titkosítás CipherInputStream/CipherOutputStream Objektumok továbbítása (szerializálás) ObjectInputStream/ObjectOutputStream Szöveges forrásból sorok számolása LineNumberReader
51
Szűrők összekapcsolása
Minden szűrő stream is egyben A szűrők a stream osztályok leszármazottai Így paraméterként átadhatóak egy másik szűrő konstruktorának Szűrők láncolása Összekapcsolva több szűrőt, egy láncolt alkothatunk Íráskor/olvasáskor ugyanazt a láncolt fordítva célszerű kiépíteni Ezzel a szűrők egyedi szolgáltatásait összeláncolhatjuk pl. konverzió + tömörítés + titkosítás + CRC ellenőrzés Adatforrás Output stream Output szűrő 1 Output szűrő 2 Program | 3.57 | | A | B | C Adatforrás Input stream Input szűrő 1 Input szűrő 2 Program | 3.57 | | A | B | C
52
Byte/karakter streamek összekapcsolása
Streamek szervezése Minden stream/szűrő byte vagy karakter alapú Előfordul, hogy byte streamünk van (pl. OutputStream), viszont karakteres szűrőt szeretnénk rákapcsolni (pl. PrintWriter) Az összekapcsoláshoz (átalakításhoz) léteznek szűrők Byte csatorna feletti karakter csatorna létrehozása Osztályok InputStreamReader/OutputStreamWriter Használatuk A konstruktorban egy byte alapú streamet kell megadni Ők maguk pedig karakteres streamként használhatók Ha szükséges, a konstruktorban meg lehet adni kódtáblát is
53
I/O Stream Stream fogalma Stream megvalósítások Szűrők szerepe Szerializáció TCP/IP kapcsolat kliens oldalon TCP/IP kapcsolat szerver oldalon #TOC 4
54
Szerializáció fogalma
Egy olyan művelet, amelynek bemenete egy objektum, a kimenete pedig egy azt reprezentáló byte sorozatot Ez alapján elő lehet állítani az eredeti objektum másolatát Marshalling: objektum továbbítása egyik rendszerből egy másikba (viszont ez már a kódbázisra is vonatkozik) Szerepe Objektumok eltárolásakor (pl. fileban/adatbázisban) Objektumok továbbításakor (pl. távoli metódushívás) Egyéb (naplózás, undo funkció, stb.) A művelet platformfüggetlen pl. Windowsból szerializált Java objektum deszerializálható Linux rendszereken
55
Bemenetre vonatkozó követelmények
java.io.Serializable interfész Csak azon osztályok példányai szerializálhatók, amelyek megvalósítják ezt az interfészt Csak jelölő interfész, nem ír elő metódust/tulajdonságot Mezőkre vonatkozó megkötések Minden mezőnek szerializálhatónak kell lennie transient kulcsszó jelöli, ha egy mezőt nem kell/lehet szerializálni Statikus mezők nem vesznek részt a szerializációban Verziószám static final long serialVersionUID = 1L; minden szerializálható osztálynak célszerű adni egy verziószámot ez mutatja, hogy az eltárolt és az aktuálisan betöltött osztálydefiníció azonos-e
56
Bináris szerializáció
Jellemzői A byte folyam tömör bináris adatokat tartalmaz Ember által nem (nehezen) olvasható Szerializáció Osztály: ObjectOutputStream void writeObject(Object x) throws IOException Deszerializáció Osztály: ObjectInputStream Object readObject() throws IOException, ClassNotFoundException A streamben tárolt adatok alapján létrehoz egy objektumot Object a visszatérési érték, tehát ezt kasztolni kell a megfelelő típusra Ellenőrzi a serialVersionUID-et, ha nem egyezik, kivételt dob
57
JAXB felépítése JAXB – Java Architecture for XML Binding JAXB tartalma
Java SE1.6 óta használható Előzmények XmlEncoder/XStream SAX, DOM parserek használata JAXB tartalma Annotációk XML tárolásra szánt osztályok annotációja Ezek mezőinek annotációi XML marshalling/unmarshalling Java objektumból XML létrehozása XML-ből Java objektum létrehozása Binding XML séma alapján Java kód generálása (nem tárgyaljuk) xjc segédprogram
58
JAXB osztály előkészítés
Osztály szintű annotáció @XmlRootElement XML gyökérelem meghatározása Neve alapesetben az osztály neve lesz, de ez felülírható a name attribútummal @XmlAccessorType(XmlAccessType.FIELD) Ez megadja, hogy a mezőket, és ne a gettereket akarja szerializálni Mezőszintű annotációk @XmlElement Ezzel kell megjelölni azokat a mezőket, amelyeket szeretnénk az XML fájlba írni Mező helyett a getter metódusokat is meg lehet jelölni @XmlTransient Az így megjelölt mező nem vesz részt az XML leképezésben JavaBean szabvány Az osztálynak kell, hogy legyen paraméter nélküli konstruktora
59
JAXB kontextus JAXB kontextus létrehozása
Belépési pontot hoz létre a JAXB API-hoz static JAXBContext newInstance(Class... classesToBeBound) throws JAXBException Ez a statikus metódus létrehoz egy kontextust Paraméterként meg kell adni a használni kívánt osztályokat A megadott osztályok által hivatkozott további osztályokat nem kell megadni Leszármazottakat azonban meg kell adni Példa hívás: JAXBContext jaxbContext = JAXBContext.newInstance(Company.class); A létrehozott kontextuson át érhetők el a JAXB funkciók createMarshaller()/createUnmarshaller() generateSchema(SchemaOutputResolver outputResolver) createBinder()
60
JAXB XML szerializáció/deszerializáció
Marshalling Interfész: javax.xml.bind.Marshaller Hozzáférés: <<kontextus>>.createMarshaller(); XML írás void marshal(Object jaxbElement, OutputStream os) void marshal(Object jaxbElement, Writer writer) void marshal(Object jaxbElement, File output) Unmarshalling Interfész: javax.xml.bind.Unmarshaller Példányosítás: <<kontextus>>.createUnmarshaller(); XML olvasás Object unmarshal(InputStream is) … Beolvasás után kasztolni kell
61
I/O Stream Stream fogalma Stream megvalósítások Szűrők szerepe Szerializáció TCP/IP kapcsolat kliens oldalon TCP/IP kapcsolat szerver oldalon #TOC 5
62
TCP/IP kapcsolat Socket Szerepek Kommunikáció
IP alapú kommunikációban a hálózati folyam végpontja Címe: IP-cím (gazdagép) és portszám (alkalmazás) Szerepek Kliens Kapcsolatot kezdeményező Aktív szereplő (megnyitja a kapcsolatot) Szerver Kapcsolatot fogadó Passzív szereplő (várakozik a bejövő kapcsolatokra) Kommunikáció A kliens és szerver csak a kapcsolatfelvételkor különbözik Az adatátvitel szempontjából ugyanúgy működnek
63
Hálózati kommunikáció Javaban
java.net csomag URL kezelés TCP kapcsolat kezelése UDP kapcsolat kezelése (nem tárgyaljuk) java.net.Socket osztály Kliens oldalon ezzel tudjuk kezdeményezni a kapcsolatot Mind a kliens, mind a szerver oldalon ezen keresztül tudjuk a kapcsolatot kezelni (küldés/fogadás/lezárás/stb.) Szerver IP: port: 4520 port: 6621 Kliens IP: port: 4521 port: 6622 port: 4522 Socket port: 6623 Socket InputStream InputStream OutputStream OutputStream port: 4523 port: 6624
64
Kliens oldalon kapcsolat felépítése
A konstruktor meghívásakor történik az átadott paraméterek szerint Socket(String host, int port) throws UnknownHostException, IOException Cím meghatározása IP alapján „ ” Név alapján „ A portszám egy egész szám 1 és között Kapcsolat megnyitása Ha a Socket példány létrejött, akkor már él a hálózati kapcsolat Nincs szükség külön megnyitás műveletre
65
Hálózati kapcsolat adatainak lekérdezése
A létrehozott kapcsolat adatai lekérdezhetőek Távoli és helyi gép címe InetAddress getInetAddress() InetAddress getLocalAddress() Távoli és helyi gépen nyitott port száma int getPort() int getLocalPort() A kapcsolat állapotával kapcsolatos adatok boolean isConnected() boolean isClosed() boolean isInputShutdown() boolean isOutputShutdown()
66
Kommunikáció socketen keresztül
Kimeneti és bemeneti stream A Socket objektum metódusain keresztül lehet hozzáférni a bemeneti és a kimeneti streamhez InputStream getInputStream() throws IOException OutputStream getOutputStream() throws IOException A kommunikáció ezeken keresztül zajlik Mind a kliens, mind a szerver oldalon van egy-egy Socket objektum Amit a kliens ír a kimenetre, azt látja a szerver a bemeneten Amit a szerver ír a kimenetre, azt látja a kliens a bemeneten Kommunikáció lezárása Csatornák lezárása a már látott módon flush(), close() Maga a Socket is lezárható a close() metódussal
67
I/O Stream Stream fogalma Stream megvalósítások Szűrők szerepe Szerializáció TCP/IP kapcsolat kliens oldalon TCP/IP kapcsolat szerver oldalon #TOC 6
68
ServerSocket létrehozása
Kommunikáció során Kommunikáció során nincs különbség a kliens és szerver között Csak a kapcsolat felépítésekor Szerver oldali feladatok Egy megadott porton kell várakozni a kliens kérésekre Ha ez megtörtént, akkor példányosítani kell egy Socket objektumot a szerver oldalon java.net.ServerSocket ServerSocket(int port) throws IOException A konstruktorában megadott portszámon fog majd figyelni a bejövő kérésekre void close() throws IOException Ezzel a metódussal lehet lezárni az objektumot
69
ServerSocket használata
Várakozás indítása A példányosított ServerSocket objektum még nem kezdi el a figyelést, ehhez meg kell hívni annak accept() metódusát Socket accept() throws IOException A metódus meghívását követően a program futása blokkolódik Várakozás eredménye Amennyiben befut egy kliens kérés, akkor az accept() metódus visszatérési értékkén egy Socket objektumot ad, amely kapcsolatban áll a klienssel Újabb kliens kiszolgálásához újra meg kell hívni az accept() metódust, különben nem tudjuk fogadni a kérést Célszerű a kiszolgálást egy külön szálon végezni
70
Protokoll tervezése Protokoll
Egy szabályrendszer, amely megadja, hogy a kapcsolat résztvevői miképp tudnak egymással kommunikálni Amit küld a kliens, azt olvasnia kell a szervernek. Amit pedig a szerver küld, annak a fogadására fel kell készülnie a kliensnek Célszerű rögzíteni az írások/olvasások Időbeni sorrendjét Irányát Adatok típusát, értelmezési módját A protokoll ismeretében a kliens és a szerver implementációja egymástól független
71
Egyszerű protokoll Esettanulmány
Készítsünk kliens/szerver alkalmazást, ahol a kliens átküld a szervernek néhány Stringet, majd a szerver ezek közül visszaküldi a kliens számára a leghosszabbat! Kliens oldalon Szerver oldalon 1. A kapcsolat felépítése 1. Várakozás a következő kliensre 2. Stringek darabszámának átküldése egész számként az output streamen 2. A Stringek darabszámát tartalmazó egész szám beolvasása (N) az input streamről 3. A Stringek átküldése egyenként az output streamen 3. N darab String beolvasása az input streamről 4. Az eredmény kiolvasása az input streamről 4. A leghosszabb String átküldése az output streamen 5. A kapcsolat lezárása 6. goto 1 #SAVE Java_stream
72
HTTP, Szervletek, HTML Formok feldolgozása, JSP
73
Szervletek HTTP működése Szervletek alapjai HTML formok feldolgozása JSP #TOC 1
74
Hypertext Transfer Protocol
TCP alapú alkalmazásszintű protokoll WWW központi protokollja Hypertext dokumentumok letöltésére fejlesztették ki Ezzel a protokollal kommunikálnak egymással a HTTP szerverek (webszerver) és HTTP kliensek (böngésző) Protokoll verziói 1996 – HTTP 1.0 [RFC1945] 1999 – HTTP 1.1 [RFC2616] 2015 – HTTP 2.0 [RFC7540]
75
Kérés-válasz protokoll
Statikus kérés lépései Kliens kezdeményezi a kapcsolatot Kérés küldése Szerver megkeresi a kért dokumentumot Válasz küldése Kapcsolat lezárása Kliens Szerver Cím megadás Kérés elküldés Kérés fogadás Dokumentum keresés Válasz összeállítás Válasz fogadás Válasz elküldés Megjelenítés
76
HTTP kérés részei Használt HTTP protokoll verziószám
Végrehajtandó parancs GET – erőforrás letöltése HEAD – erőforrás fejlécének letöltése POST – erőforrás módosítás … Az erőforrás azonosító Erőforrás, amin az előbbi parancsot végre kell hajtani Tipikusan egy URL Fejlécmezők (nem kötelező) Törzsadat (nem kötelező)
77
HTTP kérés fejlécmezők
Médiumra vonatkozó igények Accept Azon médiatípusok listája, amelyeket a kliens fogadni képes Accept-Language Azon nyelvek listája, amelyeket a kliens fogadni képes Kliens azonosítása User-Agent A kliens oldalon használt alkalmazás neve, verziószáma Authorization Szerverrel szembeni jogosultság igazolások Cookie Sütik tartalma …
78
HTTP válasz részei Használt HTTP protokoll verziószám Válaszkód
2?? – kérés sikeres 3?? – hivatkozott erőforrást mást helyre telepítették 4?? – szerver nem tudja végrehajtani a kérést 400 – hibás kérés 401 – azonosítási hiba 404 – erőforrás nem található 5?? – kiszolgáló hiba Fejlécmezők (nem kötelező) Törzsadat (nem kötelező)
79
HTTP válasz fejlécmezők
Törzsadat meta adatok Content-Type – a HTTP törzsadat MIME típusa Content-Encoding – használt kódolási mód megnevezése Content-Length – HTTP törzsadat hossza Érvényességi adatok Date – válasz ideje Expires – lejárat ideje Last-Modified – utolsó módosítás időpontja Technikai adatok Location – az erőforrást áttelepítették, annak helye Cache-Control – gyorsítótárazással kapcsolatos adatok …
80
Példa kapcsolat
81
Szervletek HTTP működése Szervletek alapjai HTML formok feldolgozása JSP #TOC 2
82
Dinamikus oldalgenerálás
Az URL nem egy fájlt, hanem egy szolgáltatást azonosít A szerver nem fájlt ad vissza, hanem ennek eredményét Megvalósítások CGI, szervlet, egyéb Kliens Szerver Cím megadás Kérés elküldés Kérés fogadás Alkalmazás keresés Alkalmazás meghívás Válasz összeállítás Válasz fogadás Válasz elküldés Megjelenítés
83
Java szervlet A szervletek olyan osztályok, amelyeket egy web szerver működtet, és kéréseket szolgának ki Enterprise környezetben működnek Megvalósítják a javax.servlet.Servlet interfészt, aminek alapvető műveletei init(ServletConfig config) Inicializálás a megadott beállításokkal service(ServletRequest req, ServletResponse res) Kérés kiszolgálása, ahol req: tartalmazza a kérés adatait res : tartalmazza a válasz adatait destroy() Leállítás
84
Szervlet életciklusa A szervletet a webkonténer kezeli
példányosítja meghívja a metódusait (eseménykezeléshez hasonló módon) megszünteti Egy szervlet példány egymást követően több kérést is kiszolgálhat szervlet indítása Osztály betöltés Példányosítás init() metódus service() metódus kérések kiszolgálása service() metódus szervlet leállítása Felszabadítás destroy() metódus
85
HttpServlet osztály Kimondottan weben beérkező HTTP alapú kérések kiszolgálására szolgál Specialitásai Az általános service() metódus helyett a HTTP parancsokra specializált metódusokat tartalmaz doGet(…) – GET parancs kiszolgálása doPost(…) – POST parancs kiszolgálása … A fenti metódusok kimondottan HTTP kérésekre specializált paraméter objektumokat kapnak HttpServletRequest – kérés adatai HttpServletResponse – válasz adatai Többi szervlet metódus is elérhető (init, stb.)
86
HttpServlet indítása/leállítása
Szervlet inicializálása A webkonténer létrehozza az objektumot Ezt követően meghívja az inicializáló metódust void init(ServletConfig config) throws ServletException; itt célszerű inicializálni a szervletet a ServletConfig objektum tartalmazza a környezeti paramétereket amennyiben nem sikerült inicializálni a szervletet, kivételt kell dobnia Szervlet leállítása A webkonténer bármikor leállíthatja a szervletet Ez előtt még biztosan meghívja a destroy metódust void destroy(); itt lehet felszabadítani a szervlet erőforrásait
87
Kérések kiszolgálása Beérkező kéréskor meghívódik a megfelelő metódus
void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException Feladatuk, hogy kiszolgálják a megfelelő kérés típust A kérés adatai (paraméterei) a req objektumból olvashatók ki fejlécmezők paraméterek törzsadat kapcsolat jellemzők A választ a resp objektumon keresztül lehet megadni
88
HttpServletRequest törzsadat hozzáférés
Törzsadat jellemzői public String getCharacterEncoding() A kliens által használt karakter kódolási mód public int getContentLength() Küldött törzsadat hossza public String getContentType() A kliens által küldött adat MIME típusa Törzsadathoz való hozzáférés public ServletInputStream getInputStream() Byte alapú stream a küldött adatok kiolvasásáshoz public BufferedReader getReader() Karakter alapú stream a küldött adatok kiolvasásához
89
HttpServletRequest technikai adatok
Kapcsolat adatai public String getRemoteHost() Kliens gép IP címe public String getLocalName() Szerver IP címe public StringBuffer getRequestURL() A kéréshez tartozó URL Fejlécmezők adatai public String getHeader(String name) Megadott nevű fejlécmező kiolvasása public Enumeration getHeaders(String name) Több értéket tartalmazó fejlécmező esetén az értékeket tartalmazó String bejáró
90
HttpServletResponse törzsadat küldése
Metaadatok beállítása public void setContentType(String type) Paramétere egy MIME típus (pl. „text/html”) public void setContentLength(int len) Válasz hossza (nem kötelező megadni) Válasz elküldési lehetőségei public ServletOutputStream getOutputStream() throws IOException Byte alapú adatok visszaküldésére szolgáló streamet ad vissza (pl. ha a válasz nem egy HTML oldal, hanem egy kép) public PrintWriter getWriter() throws IOException Szöveges adat visszaküldésére szolgáló streamet ad vissza
91
HttpServletResponse technikai adatok
public void setStatus(int sc) Válasz státuszkód megadása (404, stb.) public void sendRedirect(String location) throws IOException Átirányítási kérelem megadása Válasz fejlécmezők megadása public void addHeader(String name, String value) Új szöveges típusú válasz fejlécmező felvétele public void addIntHeader(String name, int value) Új egész szám típusú fejlécmező felvétele public void addDateHeader(String name, long value) Új dátum típusú fejlécmező felvétele
92
Szervletek HTTP működése Szervletek alapjai HTML formok feldolgozása JSP #TOC 3
93
HTTP paraméterek Paraméterek használata Kliens oldalon Szerver oldalon
Egy kéréskor van lehetőség paraméterek megadására Ezekkel lehet befolyásolni a kérést Kliens oldalon Paraméterek megadhatók direkt módon URL-ben fejlécek között Paraméterek érkezhetnek HTML formból szövegmező checkbox stb. Szerver oldalon A szervlet a HttpServletRequest objektumból látja a paramétereket, ezekre tud reagálni
94
HTML űrlap HTML űrlap <form> attribútumai
action – cél URL Mi esetünkben egy szervlet azonosítója method – adatok elküldésének módja GET a böngésző HTTP GET parancsot küld a form adatai az URL részeként lesznek elküldve POST a böngésző HTTP POST parancsot küld a form adatai a törzsadatok között adódnak át Űrlapot elküldő <submit> gomb attribútumai name – továbbküldendő paraméter neve value – a paraméter értéke Egyéb gombok: <reset>, <button> Biztonság: látható-e Cache: GET cachelt Bookmarkolás Adatok mennyisége Adatok típusa GET csak ascii
95
Egyszerű szövegbevitel (<input>)
A type attribútumtól függően text – egyszerű szövegmező password – jelszó megadó mező hidden – rejtett mező További attribútumai name – paraméter neve maxlength – beírható szöveg maximális hossza value – kezdeti érték readonly, disabled, stb. Továbbított adat: „name=value” Többsoros szövegmező: <textarea>
96
Alternatív választás (<input>)
A type attribútumtól függően checkbox – egymástól független mezők radio – egymástól függő mezők További attribútumai name – paraméter neve radio gomb esetében az azonos nevű gombok egymást kizáróan működnek value – paraméter értéke (alapesetben „on”) checked – alapértelmezett érték („checked” ha igaz) Továbbított adat Ha be van jelölve: „name=value” Ha nincs bejelölve: semmi
97
Listából választás Lista (<select>) attribútumai
name – paraméter neve multiple – egyszerre több elem is kiválasztható-e? rows – megjelenő sorok száma ha 1, akkor combobox-ként jelenik meg Lista lehetséges értékeinek (<options>) attribútumai value – az elküldendő érték selected – alapértelmezetten kiválasztott-e Továbbított adat Egy elem kiválasztása: „name=value” Több elem kiválasztása: „name=value1&name=value2” Nincs kiválasztva egy elem se: semmi Biztonság: látható-e Cache: GET cachelt Bookmarkolás Adatok mennyisége Adatok típusa GET csak ascii
98
Paraméterek a szerver oldalon
HttpServletRequest objektumból kiolvashatók Mindegy, hogy honnan származik (URL, form, stb.) Egy paraméter többször is szerepelhet Mindkét esetben használhatók az alábbiak public String getParameter(String name) Visszaadja a megadott nevű paraméter értékét. Ha nincs ilyen, akkor az értéke null public String[] getParameterValues(String name) Visszaadja a megadott nevű paraméterhez tartozó értékeket (pl. lista esetében) public Enumeration getParameterNames() A felsorolás tartalmazza a böngésző által elküldött összes paraméter nevét
99
Szervletek HTTP működése Szervletek alapjai HTML formok feldolgozása JSP #TOC 4
100
JSP oldalak Szervlet hátrányai Java Server Pages Végrehajtás menete
Keveredik a Java és HTML kód A HTML kód Stringekben jelenik meg HTML szerkesztővel nem kezelhető Java Server Pages Tulajdonképpen egy szervlet „kifordítva” HTML kódot írunk Java betétekkel Végrehajtás menete A JSP is szerver oldalon fut le Nem keverendő a kliens oldali módszerekkel A konténer a háttérben minden JSP-ből egy szervletet készít
101
JSP lehetőségek Java kód (scriptlet) Globális változó deklaráció
Jelölése: <% … %> Tartalma lehet Lokális változó deklaráció Objektumok létrehozása Primitív típusokkal, objektumokkal kapcsolatos műveletek Ciklus/elágazás Elérhetőek különféle környezeti objektumok Globális változó deklaráció Jelölése: <%! … %> Kifejezés értékének kiírása Jelölése: <%= kifejezés %>
102
Scriptletek által elérhető objektumok
Kommunikáció HttpServletRequest request A már megismert, kérési adatokat tartalmazó objektum HttpServletResponse response A már megismert, a válasz adatait tartalmazó objektum JspWriter out Közvetlenül a kimenet írására használható Környezet ServletContext application A konténer paramétereihez enged hozzáférést PageContext pageContext Az oldal adataihoz enged hozzáférést HttpSession session Menetkövetés
103
JSP direktívák Általános formája Például a page direktíva lehetőségei
attribútum=”érték” %> JSP oldal működésének befolyásolható velük Például a page direktíva lehetőségei contentType=“...” %> kimenet típusának meghatározása import=“...” %> névterek importálása session=“...” %> session objektum létrejöjjön-e automatikusan („true”) errorPage=“...” %> hibakezelő oldal meghatározása
104
Néhány további tag <%@include file=“URL” %>
Még a fordítás előtt, mint statikus állományt beszúrja a megadott állományt a JSP oldalba Beszúrható másik JSP oldal(részlet) is, ilyenkor a fordításkor a két kód együtt fordítódik le <jsp:include page=“URL” > <param name=“paraméter” value=“érték” /> </jsp:include> Futás közben „hívás” <jsp:forward page=“URL” /> A kérés továbbítása egy másik erőforrás irányába #SAVE Java_szervlet
105
Kérés, munkamenet, alkalmazás idejű tárolás
Állapotfenntartás Kérés, munkamenet, alkalmazás idejű tárolás
106
Állapotfentartás Kérés idejű tárolás Munkamenet idejű tárolás Alkalmazás idejű tárolás #TOC 1
107
Kérés menete Egy szervlet esetében Több szervlet esetén Kliens Szerver
Cím megadás Kérés elküldés Kérés fogadás Szervlet/JSP Válasz fogadás Válasz elküldés Megjelenítés Kliens Szerver Cím megadás Kérés elküldés Kérés fogadás Szervlet/JSP Szervlet/JSP Válasz fogadás Válasz elküldés Megjelenítés
108
Kérés továbbítása Request dispatching Erőforráshoz való hozzáférés
Egy szervlet a feldolgozás közben kérést küldhet egy másik erőforrás felé (szervlet, JSP, HTML oldal, stb.) A meghívott szervletnek át lehet továbbítani a meglévő request/response objektumokat, de akár másokat is Erőforráshoz való hozzáférés ServletContext objektumon keresztül public RequestDispatcher getRequestDispatcher(String path) URL alapján keresés (abszolút útvonallal) public RequestDispatcher getNamedDispatcher(String name) Név alapján keresés (szervlet név tulajdonság alapján) ServletRequest objektumon keresztül public RequestDispatcher getRequestDispatcher(String path) URL alapján keresés (relatív útvonallal)
109
RequestDispatcher interfész
Ezen keresztül lehet továbbítani a kérést Két metódust határoz meg public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException A kérést továbbítja a meghívott erőforrásnak A kérés teljes további feldolgozása erre hárul (nem tér vissza) public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException A kérést továbbítja a meghívott erőforrásnak, és annak kimenetét beilleszti a meglévő kimenetbe Egy híváshoz hasonlóan visszatér, és a hívó folytathatja a feldolgozást
110
Kérés idejű tárolás (request scope)
Csak egy kérés idejére szükséges adatok tárolása Egy szervlet esetében A service metódus lokális változóiban Kérés idején létrehozott objektumokban A szervlet példányváltozóiban nem Több szervlet esetén HTTPServletRequest objektum támogatja az átvitelt void setAttribute(string name, Object o) Tetszőleges adat eltárolása egy kulcs megadásával Object getAttribute(string name) Adat lekérdezése kulcs alapján A paraméterek értékeit is módosíthatja a szervlet Csak azonos kontextuson belüli szerverek esetén működik
111
Állapotfentartás Kérés idejű tárolás Munkamenet idejű tárolás Alkalmazás idejű tárolás #TOC 2
112
Munkamenet fogalma Munkamenet (session): egy kliens a „weboldalon” történő tartózkodása Kliens Egyidőben több kliens külön-külön munkameneteket kap Egy gépen több böngésző külön kliensnek minősül Egy böngésző több füle viszont egynek Weboldal Nem csak egy szerver, hanem az azonos kontextusban lévő további szervereket/JSP oldalakat is ide értjük Tartózkodás Egymást követő kérések egy munkamenetnek minősülnek Megadható egy lejárati idő, amikor a munkamenet véget ér
113
Munkamenet követés megvalósítása
Webfejlesztői oldalról a cél Minden új kliens kérése új munkamenetet hozzon létre Egy már munkamenettel rendelkező kliens újabb kérése ugyanahhoz a munkamenethez tartozzon Magában a munkamenetben lehessen eltárolni adatokat Alapvető megvalósítási lépések Minden új kliens kap egy egyedi véletlen azonosítót (kulcs) A menetkövetési adatokat ezzel az egyedi azonosítóval eltároljuk egy hasító táblázatban Kilépéskor, vagy egy idő után a kulcsot érvénytelenítjük Azt kell megoldanunk, hogy a kliens minden kérésekor maga küldje el nekünk ezt a kulcsot IP cím, portszám nem működik
114
Rejtett űrlapmező/URL felülírás
Rejtett űrlapmezővel Minden HTML formba rakunk egy rejtett szövegbeviteli mezőt, ebbe beírjuk a kulcsot Amikor a submit gombbal elküldi a form adatai, visszakapjuk a kulcsot is URL felülírással Minden linkbe kiegészítő paraméterként elhelyezzük a kulcsot is A linkre kattintva visszakapjuk a kulcsot is GET metódus esetén működik
115
Cookiek használata Cookie fogalma Menetkövetés megvalósítása
A böngészők az egyes weboldalakhoz el tudnak tárolni egy rövid szöveget, ez a cookie A szerver tudja ez a válasz részeként elküldeni A böngészű ugyanehhez a szerverhez a későbbi kérésekkor mindig elküldi ez a cookiet is Menetkövetés megvalósítása Ha a kliens nem küldött cookie-t, akkor generálunk neki egy kulcsot és ezt visszaküldjük Ezt követően a kliens mindig küldeni fogja a kulcsot, ez alapján tudjuk őt azonosítani Kilépéskor, vagy a cookie lejártakor a kulcs törlődik
116
Java Session API Java Session API Adatok eltárolása
Gyorsan, egyszerűen lehet a klienseket azonosítani vele A menetkövetést a konténer segíti A háttérben a megismert három módszert használja, de a technikai részleteket elrejti Ha a kliens gépen engedélyezett a cookie, akkor azt használja, ha nem, akkor a másik két módszert Adatok eltárolása Az adatok eltárolását is a konténer végzi Így nincs szükség a kliens felé oda-vissza másolásra Nem csak szövegeket, hanem objektumokat tárol
117
Session objektum Objektum igénylése Letiltott cookiek esetén
public HttpSession getSession() Visszaad egy HttpSession objektumot Ha a munkamenethez még nem tartozik ilyen, akkor újat hoz létre Ha már van, akkor pedig azt adja vissza public HttpSession getSession(boolean create) Csak akkor hoz létre újat, ha a create paraméter értéke igaz Gyorsan, egyszerűen lehet a klienseket azonosítani vele Letiltott cookiek esetén public String encodeURL(String url) Ez a HttpServletResponse objektum egy metódusa Paraméterként át kell adni a navigáláshoz használni kívánt linket Ezt szükség esetén kiegészíti a sessionkezelés paramétereivel Ugyanez használható a form tag action attribútumára is
118
Adatok tárolása a HttpSession-ben
Adatok tárolása/módosítása public void setAttribute(String name, Object value) A megadott objektumot hozzákapcsolja a menetobjektumhoz az első paraméterben megadott néven. Ha már létezett ilyen kötés, akkor kicseréli az előző objektumot a most átadottra public void removeAttribute(String name) Törli a megadott névhez tartozó kötést Attribútumok kiolvasása Adatok kiolvasása public Object getAttribute(String name) Az előző metódussal eltárolt objektumokat lehet lekérdezni név alapján. Ha nincs ilyen név, visszatérési értéke null
119
HttpSession egyéb metódusai
Lejárati idő kezelése public void setMaxInactiveInterval(int secs) Lejárati idő megadása. Negatív érték esetén nincs ilyen public int getMaxInactiveInterval() Visszaadja az aktuálisan érvényes lejárati időt Egyéb metódusok public String getID() Folyamathoz tartozó technikai azonosító public void invalidate() Menet érvénytelenítése (pl. kilépéskor) public long getCreationTime() public long getLastAccessedTime()
120
Állapotfentartás Kérés idejű tárolás Munkamenet idejű tárolás Alkalmazás idejű tárolás #TOC 3
121
Alkalmazás idejű tárolás lehetőségei
Szervlet objektum példányváltozóiban Nem garantálható, hogy egy szervlet nem indul újra Egyidőben akár több azonos szervlet is létezhet Statikus változókban Egy kontextus objektumai egy virtuális gépben vannak A statikus változók tehát mindig egyediek lesznek ServletContext public void setAttribute(String name, Object o) public Object getAttribute(String name) Singleton pattern Adatbázis #SAVE Java_allapot
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.