View
1
Download
0
Category
Preview:
Citation preview
"
Sistemas de Información 12/13 Servlets y JSPs (Java Server Pages)
Departamento Informática e Ingeniería de Sistemas Universidad de Zaragoza
Raquel Trillo Lado (raqueltl@unizar.es)
Guión Introducción Servlets
Introducción Clases e interfaces del API Ejemplos
Java Server Pages (JSPs) Introducción Ejemplos
Empaquetamiento de una aplicación Web
Bibliografía
Sistemas de Información Raquel Trillo Lado
Aplicación Web: Es una aplicación que se ejecuta en un servidor Web y a la que el usuario accede desde un cliente de propósito general (por ejemplo: un navegador web en un pc, teléfono móvil, …):
Contenido estático y dinámico
Sistemas de Información Raquel Trillo Lado
Introducción
Cliente Web (Navegador)
HTTP
Servidor/Contenedor de aplicaciones Web:
Contenido estático: html, pdf, jpg, png, etc..
Contenido dinámico generado cuando se recibe una petición: -Diferentes tecnologías: Servlets, ASP, PHP
Servlet: Un ejecutable escrito en lenguaje Java que normalmente se ejecuta en respuesta a una petición http:
Puede recibir peticiones HTTP Procesa datos y genera una respuesta acorde con
los parámetros generando una página HTML en tiempo de ejecución (página HTML dinámica)
Sistemas de Información Raquel Trillo Lado
Servlets: Introducción
Antes de los Servlets: CGI Scripts (Common Gateway Interface):
• Requieren crear un proceso por petición (más recursos y tiempo ejecución)
• Dependientes de la plataforma Servlets:
• Se ejecutan en diferentes hilos (threads) del proceso servidor
• Independientes de la plataforma
Sistemas de Información Raquel Trillo Lado
Servlets: Introducción
Cada Servlet puede estar asociado a una o más URLs:
El contenedor de aplicaciones asocia URLs a Servlets
Paquetes javax.servlet y javax.servlet.http:
Sistemas de Información Raquel Trillo Lado
Servlets: Introducción
Servlets: Clases e interfaces del API
El método init se ejecuta cuando el servidor de aplicaciones Web decide cargar el Servlet en memoria:
Cuando se arranca el servidor La primera vez que se requiere que se ejecute el Servlet Cuando se accede a algún componente de la aplicación
Web
El método destroy se ejecuta cuando el servidor de aplicaciones Web decide eliminar el Servlet de memoria:
Cuando se para el servidor Cuando se para la aplicación web Cuando lleva cierto tiempo sin usarse
Sistemas de Información Raquel Trillo Lado
Servlets: Clases e interfaces del API
El método service se ejecuta cuando se requiere el servicio proporcionado por el Servlet:
Cuando se recibe una petición asociada a las URLs ligadas al Servlet.
Los parámetros de la petición están codificados en el objeto ServletRequest
La salida a enviar al cliente se codifica en el objeto ServletResponse
Servlets: Clases e interfaces del API
El método público service se implementa llamando a la operación protegida service la cual es una operación plantilla que llama al método doGet o doPost según la petición http sea de tipo GET o de tipo POST
E n g e n e r a l s e e x t i e n d e l a c l a s e javax.servlet.http.HttpServlet y se redefinen los métodos doGet y/o doPost
Servlets: Clases e interfaces del API
Sistemas de Información Raquel Trillo Lado
E l m é t o d o p ú b l i c o d e H t t p S e r v l e t R e q u e s t getParameter permite obtener el valor de un parámetro que tiene asociado un único valor
E l m é t o d o p ú b l i c o d e H t t p S e r v l e t R e q u e s t getParameterValues permite obtener el valor de un parámetro multivaluado (aunque también se puede usar con parámetros monovaluados)
El método públ ico de HttpServletResponse setContentType permite establecer el tipo de contenido de la respuesta y debe llamarse antes de comenzar a escribir en el objeto PrintWriter proporcionado por el método getWriter
Servlets: Clases e interfaces del API
Sistemas de Información Raquel Trillo Lado
Creación de un serv let que procese los datos proporcionados por el cliente en el siguiente formulario y le comunique si la operación se ha realizado de forma correcta o ha habido algún error:
Servlets: Ejemplos
Sistemas de Información Raquel Trillo Lado
Ejercicio: Crear la página html que cree el formulario mostrado en la transparencia anterior. Además asociarle al formulario la siguiente acción: http://localhost:8080/MiPrimeraAplicacion/InsertUser
Servlets: Ejemplos
Sistemas de Información Raquel Trillo Lado
… import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; …. public class InsertUserServlet extends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String loginName = request.getParameter(”login"); String password = request.getParameter(“pw"); String repassword = request.getParameter(”repw"); String name = request.getParameter(“name"); String surname = request.getParameter(“surname"); String email = request.getParameter(“email"); …...
Servlets: Ejemplos
Sistemas de Información Raquel Trillo Lado
package miprimeraaplicacion.ejemplo1 public class InsertUserServlet extends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... //Comprobación de parámetros //p.e.: todos los campos obligatorios deben ser distintos de null, // la clave debe ser igual a la clave tecleada por segunda vez, // la dirección de correo debe ser una dirección válida
// Si los parámetros son correctos se crea el objeto usuario // y se realiza una llamada a una clase del modelo que realiza la inserción en la bd UserVO user = new User (login, password, name, surname, email, language, country) try { ModelFacade model = new ModelFacade(); model.insertUser(user); }catch Exception e{ response.sendRedirect(“paginaError.html”) } … }
Servlets: Ejemplos
Sistemas de Información Raquel Trillo Lado
public class InsertUserServlet extends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... try { ModelFacade model = new ModelFacade(); model.insertUser(user); }catch Exception e{ response.sendRedirect(“paginaError.html”) }
response.setContentType(“text/html; charset=ISO-8859-1”); PrinterWriter out = response.getWriter(); out.println(“<html><head><title>Inserción del usuario</title></head>”); out.println(“<body><p> El usuario con login “ + login + “se ha registrado correctamente </p>”); out.println(“</body></html>”); }
Servlets: Ejemplos
Sistemas de Información Raquel Trillo Lado
El método sendRedirect le indica al cliente como respuesta a la petición http que ha hecho que genere una nueva petición a la URL que se le indica como parámetro
A veces interesa pasar el control a otro servlet o JSP dentro del servidor en lugar de indicar una respuesta al cliente. En ese caso se emplea el método forward
Servlets: Ejemplos
Sistemas de Información Raquel Trillo Lado
RequestDispatcher dispatcher = request.getRequestDispatcher(url);
dispatcher.forward(request,response)
Se pasa el control a otro servlet dentro del servidor. El cliente no es consciente de los forwards (la dirección del navegador muestra la URL correspondiente a la petición original) y por tanto se debe conservar el objeto request y response
Servlets: Ejemplos
Sistemas de Información Raquel Trillo Lado
Una página JSP es un tipo especial de Servlet orientado a crear una interfaz gráfica:
Tiene aspecto de una página HTML Puede incluir scriptlets (scripts) que se escriben en Java
para generar código html dinámicamente
JSPs: Introducción
Cuando se accede a una página JSP: Si es la primera vez que se accede a ella
entonces el servidor de apliaciones web implementa (lo genera a partir de la página jsp) un servlet asociado a dicha página, lo compila y lo carga en memoria
Si no es la primera vez, le pasa la petición al servlet asociado
Si la página jsp se ha modificado desde la compilación del servlet que tiene asociado y se requiere dicha página, entonces se genera un nuevo servlet
Sistemas de Información Raquel Trillo Lado
JSPs: Introducción
JSPs: Ejemplos
Sistemas de Información Raquel Trillo Lado
Creación de una página JSP que procese los datos proporcionados por el cliente en el siguiente formulario de búsqueda y le comunique los datos de ese cliente si este existe:
Ejercicio: Crear la página html que cree el formulario de búsqueda (acción http://localhost:8080/MiPrimeraAplicacion/ShowUser.jsp )
JSPs: Ejemplos
Sistemas de Información Raquel Trillo Lado
<%@ page import=“miaplicacion.userVO”> <html> <%-- Comentarios en las páginas JSP --%> <head><title>Show a user </title></head> <body> <% String login = request.getParameter(“login”); try { ModelFacade model = new ModelFacade(); UserVO user = model.findUser(login); } catch Exception e{ response.sendRedirect(“paginaError.html”)} if (user == null) response.sendRedirect(“paginaError.html”) %> <h1>Información del usuario buscado (<%=login%>) </h1> <p>Nombre: <%= user.getLogin() %> </p> <p>Apellidos: <%= user.getSurname() %> </p> … </body> </html>
Las páginas JSP usan <% ….%> para incluir código Java (crear scriptlets)
Las páginas JSP usan la directiva <%@ … %> para importar clases
Las páginas JSP usan <%--….--%> para generar comentarios (no en el html)
Las páginas JSP tienen definidos los siguientes objetos de forma implícita:
request: javax.servlet.http.HttpServletRequest response: javax.servlet.http.HttpServletResponse session: javax.servlet.http.HttpSession out: javax.servlet.jsp.JspWriter
Las páginas JSP usan <%= expresión %> para incluir expresiones en Java que dan como resultado un objeto String o un objeto convertible a String (llamada al método toString())
Sistemas de Información Raquel Trillo Lado
JSPs: Ejemplos
Cuando usar JSP y cuando Servlets: JSP para la generación de la vista de la aplicación:
Visualización de formularios y de mensajes de error después de validar los parámetros de entrada del formulario en el servidor
Visualizar los resultados de una operación (por ejemplo una operación de búsqueda)
Servlets para el procesamiento de los formularios y las llamadas a la capa modelo de la aplicación:
Si los parámetros son válidos realizará la correspondiente operación y pasará el control a la página JSP que visualiza los resultados de la acción
Si no lo son detectará los errores y pasará el control a la página JSP que permita al usuario subsanar lo errrores
Sistemas de Información Raquel Trillo Lado
JSPs: Ejemplos
¿Cómo hacer disponible una aplicación Web? Instándola (deployment) en el servidor web
Los servidores/contenedores de aplicaciones Web que trabajan con tecnologías Java emplean ficheros war.
Jar cvf miPrimeraAplicacion.war directorio
Estructura del fichero .war: Directorio WEB-INF/classes: contiene los ficheros .class de la
aplicación web agrupados en directorios según su estructura de paquetes
Directorio WEB-INF/lib: contiene los ficheros .jar de las liberías que usa la aplicación (por ejemplo el driver jdbc de conexión a la BD)
Sistemas de Información Raquel Trillo Lado
Empaquetamiento de una aplicación Web
Estructura del fichero .war: Directorio WEB-INF/web.xml: fichero de configuración
de la aplicación web que contiene diversos parámetros (p.e. qué URLs se asocian a cada Servlet incluido en la aplicación)
Directorio raíz y subdirectorios que contienen los ficheros vista de la aplicación:
Páginas HTML, CSS, imágenes, páginas JSP Los navegadores (clientes) no pueden acceder al
contenido de WEB-INF (sólo es visible para los servlets y JSP)
Sistemas de Información Raquel Trillo Lado
Empaquetamiento de una aplicación Web
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns=“http://java.sun.com/xml/ns/javaee” xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Mi primera aplicación Web</display-name>
<!-- ================ Servlets ================ --> <servlet> <servlet-name>InsertUser</servlet-name> <servlet-class>miprimeraaplicacion.ejemplo1.InsertUserServlet </servlet-class> </servlet>
Sistemas de Información Raquel Trillo Lado
Empaquetamiento de una aplicación Web
<!-- ===--========= Servlets Mapping======= --> <servlet-mapping> <servlet-name>InsertUser</servlet-name> <url-pattern>/InsertUser</url-pattern> </servlet-mapping>
<!-- ============ Welcome page ========= --> <welcome-file-list> <welcome-file>Index.html</welcome-file> </welcome-file-list>
</web-app>
Sistemas de Información Raquel Trillo Lado
Empaquetamiento de una aplicación Web
En el ejemplo sólo se muestran algunas etiquetas comunes
Display-name: Define el nombre de la aplicación Web
Servlet: Declara cada clase servlet que forma parte de la aplicación (servlet-class) y le asigna un nombre (servlet-name)
Servlet-mapping: Define las URLs asociadas a cada servlet (url-pattern) definido anteriormente (servlet-name)
Welcome-file-list: indica la página devuelta por el servidor cuando se acceda a la aplicación (welcome-file)
Sistemas de Información Raquel Trillo Lado
Empaquetamiento de una aplicación Web
Bibliografía
Mark Andrews “Story of a Servlet: An instant Tutorial” (http://www.oracle.com/technetwork/java/tutorial-138750.html)
Fernando Bellas Permuy “Integración de Sistemas”, Ingeniería Informática, Universidad da Coruña
Transparencias en la plataforma Blackboard 9.1 del Anillo Digital Docente (ADD): http://bb.unizar.es
Sistemas de Información Raquel Trillo Lado
Recommended