Miniaplicació de servidor
Les miniaplicacions de servidor (anglès servlets) són objectes Java executats per un servidor d'aplicacions i que responen a invocacions HTTP, servint pàgines dinàmiques.
El contingut generat pot ser un fitxer de qualsevol tipus, la majoria de vegades HTML.
Un objecte Servlet és capaç de rebre una invocació i generar una resposta en funció de les dades de la invocació, de l'estat del mateix sistema i les dades a què pugui accedir. El paquet bàsic de servlet defineix objectes Java que maneguen peticions i respostes fetes per servlets, així com objectes que informen dels paràmetres de configuració del servlet i l'entorn d'execució. El paquet javax.servlet.http defineix subclasses específiques HTTP dels elements genèrics del servlet, com ara objectes de gestió de sessions que lliguen múltiples peticions del mateix client i respostes del servidor d'aplicacions. Els servlets poden estar empaquetats dintre d'un fitxer de format WAR, com a aplicació Web, dintre d'un contenidor.
L'execució d'un servlet es fa dintre d'un o més processos del servidor d'aplicacions, de manera que es genera un nou flux. No generar un nou procés (com acostumen a fer els CGIs) implica un estalvi de recursos que es tradueix en un millor rendiment del sistema.
Els servlets poden ser objectes java precompilats o JSP compilats en temps d'execució (o en un altre moment després de l'arrencada del servidor d'aplicacions).
Història
[modifica]Sun Microsystems va escriure la primera especificació dels servlets. Va finalitzar la versió 1.0 el juny de 1997. A partir de la versió 2.3, l'especificació dels servlets va ser desenvolupada subjecta al Java Community Process. JSR 53 va definir tant la Servlet 2.3 i JavaServer Page 1.2. JSR 154 especifica les especificacions Servlet 2.4 i 2.5, aquesta darrera vigent des del 10 de maig del 2005.
versió de l'API de Servlet | Llençat | Plataforma | Canvis importants |
---|---|---|---|
Servlet 2.5 | Setembre 2005 Arxivat 2008-06-09 a Wayback Machine. | JavaEE 5, J2SE 5.0 | Requereix J2SE 5.0, suporta Anotacions |
Servlet 2.4 | Novembre 2003 Arxivat 2008-06-09 a Wayback Machine. | J2EE 1.4, J2SE 1.3 | web.xml usa XML Schema |
Servlet 2.3 | Agost 2001 Arxivat 2008-05-16 a Wayback Machine. | J2EE 1.3, J2SE 1.2 | Addició de Filtre s
|
Servlet 2.2 | Agost 1999 Arxivat 2008-06-11 a Wayback Machine. | J2EE 1.2, J2SE 1.2 | Inclòs com a part de J2EE, introduint aplicacions web independents dintre de fitxers .war |
Servlet 2.1 | Novembre 1998 Arxivat 2008-06-11 a Wayback Machine. | No especificada | Primera especificació oficial, afegides RequestDispatcher i ServletContext
|
Servlet 2.0 | JDK 1.1 | Part del Java Servlet Development Kit 2.0 | |
Servlet 1.0 | Juny 1997 |
Cicle de vida d'un Servlet
[modifica]Consisteix en les passes següents:
- La instància de Servlet és carregada en temps d'arrencada del contenidor
- El contenidor crida el mètode
init()
, en temps d'arrencada, o quan rep la notificació de la primera invocació. Aquí és on s'inicialitza el servlet i ha de ser executat abans que se serveixi cap petició. Aquest mètode no torna a ser executat en tota l'execució del contenidor. - Després de la inicialització el servlet pot començar a servir invocacions de clients, cadascuna servida pel seu propi fil d'execució (Thread). Per cada invocació s'executa el mètode
service()
- Finalment, en temps d'aturada del contenidor, aquest invoca el mètode
destroy()
ServletConfig i ServletContext
[modifica]En un contenidor hi ha una sola instància de ServletContext. Aquest objecte pot ser usat per qualsevol instància de Servlet informació a nivell de l'aplicació o detalls sobre el contenidor. Cada servlet, per altra banda, obté la seva pròpia instància de ServletConfig. Aquest objecte proveeix paràmetres d'inicialització per un servlet. Un desenvolupador pot obtenir la referència a ServletContext usant qualsevol d'aquests dos objectes.
Contenidors de Servlet
[modifica]Un contenidor de Servlet és un servidor web especialitzat que suporta l'execució de classes Servlet. Combina la funcionalitat bàsica d'un servidor web amb optimitzacions i extensions específiques de Java i de Servlet, com la integració amb l'entorn d'execució Java i la capacitat de traduir específicament URLs en peticions de Servlet. Els servlets són registrats pels contenidors de servlets, que es nodreixen de la informació sobre les funcionalitats que aquests proveeixen i quin URL usaran per a identificar-se ells mateixos. A partir d'aquest moment, el contenidor és capaç d'inicialitzar el Servlet i respondre a invocacions conforme van arribant. Molts contenidors tenen la capacitat d'afegir i treure servlets de forma dinàmica, avantatge que permet que afegir, modificar o treure servlets no afecti la resta de servlets. Els contenidors de Servlet també poden ser anomenats contenidors web o motors web.
Com en altres APIs de Java, diferents companyies proveïdores posen a disposició la seva pròpia implementació de contenidor Servlet estàndard. A sota hi ha una llista de contenidors web, tant lliures com comercials. En aquests casos 'lliure' es refereix a què poden ser usats de franc fins i tot amb finalitats lucratives. Alguns de comercials, com ara Resin o Orion, poden ser usats per organitzacions sense ànim de lucre.
Contenidors web no comercials
[modifica]- Apache Tomcat (antigament Jakarta Tomcat) és un contenidor web de codi obert gratuït sota la Llicència Apache. És usat a la implementació de referència oficial i té fama de ser estable.
- Geronimo Application Server és una implementació plenament J2EE, feta per Apache.
- Jetty
- Jaminid conté una abstracció superior a la dels servlets
- Enhydra
- Winstone suporta l'especificació v2.4, està orientat a la mínima configuració i disposa de la capacitat de buidar el contenidor fins només allí on cal.
- tjws espec 2.4, de poca càrrega al sistema, disseny modular
Contenidors web comercials
[modifica]- Java System Application Server
- Java System Web Server
- Caucho's Resin Server
- BEA WebLogic Server o Weblogic Express
- Borland Enterprise Server
- Oracle Servidor d'aplicacions
- WebSphere d'IBM
- JRun de Macromedia
- IronFlare Orion Servidor d'aplicacions
- WebObjects
Contenidors web de codi obert comercials
[modifica]Vegeu també
[modifica]Enllaços externs
[modifica]- Descripció del producte, feta per Sun
- Tutorial de Sun sobre servlets
- JSR 154 (Servlet 2.4 i 2.5)
- JSR 53 (Servlet 2.3)
- Documentació Java de l'API Servlet 2.3