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