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.

Források