Java Servlet
| Java Servlet | |
|---|---|
| Desarrollador | |
| Oracle Corporation / Sun Microsystems http://java.sun.com/... |
|
| Información general | |
| Última versión estable | 3.0 (info) |
| Género | ? |
| Programado en | Java |
| Sistema operativo | Máquina virtual Java |
| Licencia | ? |
| En español | ? |
Los servlets, son objetos que corren dentro y fuera del contexto de un contenedor de servlets (ej: Tomcat) y extienden su funcionalidad.
La palabra servlet deriva de otra anterior, applet, que se refería a pequeños programas que se ejecutan en el contexto de un navegador web. Por contraposición, un servlet es un programa que se ejecuta en un servidor.
El uso más común de los servlets es generar todas páginas web de forma dinámica a partir de los parámetros de la petición que envíe el navegador web.
Contenido |
[editar] 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).
[editar] Aspectos técnicos
Un servlet es un objeto que se ejecuta en un servidor o contenedor JEE, especialmente diseñado para ofrecer contenido dinámico desde un servidor web, generalmente HTML. Otras opciones que permiten generar contenido dinámico son los lenguajes ASP, PHP, JSP (un caso especial de servlet), Ruby y Python. Forman parte de JEE (Java Enterprise Edition), que es una ampliación de JSE (Java Standard Edition).
Un servlet implementa la interfaz javax.servlet.Servlet o hereda alguna de las clases más convenientes para un protocolo específico (ej: javax.servlet.HttpServlet). Al implementar esta interfaz el servlet es capaz de interpretar los objetos de tipo HttpServletRequest y HttpServletResponse quienes contienen la información de la página que invocó al servlet.
Entre el servidor de aplicaciones (o web content) y el servlet existe un contrato que determina cómo han de interactuar. La especificación de éste se encuentra en los JSR (Java Specification Requests) del JCP (Java Community Process).
[editar] Descriptor de despliegue
El descriptor de despliegue es un archivo que se localiza en el directorio WEB-INF y se llama web.xml. En él es donde se controla el comportamiento de los Servlet y páginas JSP.
[editar] Ejemplo sencillo de un Descriptor de despliegue
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>HolaMundoServlet</servlet-name> <servlet-class>org.prueba.servlet.HolaMundoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HolaMundoServlet</servlet-name> <url-pattern>/HolaMundoServlet</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
[editar] Ciclo de vida
El ciclo de vida de un Servlet se divide en los siguientes puntos:
- El cliente solicita una petición a un servidor vía URL.
- El servidor recibe la petición.
- Si es la primera, se utiliza el motor de Servlets para cargarlo y se llama al método
init(). - Si ya está iniciado, cualquier petición se convierte en un nuevo hilo. Un Servlet puede manejar múltiples peticiones de clientes.
- Si es la primera, se utiliza el motor de Servlets para cargarlo y se llama al método
- Se llama al método
service()para procesar la petición devolviendo el resultado al cliente. - Cuando se apaga el motor de un Servlet se llama al método
destroy(), que lo destruye y libera los recursos abiertos.
[editar] Clases y objetos necesarios
Podemos crear un Servlet haciendo uso del paquete javax.servlet.
[editar] 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
[editar] 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
[editar] Beneficios de utilizar Servlets en lugar de CGI
- Son más eficientes y utilizan menos recursos. 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 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.
[editar] Ejemplo
Código de ejemplo de un Servlet que procesa una petición GET y devuelve una página web HTML sencilla:
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 { 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>"); } }