[go: up one dir, main page]

Vés al contingut

Miniaplicació de servidor

De la Viquipèdia, l'enciclopèdia lliure
(S'ha redirigit des de: Servlet)

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.

història de l'API de Servlet
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 Filtres
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:

  1. La instància de Servlet és carregada en temps d'arrencada del contenidor
  2. 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.
  3. 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()
  4. 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]

Contenidors web de codi obert comercials

[modifica]

Vegeu també

[modifica]

Enllaços externs

[modifica]