Publicado el 14 de Julio del 2018
441 visualizaciones desde el 14 de Julio del 2018
470,1 KB
56 paginas
Creado hace 21a (28/10/2002)
4.2 Tutorial de JSP
Introducción (1)
n Situación en el apartado anterior: el texto generado
para el aspecto (vista) de la interfaz gráfica (HTML,
WML, etc.) está mezclado con código Java
n No es posible usar herramientas de generación de HTML,
WML, etc. directamente
n La generación del texto necesita ser escrita por una persona
con conocimientos de Java => económicamente muy
costoso
n Cambios al aspecto de la interfaz gráfica requieren
recompilación, creación de un nuevo fichero .war y re-
arranque del servidor
n En una aplicación web, especialmente en Internet, los cambios
a la interfaz gráfica son muy frecuentes
Introducción (2)
n Situación a la que queremos llegar
n Separación de roles
n Personas que realizan el aspecto gráfico => diseñadores
gráficos o similares
n Conocimientos de diseño gráfico y herramientas para generación
de HTML y WML
n Personas que implementan el controlador y el modelo =>
informáticos
n Conocimientos de diseño e implementación
n Se deberían poder usar directamente las herramientas de
diseño de páginas web
n Las actualizaciones al aspecto gráfico no deben provocar un
re-arranque del servidor
Introducción (y 3)
n En este apartado
n Estudiaremos los aspectos principales de JSP (Java Server
Pages), como primer paso para alcanzar los anteriores hitos
n No resolveremos el problema de la separación de roles en su
totalidad
n Una parte la tenemos resuelta, dado que hemos aprendido ha
diseñar e implementar un modelo que no depende de la vista
n Los apartados 4.3 y 4.4 completarán los conocimientos
necesarios para resolver totalmente el problema
n Los apartados 4.5 y 4.6 ilustrarán dos aplicaciones completas
que reflejan la situación a la que queremos llegar
¿ Qué es JSP ? (1)
n ¿ Qué es JSP ?
n A modo de ejemplo, una página JSP que genera HTML
n Tiene el aspecto de una página HTML
n Puede incluir scriptlets (scripts) para generar HTML
dinámicamente
n Típicamente los scriptlets se escriben en Java
¿ Qué es JSP ? (2)
n En realidad, una página JSP es un tipo especial de servlet
(javax.servlet.jsp y javax.servlet.jsp.tagext)
orientado a generar el texto de la interfaz gráfica
Invocables por GET y POST
n
<<interface>>
javax.servlet.Servlet
<<interface>>
javax.servlet.jsp.JspPage
<<interface>>
javax.servlet.jsp.HttpJspPage
+ _jspService(request : HttpServletRequest, response : HttpServletResponse) : void
¿ Qué es JSP ? (y 3)
n ¿ Qué ocurre cuando se accede a una página JSP ?
n Si es la primera vez, el servidor de aplicaciones genera un
servlet (que implementa
javax.servlet.jsp.HttpJspPage) a partir de la
página JSP, lo compila y lo carga en memoria
n Si no es la primera vez, le pasa la petición al servlet (ya
compilado y creado en memoria)
n Si la página se ha modificado desde la última compilación, el
servidor se da cuenta, genera el nuevo servlet, lo compila y
lo carga de nuevo
Página principal del tutorial
Index.jsp
<html>
...
<ul>
<li><a href="Hello2/HelloUser.jsp?userName=Fernando+Bellas">
HelloUser by GET (userName = Fernando Bellas)</a></li>
<li><a href="Hello2/HelloUserByPost.html">HelloUser by POST</a></li>
<li><a href="<%= response.encodeURL("Portal2/MainPage.jsp") %>">
Portal-2 main page</a></li>
</ul>
...
</html>
Portal2/HelloUserByPost.html
<html>
...
<form method="POST" action="HelloUser.jsp">
<table width="100%" border="0" align="center" cellspacing="12">
<tr>
<th align="right" width="50%">User name</th>
<td align="left">
<input type="text" name="userName" size="16“
maxlength="16">
</td>
</tr>
<tr>
<td width="50%“></td>
<td align="left" width="50%">
<input type="submit" value="Say me hello">
</td>
</tr>
</table>
</form>
...
</html>
Demo HelloUser (1)
Servlet and JSP Tutorial Main Page
Clic en HelloUser by GET (userName = Fernando Bellas)
Demo HelloUser (y 2)
Servlet and JSP Tutorial Main Page
Clic en HelloUser by POST
Hello2/HelloUser.jsp
<html>
<head>
<title>HelloUser</title>
</head>
<body text="#000000" bgcolor="#ffffff">
<h1>Hello <%= request.getParameter("userName") %> </h1>
<br><br><br>
Your name written ten times:<br>
<%
%>
String name = request.getParameter("userName");
for (int i=0; i<10; i++) {
<b><%= name %></b> <br>
<%
}
%>
</body>
</html>
Comentarios
n Usa <%= expresión %> para incluir expresiones
Java
n La expresión es evaluada en tiempo de ejecución y
convertida a un String
n Usa scriptlets para incluir código Java
n <% ... %>
n Objetos implícitos
n request: javax.servlet.http.HttpServletRequest
n response: javax.servlet.http.HttpServletResponse
n session: javax.servlet.http.HttpSession
n out: javax.servlet.jsp.JspWriter
n Algunos más
n Los veremos a medida nos hagan falta
Demo Portal-2 (1)
Servlet and JSP Tutorial Main Page
Clic en Portal-2 main page
Demo Portal-2 (2)
Demo Portal-2 (y 3)
Clic en Servlet and JSP tutorial main page
Servlet and JSP Tutorial Main Page
Clic en Logout
Terminar y lanzar el navegador dos días más tarde
Servlet and JSP Tutorial Main Page
Acceder a Servlet and JSP tutorial main page
Servlet and JSP Tutorial Main Page
Clic en Portal-2 main page
Clic en Portal-2 main page
Portal-2 login form
Organización del código
n Páginas JSP en WEB-INF/Portal-2
n MainPage.jsp
n ShowLogin.jsp
n ProcessLogin.jsp
n ProcessLogout.jsp
n En es.udc.fbellas.j2ee.servjsptutorial.portal2
n LoginManager
n LoginForm
Concepto de cookie (1)
n El API de servlets permite enviar cookies al
navegador del usuario
n Una cookie tiene un nombre y un valor asociado (cadena de
caracteres)
n Cookie cookie = new Cookie(“loginName”, loginName);
n Cada navegador debería soportar alrededor de 20 cookies
por cada sitio web al que está conectado, 300 en total y
puede limitar el tamaño de cada cookie a 4 Kbytes
n Para enviar una o varias cookies al navegador se
incluyen en la response
n response.addCookie(cookie);
n Cada vez que el navegador hace una petición, todas
las cookies relativas a esa aplicación web llegan en la
request
n Cookie[] cookies = request.getCookies();
Concepto de cookie (2)
n Tiempo de vida de una cookie
n cookie.setMaxAge(seconds);
n seconds > 0 => la cookie se almacenará
persistentemente en el navegador durante ese número de
segundos
n Los navegadores suelen almacenar este tipo de cookies en
ficheros locales
n seconds == 0 => eliminar la cookie
n seconds < 0 => la cookie no se almacenará
persistentemente y dejará de existir cuando el navegador
termine su ejecución
n Los navegadores mantienen este tipo de cookies en memoria
Concepto de cookie (3)
n En el ejemplo
n Gestión de la sesión: idem ejemplo anterior
n Se valida nombre de login y password de forma ficticia
n La password es válida si es igual al nombre de login
n Cada vez que un usuario hace login correctamente, se le
crea una sesión, y si ha seleccionado “recordar mi
password”, se le envían a su navegador dos cookies:
loginName y password, con tiempo de vida = 30 días
n Cada vez que un usuario accede a la página principal del
portal, si su sesión no existe o no tiene el loginName en la
sesión, se comprueba si en la request llegan las cookies
loginName y password, y que son correctas
n En caso afirmativo, se le crea una sesión y se le redirige a la
página principal
n En caso negativo, se le redirige a la página de login
n Cada vez que el usuario hace un logout, se le destruye su
sesión, se eliman las cookies de su navegador y se le
redirige a la página principal del tutorial
Concepto de cookie (y 4)
n Seguridad
n En un ejemplo real, el valor de la cookie password sería la
password cifrada
n MiniPortal lo hará así
n Aún así, las cookies no son un mecanismo seguro para el
usuario
n Si un usuario tiene acceso al fichero de cookies de otra
persona, puede copiar las cookies loginName y password a
su fichero de cookies, y por tanto, entrar en la aplicación web
con su identidad
n Los sitios web que tienen la opción de “recordar mi password”
suelen advertir del problema
es.udc.fbellas.j2ee.servjsptutorial.portal2.LoginManager (1)
public final class LoginManager {
private final static String LOGIN_NAME_SESSION_ATTRIBUTE =
"loginName";
private static final String LOGIN_NAME_COOKIE = "loginName";
private static final String PASSWORD_COOKIE = "password";
private static final int
COOKIES_TIME_TO_LIVE_REMEMBER_MY_PASSWORD =
30 * 24 * 3600; // 30 days
private static final int COOKIES_TIME_TO_LIVE_REMOVE = 0;
private LoginManager() {}
es.udc.fbellas.j2ee.servjsptutorial.portal2.LoginManager (2)
public final static void login(HttpServletRequest request,
HttpServletResponse response, String loginName,
String password, boolean rememberMyPassword)
throws IncorrectPasswordException {
validateLogin(loginName, password);
HttpSession session = request.getSession(true);
session.setAttribute(LOGIN_NAME_SESSION_ATTRIBUTE, loginName);
if (rememberMyPassword) {
leaveCookies(response, loginName, password,
COOKIES_TIME_TO_LIVE_REMEMBER_MY_PASSWORD);
}
}
es.udc.fbellas.j2ee.servjsptutorial.portal2.LoginManager (3)
public final static void logout(HttpServletRequest request,
HttpServletResponse response) {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
leaveCookies(response, "", "", COOKIES_TIME_TO_LIVE_REMOVE);
}
es.udc.fbellas.j2ee.servjsptutorial.portal2.LoginManager (4)
public final static String getLoginName(
HttpServletRequest request) {
/* Try to get login name from session. */
String loginName = null;
HttpSession session = request.getSession(false);
if (session != null) {
loginName = (String) session.getAttribute(
LOGIN_NAME_SESSION_ATTRIBUTE);
if (loginName != null) {
return loginName;
}
}
es.udc.fbellas.j2ee.servjsptutorial.portal2.LoginManager (5)
/*
* The user had not logged in or his/her session has expired.
* We need to check if the user has selected "remember
Comentarios de: 4.2 Tutorial de JSP (0)
No hay comentarios