Diferencia entre revisiones de «Java Servlet»

Contenido eliminado Contenido añadido
Njmi1 (discusión · contribs.)
mSin resumen de edición
Página reemplazada por «{{wikificar|.l.»
Etiquetas: Reemplazo posible problema Eliminación de categorías
Línea 1:
{{wikificar|t=20180315115354}}.l.
{{referencias|t=20180315115435}}
 
{{Ficha de software
| nombre = Java Servlet
| logo =
| captura =
| pie =
| autor =
| desarrollador = [[Oracle Corporation]] / [[Sun Microsystems]]
| última_versión = 3.1
| web_última_versión = https://jcp.org/en/jsr/detail?id=340
| fecha_última_versión = [[28 de mayo]] de [[2013]]
| última_versión_prueba =
| fecha_última_versión_prueba =
| lenguaje_programación = [[Lenguaje de programación Java|Java]]
| sistema_operativo = [[Máquina virtual Java]]
| género =
| licencia = [[Software propietario|Propietaria]] (gratuito para uso no comercial)
| sitio_web = [http://java.sun.com/products/servlet/reference/index.html http://java.sun.com/...]
| idiomas =
| español =
}}
 
El '''servlet''' es una [[Clase (informática)|clase]] en el [[lenguaje de programación Java]], utilizada para ampliar las capacidades de un servidor. Aunque los servlets pueden responder a cualquier tipo de solicitudes, estos son utilizados comúnmente para extender las aplicaciones alojadas por servidores web, de tal manera que pueden ser vistos como [[Applet Java|applets de Java]] que se ejecutan en servidores en vez de navegadores web. Este tipo de servlets son la contraparte Java de otras tecnologías de contenido dinámico Web, como [[PHP]] y [[ASP.NET]].
 
La palabra ''servlet'' deriva de otra anterior, ''[[applet]]'', que se refiere a pequeños programas que se ejecutan en el contexto de un navegador web.
 
El uso más común de los ''servlets'' es generar páginas web de forma dinámica a partir de los parámetros de la petición que envíe el navegador web.
 
== Historia ==
 
La especificación original de Servlets fue creada por Sun Microsystems (la versión 1.0 fue terminada en junio de 1997). Comenzando con la versión 2.3, la especificación de Servlet fue desarrollada siguiendo el Proceso de la Comunidad Java (''Java Community Process'').
 
== Ciclo de vida ==
 
;1. Inicializar el servlet
 
Cuando un servidor carga un servlet, ejecuta el método <code>init</code> del servlet. El proceso de inicialización debe completarse antes de poder manejar peticiones de los clientes, y antes de que el servlet sea destruido.
 
Aunque muchos servlets se ejecutan en servidores ''[[Multihilo|multi-thread]]'', los servlets no tienen problemas de concurrencia durante su inicialización. El servidor llama sólo una vez al método <code>init</code> al crear la instancia del servlet, y no lo llamará de nuevo a menos que vuelva a recargar el servlet. El servidor no puede recargar un servlet sin primero haber destruido el servlet llamando al método <code>destroy</code>.
 
;2. Interactuar con los clientes
 
Después de la inicialización, el servlet puede dar servicio a las peticiones de los clientes. Estas peticiones serán atendidas por la misma instancia del servlet, por lo que hay que tener cuidado al acceder a variables compartidas, ya que podrían darse problemas de sincronización entre requerimientos simultáneos.
 
;3. Destruir el servlet
 
Los servlets se ejecutan hasta que el servidor los destruye, por cierre del servidor o bien a petición del administrador del sistema. Cuando un servidor destruye un servlet, ejecuta el método <code>destroy</code> del propio servlet. Este método sólo se ejecuta una vez y puede ser llamado cuando aún queden respuestas en proceso, por lo que hay que tener la atención de esperarlas. El servidor no ejecutará de nuevo el servlet hasta haberlo cargado e inicializado de nuevo.
 
== Clases y objetos necesarios ==
 
Podemos crear un Servlet haciendo uso del [[Paquete Java|paquete]] <code>javax.servlet</code>.
 
=== Interface HttpServletRequest===
 
Sigue este enlace para ver su definición detallada (en inglés): [http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletRequest.html]
 
=== Interface HttpServletResponse ===
 
Sigue este enlace para ver su especificación detallada (en inglés): [http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletResponse.html]
 
== Beneficios de utilizar Servlets en lugar de CGI ==
 
* Son más eficientes y utilizan menos recursos. [[Interfaz de entrada común|CGI]] utiliza un nuevo proceso por cada petición. En cambio en los Servlets sólo existe una copia cargada en la [[Máquina virtual Java|máquina virtual]] y por cada petición se inicia un hilo, lo cual reduce el uso de memoria del servidor y el tiempo de respuesta.
* Tienen persistencia, por lo que siguen "vivos" una vez terminada la petición.
 
== Ejemplo ==
 
Código de ejemplo de un Servlet que procesa una petición [[Hypertext Transfer Protocol|GET]] y devuelve una página web [[HTML]] sencilla:
 
<source lang="java">
package org.pruebas;
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HolaMundoServlet extends HttpServlet {
 
/**
* Servlet de ejemplo que procesa una petición GET
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
out.println("<html>");
out.println("<head><title>Ejemplo Hola Mundo</title></head>");
out.println("<body>");
out.println("<h1>¡Hola Mundo!</h1>");
out.println("</body></html>");
}
}
</source>
 
== Enlaces externos ==
 
*[http://java.sun.com/products/servlet/reference/index.html Referencia oficial para Java Servlet de Sun Microsystem]
*[http://jcp.org/en/jsr/detail?id=154 Especificación JSR 154 de Java Servlet]
*[http://www.lab.inf.uc3m.es/~a0080802/RAI/servlet.html Ejemplos y explicaciones de Servlets y JSPs]
 
[[Categoría:Tecnologías Java EE]]
[[Categoría:Aplicaciones informáticas]]
[[Categoría:Desarrollo web]]