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.
Un Crack Informático Es Un Parche Creado Sin Autorización Del Desarrollador Del Programa Al Que Modifica Cuya Finalidad Es La de Modificar El Comportamiento Del Software Original