JSP - Universidade do Minho

Propaganda
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
Aula 8
Programação Web 2:!
Introdução a JSP!
Mestrado em Engenharia Informática – Universidade do Minho!
289!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
First principles (7)
“Deliver information, not just data” !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(Johnson, 2008) !
! 
Design displays cerfully, get professional help!
- 
! 
The screen belongs to the user!
- 
! 
Visual order and user focus; scannability; match the medium; attention to
detail.!
minimise interference with the GUI controls (mouse, …)!
Preserve display inertia!
- 
small, incremental changes to the display!
Mestrado em Engenharia Informática – Universidade do Minho!
290!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
Programação Web!
JSP
Mestrado em Engenharia Informática – Universidade do Minho!
291!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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!
Mestrado em Engenharia Informática – Universidade do Minho!
292!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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!
Mestrado em Engenharia Informática – Universidade do Minho!
293!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
Application Servers
Mestrado em Engenharia Informática – Universidade do Minho!
294!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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!
Mestrado em Engenharia Informática – Universidade do Minho!
295!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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>!
Mestrado em Engenharia Informática – Universidade do Minho!
296!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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!
Mestrado em Engenharia Informática – Universidade do Minho!
297!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – Expressões
! 
<%= expressão Java %>!
<HTML>
<BODY>
Hello! The time is now <%= new java.util.Date() %>
</BODY>
</HTML>
! 
Expressão avaliada em run time !
Mestrado em Engenharia Informática – Universidade do Minho!
298!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – Scriptlets
! 
<% bloco de código Java %>!
<HTML>
<BODY>
<% System.out.println( "Evaluating date now" );
java.util.Date date = new java.util.Date();
%>
Hello! The time is now <%= date %>
</BODY>
</HTML>
! 
Por si só uma Scriptlet não produz HTML!
- 
mas podemos programá-la para isso…!
Mestrado em Engenharia Informática – Universidade do Minho!
299!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – Gerar HTML
<% 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>");
%>
! 
o mesmo que uma servlet?!!
Mestrado em Engenharia Informática – Universidade do Minho!
300!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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>
Mestrado em Engenharia Informática – Universidade do Minho!
301!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP: Declarações
! 
<%! declarações Java %>!
<%@ 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>
! 
Mas agora não funciona!!
Mestrado em Engenharia Informática – Universidade do Minho!
302!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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();
Mestrado em Engenharia Informática – Universidade do Minho!
303!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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();
Mestrado em Engenharia Informática – Universidade do Minho!
304!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – request example
OlaMundo.jsp!
<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>
dizOla.jsp!
<%@ page contentType="text/html;charset=utf-8"%>
<HTML>
<BODY>
Olá, <%= request.getParameter("username"); %>
<br />
<a href="OlaMundo.jsp">back</a>
</BODY>
</HTML>
Mestrado em Engenharia Informática – Universidade do Minho!
305!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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”);
Mestrado em Engenharia Informática – Universidade do Minho!
306!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – response example
dizOla.jsp!
<%@ 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>
erro.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>
Mestrado em Engenharia Informática – Universidade do Minho!
307!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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”);
Mestrado em Engenharia Informática – Universidade do Minho!
308!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – session example
erro.jsp!
<%@ 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 />
dizOla.jsp!
<a href="OlaMundo.jsp">back</a>
</BODY>
<%@ page contentType="text/html; charset=utf-8"%>
</HTML>
<% 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>
Mestrado em Engenharia Informática – Universidade do Minho!
309!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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();
Mestrado em Engenharia Informática – Universidade do Minho!
310!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – application example
dizOla.jsp!
<%@ 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>
Mestrado em Engenharia Informática – Universidade do Minho!
311!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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
Mestrado em Engenharia Informática – Universidade do Minho!
312!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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>
Mestrado em Engenharia Informática – Universidade do Minho!
313!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – tags (ctd.)
! 
Directiva include: !
<%@ include file="relativeURL" %>
! 
Directiva taglib!
- 
tags de bibliotecas externas (taglibs)!
<%@ taglib uri="URIForLibrary" prefix="tagPrefix" %>
Mestrado em Engenharia Informática – Universidade do Minho!
314!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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>
Mestrado em Engenharia Informática – Universidade do Minho!
315!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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!
Mestrado em Engenharia Informática – Universidade do Minho!
316!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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>
Mestrado em Engenharia Informática – Universidade do Minho!
317!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
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>
Mestrado em Engenharia Informática – Universidade do Minho!
318!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP – cliclo de vida
http://www.myhomepageindia.com/index.php/2009/04/15/jsp-life-cycle.html
Mestrado em Engenharia Informática – Universidade do Minho!
319!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
JSP: Arquitecturas
! 
! 
Model 1 architecture!
Model 2 architecture
(MVC-like)!
Mestrado em Engenharia Informática – Universidade do Minho!
320!
Engenharia de Aplicações – Sistemas Interactivos 2010/11!
Links Úteis
! 
http://www.jsptutorial.net/!
! 
http://java.sun.com/products/jsp/pdf/card11.pdf!
Mestrado em Engenharia Informática – Universidade do Minho!
321!
Download