380 likes | 525 Views
TEMA 6. Applets y servlets. Introducción Applets Servlets. Bibliografía. Bobadilla, J. y otros. Comunicaciones y Bases de Datos en Java. Capítulos 1 y 6. Sun. “Documentación de Java”. http://java.sun.com . Traducciones al castellano en http://www.programacion.com. 1 . Introducción.
E N D
TEMA 6.Applets y servlets Introducción Applets Servlets
Bibliografía Bobadilla, J. y otros. Comunicaciones y Bases de Datos en Java. Capítulos 1 y 6. Sun. “Documentación de Java”. http://java.sun.com . Traducciones al castellano en http://www.programacion.com
1 . Introducción Conceptos • Applet • aplicación Java diseñada específicamente para ser ejecutada en el contexto de un navegador web. • Servlet • aplicación Java diseñada para ser ejecutada en el contexto de una servidor web.
1 . Introducción Esquema Servidor Navegador SERVLET APPLET
3 . Servlet SERVLETS • Un servlet se ejecuta en el entorno de un servidor web o programa contenedor de servlets. • Por lo tanto podemos ver a los servlets comomódulos java que nos sirven para extender las capacidades del servidor web.
3 . Servlet SERVLETS • los servlets no tienen interface gráfico de usuario. • Los servelts pueden ser incluidos en muchos servidores diferentes porque el API Servlet, no asume nada sobre el entorno o protocolo del servidor.
3 . Servlet USOS DE LOS SERVLETS • Los Servlets son un reemplazo efectivo para los scripts CGI. Proporcionan una forma de generar documentos dinámicos que son fáciles de escribir y rápidos en ejecutarse. • los servlets se utilizan para manejar peticiones de cliente HTTP. Por ejemplo, tener un servlet procesando datos POSTeados sobre HTTP utilizando un formulario HTML, incluyendo datos del pedido o de la tarjeta de crédito.
3 . Servlet METODOS http • GET: solicita el documento solicitado • HEAD: Solicita solo la información de cabecera del documento. • POST: solicita que el servidor acepte el documento especificado como un ejecutable y le pase información • PUT: sustituye los contenidos de un documento del servidor con los datos aportados por el cliente.
3 . Servlet USOS DE LOS SERVLETS • Permitir la colaboración entre la gente. Un servlet puede manejar múltiples peticiones concurrentes, y puede sincronizarlas. • Reenviar peticiones. Los Servlets pueden reenviar peticiones a otros servidores y servlets.
3 . Servlet J2EE y Tomcat • Para poder trabajar con servlets tendremos que instalar el J2EE, que proporciona una serie de posibilidades para escribir aplicaciones cliente/servidor. • Tiene entre otros soporte para: • Servlets • JSP • Además para poder ejecutar los servlets necesitamos un contenedor de servlets, por ejemplo Tomcat, se puede bajar de la dirección http://jakarta.apache.org/Tomcat/.
3 . Servlet La interfaz servlet • El interface Servlet declara los métodos que manejan el Servlet y su comunicación con los clientes.
3 . Servlet Interacción con el cliente • Cuando un servlet acepta una llamada de un cliente, recibe dos objetos. • Un ServletRequest, que encapsula la comunicación desde el cliente al servidor. • Un ServletResponse, que encapsula la comunicación de vuelta desde el servlet hacia el cliente. • ServletRequest y ServletResponse son interfaces definidos en el paquete javax.servlet.
3 . Servlet El Interface ServletRequest • Información como los nombres de los parámetros pasados por el cliente, el protocolo (esquema) que está siendo utilizado por el cliente, y los nombres del host remote que ha realizado la petición y la del server que la ha recibido. • El stream de entrada, ServletInputStream. Los Servlets utilizan este stream para obtener los datos desde los clientes que utilizan protocolos como los métodos POST y PUT del HTTP. • el interface HttpServletRequest es una extensión de ServletRequest y contiene métodos para acceder a información de cabecera específica HTTP.
3 . Servlet El Interface ServletResponse • El Interface ServletResponse le da al servlet los métodos para responder al cliente. • Permite al servlet seleccionar la longitud del contenido y el tipo MIME de la respuesta. • Proporciona un stream de salida, ServletOutputStream, y un Writer a través del cual el servlet puede responder datos. • La extensión HttpServletResponse contiene métodos que permiten al servlet manipular información de cabecera específica HTTP.
3 . Servlet Servlets HTTP • Las clases e interfaces descritos anteriormente construyen un servlet básico. • Los servlets HTTP tienen algunos objetos adicionales que proporcionan capacidades de seguimiento de sesión. De forma que se puede mantener el estado entre el servlet y el cliente a través de múltiples conexiones durante un periodo de tiempo. • Los servlets HTTP también tienen objetos que proporcionan cookies. El API cookie se utiliza para guardar datos dentro del cliente y recuperar esos datos.
3 . Servlet Ejemplo import javax.servlet.*; import javax.servlet.http.*; public class Hola Mundo extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<html>"); out.println("<head><title>Hola Mundo</title></head>"); out.println("<body>); out.println("<h1>Hola Mundo</h1>"); out.println("</body></html>"); }}}
3 . Servlet Características generales • Es independiente de la plataforma en la que se este ejecutando. • Ejecución multihilo. Cada una de las peticiones sobre el servlet creará una hilo que se ejecutará de manera independiente. El servlet permanece cargado en memoria por lo que atiende rápidamente las peticiones.
3 . Servlet Características generales • El servlet puede obtener información acerca de la máquina que ha realizado la petición (IP, puerto, tipo de método de envío: get o post,...). • Conexión a Bases de Datos. A través de los servlets podemos establecer conexiones a diferentes tipos de bases de datos. • Proxy para applets. De forma que el applet se comunique con el servlet.
3 . Servlet Características generales • Uno de los problemas del protocolo HTTP es que es un protocolo sin estado. En los servlets podemos utilizar las sesiones y cookies para poder llevar a acabo esto. • Generación dinámica de código. Esta es una de las características más utilizadas en los servlets, la generación dinámica de HTML. • Recursos compartidos entre usuarios. Los servlets pueden definir estructuras o información que va a ser compartida por diferentes usuarios que utilicen el servlet.
3 . Servlet Recibir parámetros • A la hora de enviar parámetros desde la página html, tenemos dos formas: mediante el método get y mediante el método post. • Método Post. • Este método solo esta accesible desde los formularios. Se envían los parámetros de forma implícita.
3 . Servlet Recibir parámetros • Método Get. Este método envía los parámetros de forma explícita junto a la página, mostrando en la barra de navegación los parámetros y sus valores. • Ejemplo: buscar?id=189006&valor=0987&texto='todo'&....... • Las cadenas toman el aspecto parametro1=valor1&....¶metroN=valorN. • Es decir es una concatenación a través de & de pares parámetro-valor. • Para enviar mediante este método tenemos dos posibilidades. O bien lo hacemos mediante el formulario indicando que utilizamos el método get o bien a través de un enlace con la etiqueta <A HREF=...>
3 . Servlet Objetos HttpServletRequest • Un objeto HttpServletRequest proporciona acceso a los datos de cabecera HTTP, también permite obtener los argumentos que el cliente envía como parte de la petición. • Para acceder a los datos del cliente: • El método getParameter devuelve el valor de un parámetro nombrado. Si nuestro parámetro pudiera tener más de un valor, deberíamos utilizar getParameterValues en su lugar. • El método getParameterValues devuelve un array de valores del parámetro nombrado. • El método getParameterNames proporciona los nombres de los parámetros.
3 . Servlet Enviar resultados • La respuesta del servlet al servidor se realizará mediante el objeto HttpServletResponse. • Un objeto HttpServletResponse proporciona dos formas de devolver datos al usuario. • El método getWriter devuelve un Writer • El método getOutputStream devuelve un ServletOutputStream • El método getWriter se utiliza para devolver datos en formato texto al usuario y el método getOutputStream para devolver datos binarios. • Si cerramos el Writer o el ServletOutputStream después de haber enviado la respuesta, permitimos al servidor saber cuando la respuesta se ha completado.
3 . Servlet Cabecera de resultados • Debemos seleccionar la cabecera de datos HTTP antes de acceder a Writer o a OutputStream. • La clase HttpServletResponse proporciona métodos para acceder a los datos de la cabecera. Por ejemplo, el método setContentType selecciona el tipo de contenido.
Ejemplo 3 . Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DirectorioRaiz extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter ACliente = response.getWriter(); File Fichero = new File("c:/"); String[] Contenido = Fichero.list(); ACliente.println("<html>"); ACliente.println("<body>"); ACliente.println("<table border=1 bgcolor='Salmon'>"); for (int Fich=0;Fich<Contenido.length;Fich++) { ACliente.println("<tr><td>"); ACliente.println("<font size=1>"); ACliente.println(Contenido[Fich]); ACliente.println("</font>"); ACliente.println("</td></tr>"); ….
3 .Servlet 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. (Algunos servidores sólo cumplen este paso cuando se desconectan).
3 . Servlet Inicializar el servlet • Cuando un servidor carga un servlet, ejecuta el método init del servlet. Al igual que en las applets este método se puede reescribir. Al sobreescibir lo más aconsejable es que se invoque a super.init(conf). • La inicialización se completa antes de manejar peticiones de clientes y antes de que el servlet sea destruido. • El servidor llama sólo una vez al método init, cuando carga el 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 destroy.
3 . Servlet Destruir un servlet • Los servlets se ejecutan hasta que el servidor los destruye, por ejemplo, a petición del administrador del sistema. • Cuando un servidor destruye un servlet, ejecuta el método destroy del propio servlet. Este método sólo se ejecuta una vez. El servidor no ejecutará de nuevo el servlet, hasta haberlo cargado e inicializado de nuevo.
3 . Servlet Obtener IP en el Servlet • A la hora de obtener la IP y el nombre del host del cliente que invoca un servlet deberemos de utilizar los métodos getRemoteHost() y getRemoteAddr() sobre la variables HttpServletRequest que se les pasa como parámetro tanto al método doGet, como al método doPost.
3 . Servlet Servlet de una sola instancia • Si repasamos el ciclo de vida de un servlet vemos que este está controlado por el contenedor en el que ha sido desarrollado. Cuando el servlet recibe una petición pueden pasar dos cosas: • Si no existe una instancia del servlet en el contenedor Web • Se carga la clase Servlet • Se crea una instancia de la clase servlet • Se inicializa el servlet mediante su método init. • Invoca el método service que pasa los objetos request y response. • Si ya existe una instancia • Crea un nuevo hilo • Invoca el método service que pasa a los objetos request y response. • Es decir, que en el segundo caso no invocamos el método init. Si bien se crean tantos hilos como peticiones se realizen sobre el servlet. • Si queremos evitar que el servlet cree un nuevo hilo por cada petición que a el se haga deberemos de indicar que nuestro servlet implementa un patrón Singleton. Este patrón singleton esta implícito en la interface SingleThreadModel. A si que simplemente deberemos de implementar dicho interface.
3 . Servlet Guardar el estado del cliente • Seguimiento de Sesión. El seguimiento de sesión es un mecanismo que los servlets utilizan para mantener el estado sobre la serie de peticiones desde un mismo usuario (esto es, peticiones originadas desde el mismo navegador) durante algún periodo de tiempo,. • Cookies. Las Cookies son un mecanismo que el servlet utiliza para mantener en el cliente una pequeña cantidad de información asociada con el usuario.
3 . Servlet Seguimiento de una sesión • Obtener una sesión (un objeto HttpSession) para un usuario. • Almacenar u obtener datos desde el objeto HttpSession. • Invalidar la sesión (opcional).
3 . Servlet Obtener una sesión public class CatalogServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Obtener la sesión HttpSession session = request.getSession(true);
3 . Servlet Almacenar y recuperar datos e invalidar HttpSession session = request.getSession(true); Objeto1 cart = (Objeto1) session.getValue(session.getId()); // Sino se ha dejado nada en cart, crear nueva if (cart == null) { cart = new Objeto1(); session.putValue(session.getId(), cart); session.invalidate();
3 . Servlet Seguimiento de una sesión • Por defecto, el seguimiento de sesión utiliza cookies para asociar un identificador de sesión con un usuario. • Para soportar también a los usuarios que acceden al servlet con un navegador que no soporta cookies, debemos utilizar reescritura de URL en su lugar.
3 . Servlet Cookies • Para enviar una cookie: • Crear un objeto Cookie. • Seleccionar cualquier atributo. • Enviar el cookie • Para obtener información de un cookie: • Recuperar todos los cookies de la petición del usuario. • Buscar el cookie o cookies por nombre. • Obtener los valores de las cookies.
3 . Servlet Enviar una Cookie public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... //crear una cookie Cookie getBook = new Cookie("Buy", bookId); //añadir un comentario getBook.setComment(“comentario"); // enviar la cookie response.addCookie(getBook); //caducidad de la cookie, 0 eliminarla, valor negativo cuando acabe el navegador getBook.setMaxAge(tiempo);
3 . Servlet Recuperar una Cookie public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... // recuperar las cookies Cookie[] cookies = request.getCookies(); for(i=0; i < cookies.length; i++) { Cookie thisCookie = cookie[i]; if (thisCookie.getName().equals("Buy") && thisCookie.getValue().equals(bookId)) {