Sei sulla pagina 1di 5

Java Servlet

Es una 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 en peticiones desde un navegador
web, las procesan y devuelven una respuesta al navegador, normalmente en HTML.
Para realizar estas tareas podrán utilizar las clases incluidas en el lenguaje Java.
Estos programas son los intermediarios entre el cliente (casi siempre navegador
web) y los datos (BBDD)
Los Servlets son un reemplazo efectivo para los CGI en los servidores que los
soporten ya que proporcionan una forma de generar documentos dinámicos
utilizando las ventajas de la programación en Java como conexión a alguna base
de datos, manejo de peticiones concurrentes, programación distribuida, etc. Por
ejemplo, un servlet podría ser responsable de procesar los datos desde un
formulario en HTML como registrar la transacción, actualizar una base de datos,
contactar algún sistema remoto y retornar un documento dinámico o redirigir a otro
servlet u alguna otra cosa.
Propiedades
 Manejo de Sesiones: Se puede hacer seguimiento de usuarios a través de
distintos servlets a través de la creación de sesiones.
 Utilización de Cookies: Las cookies son pequeños datos en texto plano que
pueden ser guardados en el cliente. La API de servlets permite un manejo
fácil y limpio de ellas.
 Multi-thread: Los servlets soportan el acceso concurrente de los clientes,
aunque hay que tener especial cuidado con las variables compartidas a
menos que se utilize la interfaz SingleThreadModel.
 Programación en Java: Se obtienen las características de multiplataforma o
acceso a APIs como JDBC, RMI, etc.
Ciclo de Servlet
Cada servlet tiene el mismo ciclo de vida:
 Un servidor carga e inicializa el servlet.
 El servlet maneja cero o más peticiones de cliente.
 El servidor elimina el servlet.
Funcionamiento
1. El navegador (cliente) pide una página al servidor HTTP que es un contenedor
de Servlets.
2. El servlet procesa los argumentos de la petición, es decir, el contenedor de
Servlets delega la petición a un Servlet.
3. El Servlet, que es un objeto java, se encarga de generar el texto de la página web
que se entrega al contenedor.
4. El contenedor devuelve la página web al navegador (cliente) que la solicitó,
normalmente en HTML.
Por lo tanto nos encontramos en una arquitectura Cliente-Servidor. Lo normal para
esto es utilizar Apache Tomcat como contenedor de servlets.
Clases involucradas
Para entender mejor la relación entre las clases realizamos este pequeño esquema
en el cual en rojo se encuentran las herencias directas de clases o interfaces y en
negro se encuentran las relaciones de uso entre clases.
Clases y paquetes de Servlet
1. public abstract interface Servlet: Todos los servlets implementan este interfaz
directamente o extendiendo una clase que lo implemente como HttpServlet. Entre
sus métodos están:
 init(ServletConfig config): Es el método utilizado para crear una nueva
instancia del servlet. Este método puede ser sobrescrito para realizar tareas
como crear una conexión a una BD que se mantendrá mientras el servlet se
mantenga cargado y puede ser utilizada por cada
petición. ServletConfig contiene los parámetros de inicialización que entrega
el servidor al servlet.
 getServletConfig(): Retorna la configuración dada para la inicialización del
servlet.
 service(ServletRequest req, ServletResponse res): Se utiliza cuando se
recibe una petición de un cliente y en su implementación normal para HTTP
verifica el tipo de solicitud GET, POST, etc. y la redirige a los métodos
respectivos. En general no es necesario re implementar este método.
 destroy(): Este método es llamado por el servidor para indicar que el servlet
será destruido. Es llamado sólo una vez y uno debe encargarse de esperar
por posibles peticiones en curso.
2. public abstract interface ServletConfig: Contiene los parámetros que entrega
el servidor al servlet para ser inicializado que pueden ser dados por el
administrador a través de un archivo de configuración. Entre sus métodos están:
 getInitParameter(String name): Que retorna el valor del parámetro dado
en name.
 getServletContext(): Que retorna un objeto ServletContext que guarda la
información referente al servidor.
3. public abstract interface ServletContext: Contiene métodos que sirven para
comunicar un servlet con el servidor que lo contiene.
 getMimeType(String file): Retorna el tipo MIME definido en el servidor para
el archivo dado.
4. public abstract class GenericServlet implements Servlet, ServletConfig:
Define un servlet genérico independiente del protocolo. Además de implementar
alguno de los métodos del interfaz crea otros:
 log(String msg): Escribe en la consola del servidor el mensaje junto con el
nombre del servlet.
5. public abstract class HttpServlet extends GenericServlet: Es la clase de la
cual se debe extender para crear un servlet HTTP. De la clase que extiende
obtiene los métodos ya definidos además de los cuales define:
 doGet(HttpServletRequest req, HttpServletResponse resp): Es el método
llamado para procesar información que haya sido enviado con el método
GET. Este método es llamado concurrentemente para cada cliente por lo que
hay que estar atento por posibles variables compartidas que causen
problemas.
 doPost(HttpServletRequest req, HttpServletResponse resp): Ídem al
anterior pero para el método POST, en general se implementa sólo un
método y el otro lo referencia.
6. public abstract interface ServletRequest: Permite obtener información del
cliente que no depende del protocolo:
 getRemoteAddr(): Retorna la IP del cliente.
 getParameter(String name): Retorna el valor del parámetro name dado por
el cliente.
 getInputStream(): Sirve para crear un canal de comunicación para obtener
dados binarios.
7. public abstract interface HttpServletRequest extends ServletRequest:
Permite obtener del cliente la información que es dependiente del protocolo, en
este caso HTTP. Entre sus métodos están:
 getHeader(String name): Permite obtener el valor de los Headers de HTTP
con que fue llamado el servlet.
 getCookies(): Retorna un arreglo que contiene todas las cookies que el
cliente envía al servlet.
 getSession(): Retorna la sesión en la cual se encuentra el cliente.
8. public abstract interface HttpSession: Permite identificar al mismo usuario a
través de distintos servlets. En general se implementa guardando una cookie en
el cliente la cual es recuperada por el servidor para reasignar su sesión.
 setAttribute(String name, Object value): Permite compartir un objeto
cualquiera entre distintos servlets para el mismo usuario. Para obtener el
objeto se utiliza setAttribute(name).
 setMaxInactiveInterval(int interval): Permite definir un tiempo máximo para
el cual la sesión será válida. Si transcurre ese tiempo y el usuario no ha dado
respuesta el servidor borrará la sesión del usuario el cual se convertirá en un
cliente recién ingresado.
9. public abstract interface ServletResponse: Define un objeto para permitir a un
servlet enviar una respuesta al cliente.
 setContentType(String type): Permite definir el tipo de respuesta que se le
dará al cliente. Si se retornará una página web deberá ser text/html.
 getWriter(): Retorna un objeto Writer para poder enviar respuestas de texto.
 getOutputStream(): Retorna un objeto ServletOutputStream que permite
enviar respuestas binarias al cliente.
10. public abstract interface HttpServletResponse extends ServletResponse:
Permite enviar al cliente respuestas específicas del protocolo HTTP.
 addCookie(Cookie cookie): Para definir nuevas cookies en el cliente.
 setHeader(String name, String value): Para definir un header HTTP a
enviar al cliente.
 sendRedirect(String location): Envía un mensaje al cliente para
redireccionar la respuesta a la dirección señalada.
11. public abstract interface SingleThreadModel: Esta interfaz no tiene métodos
ya que sólo se utiliza para señalar al servidor que el servlet manejará sólo un
requerimiento a la vez. Cualquier otra petición concurrente queda encolada. Es
la solución simple y poco óptima para eliminar los problemas de concurrencia.

Alumno: Pedro Luis Huamani Hilario

Potrebbero piacerti anche