aula 8 - universidade do minho - departamento de...
Post on 11-Nov-2018
220 Views
Preview:
TRANSCRIPT
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!
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!
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
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>!
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>
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>");
%>
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>
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();
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”);
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”);
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();
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
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" %>
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!
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>
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)!
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!
top related