Sistemas de Información 12/13 Servlets y JSPs (Java Server Pages)

Anuncio
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 ([email protected])
"
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
Introducción
 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
Servidor/Contenedor de aplicaciones Web:
Cliente Web
(Navegador)
Sistemas de Información
HTTP
Contenido estático: html, pdf, jpg,
png, etc..
Contenido dinámico generado
cuando se recibe una petición:
-Diferentes tecnologías:
Servlets, ASP, PHP
Raquel Trillo Lado
Servlets: Introducción
 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: Clases e interfaces del API
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
Sistemas de Información
Raquel Trillo Lado
Servlets: Clases e interfaces del API
 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)
 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 s p o n s e
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
Sistemas de Información
Raquel Trillo Lado
Servlets: Ejemplos
 C r e a c i ó n d e u n s e r v l e t q u e p r o c e s e l o s d a t o s
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:
Sistemas de Información
Raquel Trillo Lado
Servlets: Ejemplos
 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
Sistemas de Información
Raquel Trillo Lado
Servlets: Ejemplos
…
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");
…...
Sistemas de Información
Raquel Trillo Lado
Servlets: Ejemplos
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”)
}…
}
Sistemas de Información
Raquel Trillo Lado
Servlets: Ejemplos
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>”);
}
Sistemas de Información
Raquel Trillo Lado
Servlets: Ejemplos
 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
Sistemas de Información
Raquel Trillo Lado
Servlets: Ejemplos
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
Sistemas de Información
Raquel Trillo Lado
JSPs: Introducción
 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: Ejemplos
 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 )
Sistemas de Información
Raquel Trillo Lado
JSPs: Ejemplos
<%@ 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>
Sistemas de Información
Raquel Trillo Lado
JSPs: Ejemplos
 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
Empaquetamiento de una aplicación Web
 ¿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 (servletname)
 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
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
Descargar