Explicación de clases involucradas
A continuación se señalarán las propiedades más
específicas de los servlets junto con las clases más importantes
de cada paquete y una pequeña explicación de su utilización
y su aporte para el manejo de servlets.
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.
Para mayor detalle baje la documentación de
la API de servlets.
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 (análogo al constructor). Ver
el ciclo de vida. Este método puede ser sobreescrito 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): Este método
es el que se llama 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 reimplementar 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. Ver
el ciclo de vida.
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.
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.
public abstract class GenericServlet
implements Servlet, ServletConfig: Define un servlet genérico independiente
del protocolo. Además de implementar alguno de los métodos de
las interfaz crea otros:
- log(String msg): Escribe en la consola del servidor el mensaje junto
con el nombre del servlet.
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.
public abstract interface ServletRequest:
Permite obtener información del cliente que no depende del protocolo,
por ejemplo:
- 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.
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.
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.
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.
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.
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.
Anterior Índice Siguiente