Aula 8 - Universidade do Minho - Departamento de...

17
Engenharia de Aplicações – Sistemas Interactivos 2010/11 Mestrado em Engenharia Informática – Universidade do Minho 289 Aula 8 Programação Web 2: Introdução a JSP Engenharia de Aplicações – Sistemas Interactivos 2010/11 Mestrado em Engenharia Informática – Universidade do Minho 290 First principles (7) Deliver information, not just data(Johnson, 2008) ! Design displays cerfully, get professional help - Visual order and user focus; scannability; match the medium; attention to detail. ! The screen belongs to the user - minimise interference with the GUI controls (mouse, …) ! Preserve display inertia - small, incremental changes to the display

Transcript of Aula 8 - Universidade do Minho - Departamento de...

Page 1: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 289!

Aula 8

Programação Web 2:!Introdução a JSP!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 290!

First principles (7)

“Deliver information, not just data” !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(Johnson, 2008) !

!  Design displays cerfully, get professional help!-  Visual order and user focus; scannability; match the medium; attention to

detail.!!  The screen belongs to the user!

-  minimise interference with the GUI controls (mouse, …)!!  Preserve display inertia!

-  small, incremental changes to the display!

Page 2: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 291!

JSP Programação Web!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 292!

Common Gateway Interface (CGI) !  Early form of server side scripting!

!  Protocol for interfacing external applications with a web server!

!  When request received, corresponding program called!!  The protocol defines !

-  how information about the server and the request is passed to the command (arguments and environment variables) !

-  how the command can pass back extra information about the output (headers)!

!  Low-tech approach!

-  inefficient from time and memory perspective!-  if CGI used often, can quickly overwhelm web servers!

Page 3: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 293!

Direct execution

!  Applications run on web server instead of OS!-  Apache modules (PHP, …)!-  ASP .NET!-  Internet Server Application Programming Interface (ISAPI)!

!  Application servers!-  Move back towards mainframe computing!-  Server stores business logic and user interface!-  Client side runs on a browser!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 294!

Application Servers

Page 4: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 295!

Servlets

!  Tecnologia Java!!  Geração de HTML

on the fly!!  Nova vista (página)

gerada a cada pedido!-  Vista é programada, não

desenhada!-  Não encorajam separação

entre apresentação e negócio/conteúdo!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 296!

Servlets – example

import java.io.*;!import javax.servlet.http.*;!import javax.servlet.*;!

public class HelloServlet extends HttpServlet { !!public void doGet (HttpServletRequest req, HttpServletResponse res) !! ! ! ! ! ! ! ! !!throws ServletException, IOException { !! !PrintWriter out = res.getWriter(); !! !out.println("Hello, world!"); !! !out.close(); !!}!

}!<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4”! ! xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" !

! ! xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd"> !!<servlet> !! !<servlet-name>hello</servlet-name> !! !<servlet-class>test.HelloServlet</servlet-class> !!</servlet> !!<servlet-mapping> !! !<servlet-name>hello</servlet-name> !! !<url-pattern>/hello</url-pattern> !!</servlet-mapping>!

<web-app>!

Page 5: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 297!

JSP (Java Server Pages)

!  Um salto de abstracção em relação às Servlets!!  Permite incluir código Java nas páginas HTML!!  Ficheiros .jsp compilam para Java!

-  ou directamente para bytecode!-  on interpretados on the fly…!

!  Código Java compilado e executado para gerar HTML!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 298!

JSP – Expressões

!  <%= expressão Java %>!

!  Expressão avaliada em run time !

<HTML> <BODY> Hello! The time is now <%= new java.util.Date() %> </BODY>

</HTML>

Page 6: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 299!

JSP – Scriptlets

!  <% bloco de código Java %>!

!  Por si só uma Scriptlet não produz HTML!-  mas podemos programá-la para isso…!

<HTML> <BODY> <% System.out.println( "Evaluating date now" );

java.util.Date date = new java.util.Date(); %> Hello! The time is now <%= date %> </BODY>

</HTML>

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 300!

JSP – Gerar HTML

!  o mesmo que uma servlet?!!

<% out.println("<table border=1>"); for ( int i = 1; i <= 5; i++ ) { out.println("<tr>"); out.println("<td>Número</td>"); out.println("<td>"+i+"</td>"); } out.println("</table>");

%>

Page 7: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 301!

JSP – Misturar HTML e Java

!  Melhor que utilizar out é misturar HTML e Java!<table border=2>

<% for ( int i = 1; i <= 5; i++ ) { %> <tr> <td>Number</td> <td><%= i %></td> </tr> <%}%> </table>

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 302!

JSP: Declarações

!  <%! declarações Java %>!

!  Mas agora não funciona!!

<%@ page import="java.util.*" %> <HTML>

<BODY> <%!

Date theDate = new Date(); Date getDate() { System.out.println( "Evaluating date now" ); return theDate; }

%> Hello! The time is now <%= getDate() %> </BODY>

</HTML>

Page 8: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 303!

JSP – Algumas variáveis (out)

!  out: javax.servlet.jsp.JspWriter!-  subclasse de java.io.Writer!-  permite “escrever” na página!

out.print(“Evaluating date now”); out.println("Evaluating date now”); out.newLine();

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 304!

JSP – Algumas variáveis (request)

!  request: javax.servlet.http.HttpServletRequest!-  informação sobre o pedido enviado pelo browser!

request.getRemoteHost(); request.getParameter(“parameterName”); request.getParameterNames(); request.getParameterValues(); request.getRequestURI(); request.getAttribute(“attributeName”); request.setAttribute(); request.removeAttribute(“attributeName”); request.getCookies();

Page 9: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 305!

JSP – request example

<HTML> <BODY> <FORM METHOD=POST ACTION="dizOla.jsp"> Como se chama? <INPUT TYPE=“TEXT” NAME=“username” SIZE=“20”> <BR /> <INPUT TYPE=SUBMIT> </FORM> </BODY>

</HTML>

<%@ page contentType="text/html;charset=utf-8"%> <HTML>

<BODY> Olá, <%= request.getParameter("username"); %> <br /> <a href="OlaMundo.jsp">back</a> </BODY>

</HTML>

OlaMundo.jsp!

dizOla.jsp!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 306!

JSP – Algumas variáveis (response)

!  response: javax.servlet.http.HttpServletResponse!-  manipulação da resposta a enviar ao browser!

response.setContentType(“text/html”); response.addCookie(aCookie); response.containsHeader(“headerName”); response.setHeader(“headerName”, “value”); response.sendRedirect(“anURL”);

Page 10: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 307!

JSP – response example

<%@ page contentType="text/html; charset=utf-8"%> <% String nome = request.getParameter("username");

if (nome==null || nome.equals("")) response.sendRedirect("erro.html");

%> <HTML>

<BODY> Olá, <%= nome %> <br /> <a href="OlaMundo.jsp">back</a> </BODY>

</HTML>

<HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> </HEAD> <BODY> Ops! Não se esqueça do nome... <br /> <a href="OlaMundo.jsp">back</a> </BODY>

</HTML>

erro.html!

dizOla.jsp!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 308!

JSP – Algumas variáveis (session)

!  session: javax.servlet.http.HttpSession!-  um(a espécie de) Map !-  permite guardar informação de página para

página!

session.isNew(); session.invalidate(); session.setAttribute("theName", name); session.getAttribute("theName”); session.getAttributeNames(); session.removeAttribute(“theName”);

Page 11: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 309!

JSP – session example

<%@ page contentType="text/html; charset=utf-8"%> <HTML>

<BODY> <% if (session.getAttribute("erro")==null) { %> Ops! Não se esqueça do nome... <% session.setAttribute("erro", ""); %> <% } else { %> Tem que indicar um nome na caixa de texto antes de premir o botão submit. <br /> Tente novamente. <% } %> <br /> <a href="OlaMundo.jsp">back</a> </BODY>

</HTML>

erro.jsp!

<%@ page contentType="text/html; charset=utf-8"%> <% String nome = request.getParameter("username");

if (nome==null || nome.equals("")) response.sendRedirect("erro.jsp"); else session.removeAttribute("erro");

%> <HTML>

<BODY> Olá, <%= nome %> <br> <a href="OlaMundo.jsp">back</a> </BODY>

</HTML>

dizOla.jsp!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 310!

JSP – Algumas variáveis (application)

!  session: javax.servlet.ServletContext!-  um(a espécie de) Map !-  permite guardar informação global a todas as

sessões!

application.log(“aMessage”); application.setAttribute("theName", name); application.getAttribute("theName”); application.getAttributeNames(); application.removeAttribute();

Page 12: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 311!

JSP – application example

<%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.util.*"%> <% String nome = request.getParameter("username");

int c=0; if (nome==null || nome.equals("")) { response.sendRedirect("erro.jsp"); } else { session.removeAttribute("erro"); if (application.getAttribute("conta") != null) c = (Integer)application.getAttribute("conta"); application.setAttribute("conta", ++c); }

%> <HTML>

<BODY> Olá, <%= nome %> (é o <%= c %>. a passar por cá) <br /> <a href="OlaMundo.jsp">back</a> </BODY>

</HTML>

dizOla.jsp!

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 312!

JSP – resumo de objectos implícitos Objecto Classe/Interface Descrição

out jsp.JspWriter out stream para a página

request http.HttpServletRequest os dados enviados com o pedido

response http.HttpServletResponse a resposta http

session http.HttpSession dados da sessão do utilizador

application ServletContext dados partilhados por todas as sessões

page jsp.HttpJspPage a servlet da página (atributos, namespaces)

pageContext jsp.pageContext o contexto da página

config ServletConfig configuração da servlet

Page 13: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 313!

JSP – Directivas

!  <%@ tipo atributo%>!-  tipo: page/include/taglib/…!

!  Directiva page: informação sobre a servlet a gerar!-  import/contentType/pageEncoding/session/errorPage/…!

<%@ page import="java.util.*" errorPage=“error.jsp”%> <HTML>

<BODY> Hello! The time is now <%= new Date() %> </BODY>

</HTML>

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 314!

JSP – tags (ctd.)

!  Directiva include: !

!  Directiva taglib!-  tags de bibliotecas externas (taglibs)!

<%@ taglib uri="URIForLibrary" prefix="tagPrefix" %>

<%@ include file="relativeURL" %>

Page 14: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 315!

JSP – acções

!  tags pré-definidas!-  <jsp:tag>…</jsp:tag>!-  text/include/forward/useBean/getProperty/

setProperty/plugin!!  include!

<jsp:include page="URL" flush=”true” />

<jsp:include page="URL" flush="true" > <jsp:param name=”param" value=”valor" />

</jsp:include>

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 316!

JSP – include: directiva vs. acção

!  acção (<jsp:include />)!-  inclusão do resultado (recompilação automática)!-  classes mais pequenas!-  flexível (parâmetros/qualquer fonte)!

!  directiva (<%@ include %> )!-  inclusão do texto!-  páginas partilham variáveis!-  um pouco melhor em termos de desempenho!

Page 15: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 317!

JSP – acções (ctd.)

!  forward!-  semelhante a sendRedirect!-  o browser não é notificado!

!  include!

<jsp:include page="URL" flush=”true” />

<jsp:include page="URL" flush="true" > <jsp:param name=”param" value=”valor" />

</jsp:include>

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 318!

JSP: Beans e Forms <HTML>

<BODY> <FORM METHOD=POST ACTION=”ShowName.jsp"> What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> What's your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> What's your age? <INPUT TYPE=TEXT NAME=age SIZE=4> <P><INPUT TYPE=SUBMIT> </FORM> </BODY>

</HTML>

<jsp:useBean id="user" class="user.UserData" scope="session"/> <jsp:setProperty name="user" property="*"/> <HTML>

<BODY> You entered<BR> Name: <%= user.getUsername() %><BR> Email: <%= user.getEmail() %><BR> Age: ${user.age} <BR> </BODY>

</HTML>

Page 16: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 319!

JSP – cliclo de vida

http://www.myhomepageindia.com/index.php/2009/04/15/jsp-life-cycle.html

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 320!

JSP: Arquitecturas

!  Model 1 architecture!

!  Model 2 architecture (MVC-like)!

Page 17: Aula 8 - Universidade do Minho - Departamento de Informáticajfc/ensino/EA-SI/EA-SI-1011-Aula08.pdf · - Vista é programada, não ... (HttpServletRequest req, HttpServletResponse

Engenharia de Aplicações – Sistemas Interactivos 2010/11!

Mestrado em Engenharia Informática – Universidade do Minho! 321!

Links Úteis

!  http://www.jsptutorial.net/!!  http://java.sun.com/products/jsp/pdf/card11.pdf!