Java Servlet
A HupWiki-ből...
Röviden: Java servlet-ek segítségével web-es alkalamzások írhatóak Java nyelven. Ezen technológia egyik nagy előnye, hogy nincs minden kérés kiszolgálásakor egy processzindítási többletidő és az azzal járó teljesítménycsökkenés, mint a CGI programok esetében. Másik nagy előnye a szabványos Servlet API által kínált eszköztár, amelyen keresztül a servlet-ek az őket futtató servlet container-rel kommunikálhatnak.
- Egy servlet tehát valójában egy olyan speciális Java program, amely szorosan együttműködik egy webszerverrel, így lehetővé teszi a szerveroldalon HTML oldalak dinamikus létrehozását és paraméterezését. A servletek csakis szerverfunkciókat képesek ellátni.
A CGI megoldásokkal szemben a servletek a következő előnyökkel rendelkeznek
- A CGI szkriptek rendszerint plattformfüggők, ezzel szemben a servletek plattformfüggetlen megoldást biztosítanak,
- sokkal gyorsabb a kiszolgálás, mert a webszerveren állandóan fut egy virtuális gép, így nem kell minden egyes kérés kiszolgálása érdekében egy külső programot indítania a webszervernek,
- a kéréskiszolgálások szinkronizációja leegyszerűsödik,
- ha egy webszerver nagyon le van terhelve, akkor a servlet átirányíthatja a kérést egy másik servletnek.
- A servlet API-n keresztül történik a webszerver és a servlet közti kommunikáció. De ez a servlet API nem része a standard JDK-nak, hanem azt külön kell letölteni, ha valaki használni akarja. Egész pontosan a servlet konténerekkel szokott jönni.
A servlet-ek életciklusa
1. A servlet-eket a servlet konténer példányosítja. Egyet vagy többet, konfigurációtól függően. 2. A servlet konténer lefuttatja minden servlet példány init() metódusát...
Ezután a servlet(ek) kész(ek) a http kérések fogadására.
3. A servlet kiszolgál 0 vagy több http kérést. Egy példány egyszerre egyet, vagy többet, attól függően, hogy implementálja-e a példányosított servlet osztálya a SingleThreadModel interface-t (ekkor 1 példány 1 kérést). Ez a service(HttpServletRequest, HttpServletResponse) metódus futtatásával történik.
Ha túl sok felesleges példány van:
A servlet konténer töröl néhány felesleges példányt. Minden törlendő példányra
4.1. Megvárja, hogy a rajta esetlegesen futó service() metódus végigmenjen, majd. 4.2 A servlet konténer lefuttatja a servlet példány destroy() metódusát, majd eldobja a servlet példányra a referenciát.
Az alkalmazás undeploy-olásakor, vagy a servlet konténer leállításakor:
5.1 A servlet konténer törli a memóriában nyilvántartott mapping-ek közül a servletre vonatkozo bejegyzéseket, így az új kéréseket nem tud fogadni. Ezután 5.2. Megvárja, hogy a példányokon (az összes undeploy-olandón) esetlegesen futó service() metódus végigmenjen, majd 5.3 A servlet konténer lefuttatja a servlet példányok destroy() metódusát, majd eldobja a servlet példányokra a referenciát.