Desenvolvimento de Projetos e Aplicações Web [email protected].
Transcript of Desenvolvimento de Projetos e Aplicações Web [email protected].
![Page 2: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/2.jpg)
JSP
![Page 3: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/3.jpg)
3
Conteúdo• Introdução• Arquitetura e funcionamento• Sintaxe• Elementos
![Page 4: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/4.jpg)
4
JavaServer Pages• Tecnologia Java para criação
de aplicações Web com conteúdo dinâmico como HTML e XML
• JSP Permite separação de conteúdo dinâmico e estático
• JSP Suporta scripting e tags
![Page 5: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/5.jpg)
5
Arquitetura JavaServer Pages• Atua como a camada Web de
acesso a aplicações n-tier
• Utiliza o protocolo HTTP para comunicação com browsers
• Requisições JSP são atendidas por servlets
![Page 6: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/6.jpg)
6
Hello World<%@ page info="a hello world example" %>
<html><head>
<title>Hello, World</title>
</head>
<body bgcolor="#ffffff“ background="back.gif">
<table><tr><td width=150> </td>
<td width=250 align=right>
<h1>
<%System.out.println(“Hello, World!”); %>
</h1>
</td></tr>
</table></body></html>
![Page 7: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/7.jpg)
7
Modelo de Requisições
<%@ page info="a hello world example" %>
<html><head><title>Hello, World</title></head>
<body bgcolor="#ffffff“ background="back.gif">
<%@ include file="dukebanner.html" %>
<table><tr><td width=150> </td>
<td width=250 align=right> <h1>Hello, World!</h1>
</td></tr>
</table></body></html>
JSP EngineJSP Engine
RequestRequest
ResponseResponse
![Page 8: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/8.jpg)
8
JSP Engine
• O JSPEngine é um software para:– Atender requisições de páginas JSP– Transformar uma página JSP
requisitada em um servlet– Executar o servlet para atender as
requisições JSP correspondentes
• Pode ser acoplado a um servidor web ou a um servidor de aplicações
![Page 9: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/9.jpg)
9
Mecanismo (Funcionamento)
Servidor Web
JSP foi modificado ?
JSP já traduzido em servlet ?
Executar o Servlet
Traduz JSP em Servlet
Compila o Servlet
Sim
Não
Sim
Não
Carrega o Servlet
GET, POST
HTTP RESPONSE
![Page 10: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/10.jpg)
Sintaxe JSP
![Page 11: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/11.jpg)
11
Elementos JSP• Tags especiais• Interpretados no servidor (não
chegam ao browser)
• Organizados em 4 grupos:– Comentários– Diretivas e Taglibs– Scripting Elements
• Expressões, Declarações e Scriptlets
– Ações
![Page 12: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/12.jpg)
12
Elementos JSP
Elemento Tag
Diretivas <%@ ... %>
Declarações <%! ... %>
Expressões <%= ... %>
Scriptlets <% ... %>
Comentários <%-- ... --%>
Custom Tags <prefixo:elemento ... />
![Page 13: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/13.jpg)
13
Comentários
• Utilizados para comentar o código
• Não são processados pelo container JSP
• Sintaxe:<%-- Este é um comentário --%>
<%//Este é outro comentário %>
![Page 14: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/14.jpg)
14
Diretivas
• Utilizadas para enviar mensagens para o container JSP, afetando a estrutura do Servlet a ser gerado.
• Sintaxe:<%@ directiveType attribute= =“valor” %>
directiveType: {include, page e taglib}
• Include e Page
![Page 15: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/15.jpg)
15
Diretivas – Include
• Utilizado para incluir arquivos estáticos no documento JSP
• Sintaxe JSP:– <%@ include file=“URL” %>
• Exemplos– <%@ include file=“Reverso.jsp” %>
– Topo, base, miolo, etc.
![Page 16: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/16.jpg)
16
Diretivas – page • Utilizado para descrever inúmeros
atributos que serão considerados durante a criação do Servlet, tais como– Importação de pacotes;– Tipo de conteúdo;– Retorno;– Etc.
• Sintaxe JSP:– <%@ page attribute=“valor” %>
![Page 17: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/17.jpg)
17
Diretivas – page• Define características válidas
para toda a página JSP e qualquer trecho de página incluída com a diretiva @include
• Pode ser usada mais de uma vez na mesma página
![Page 18: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/18.jpg)
18
Diretivas – page
• Cada opção só pode aparecer uma vez na página, exceção feita à opção import
• Embora possa ser colocada em qualquer lugar da página, é recomendável colocá-la no início do arquivo JSP
![Page 19: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/19.jpg)
19
Diretivas – page• Atributos de <%@page attribute=“valor”%>
![Page 20: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/20.jpg)
20
import• Pacotes/classes que serão
utilizados no JSP• Deve aparecer antes de
referenciar a classe• Pode-se separar pacotes por
vírgula ou utilizar a opção import várias vezes
<%@ page import=“java.io.*, java.util.*” %>
![Page 21: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/21.jpg)
21
session• session = true|false• Quando true, a página utilizará o
recurso de sessão HTTP e um objeto implícito session deverá estar disponível para a página JSP
• Quando false, a página não utilizará o recurso de sessão HTTP e qualquer referência ao objeto implícito session causará um erro em tempo de tradução
![Page 22: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/22.jpg)
22
Tag Extensions• Permite criação de tags
personalizadas• Cada tag deve possuir uma classe
Java que implementa sua funcionalidade
• Propósitos diversos:– Manipulação de XML; Acesso a BD;
IO;...
• Sintaxe:– <%@ taglib uri=“URIForLibrary” prefix=“tagPrefix” %>
![Page 23: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/23.jpg)
23
Taglibs - Exemplo
<%@ taglib uri=“http://www.company.com/tags”prefix=“public” %>
...
<public:loop>
....
</public:loop>
![Page 24: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/24.jpg)
Scripting
![Page 25: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/25.jpg)
25
Elementos de Scripting
• São fragmentos de código java inseridos em uma página JSP
• Declarações de variáveis, blocos de códigos, etc
• Subdividem-se em três categorias:– Expressões– Declarações– Scriptlets
![Page 26: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/26.jpg)
26
Declarações• Declarar variáveis e métodos usados
nos Scriptlets e expressões• Sintaxe: <%! ... %>• Exemplos:
<%! int i = 0; %><%! public String title() { return “A”;}; %>
<%! public final static String[] meses ={"jan","fev","mar","abr","mai","jun"}; %><%! public static String getMesAtual() {
Calendar c = new GregorianCalendar();return meses[c.get(Calendar.MONTH)];
} %>
![Page 27: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/27.jpg)
27
Declarações – Exemplo
<html><head><title>Declarações JSP </title></head>
<BODY><H1>Declarações JSP</H1><%! private int contadorAcessos=0; %><H2>Número de acessos a essa página desde reboot do server:<%= ++contadorAcessos %></H2></body></html>
![Page 28: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/28.jpg)
28
Scriptlets
• Fragmentos de código Java
• Sintaxe: <% ... %>• Exemplo:<%
for(int i=0; i<100; i++)
out.println(i);
%>
![Page 29: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/29.jpg)
29
Scriptlets• Se quisermos que alguma saída
apareça na página HTML resultante, devemos usar o out
<% String queryData = request.getQueryString();
out.println(“Query String: " + queryData); %>
![Page 30: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/30.jpg)
30
Scriptlets• O código dentro de um scriptlet é inserido na página
exatamente como escrito e qualquer HTML estático antes ou depois de um scriptlet é convertido em comandos print
• Por exemplo, o seguinte código contém texto e scriptlets:<% if (Math.random() < 0.5) { %>
<B>Bom</B> dia! <% } else { %>
<B>Mau</B> dia! <% } %>
• Será convertido (no servlet) para:if (Math.random() < 0.5) {
out.println("Have a <B>nice</B> day!"); }
else { out.println("Have a <B>lousy</B> day!"); }
![Page 31: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/31.jpg)
31
Expressões• Expressões enviadas diretamente ao
output stream corrente– Insere o valor de um atributo ou chamada
de método em página JSP
• Sintaxe: <%= expressão %> (sem o ;)• Equivale a out.print(expressão),
portanto, expressão não pode terminar em ;
• Exemplo: <%= new Date() %>• Apenas uma expressão Java
![Page 32: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/32.jpg)
32
Exemplo<HTML> <BODY>
<%// Isso é um scriptlet.
// Note que a variável “hoje"
// é declarada aqui e usada na expressão mais adiante
out.println( “Data atual");
java.util.Date hoje = new java.util.Date(); %>
<b>Olá, hoje é <%= hoje %></b>
</BODY> </HTML>
![Page 33: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/33.jpg)
33
Objetos implícitos• Objetos disponíveis nas páginas
JSP sem a necessidade de declaração– Exceto session que depende de @page para ser ativado/desativado
• Cada objeto implícito tem uma classe ou interface definida na API de Java
• out, request, response, session,...
![Page 34: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/34.jpg)
34
Objetos implícitos: request• Representa a requisição que
causou a chamada do serviço
• Disponibiliza informações sobre os parâmetros passados pela requisição: tipo (GET, POST); headers (cookies)
• Objeto da classe HttpServletRequest
![Page 35: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/35.jpg)
35
Objetos implícitos: request - Exemplos
• URL no browser:http://servidor/programa.jsp?nome=Fulano&id=5
• Recuperação dos parâmetros no JSP:<% String nome = request.getParameter("nome");
String idStr = request.getParameter("id");
int id = Integer.parseInt(idStr); %>
<p>Bom dia <%=nome %>! (cod: <%=id %>)• Cookies
Cookie[] c = request.getCookies()
![Page 36: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/36.jpg)
36
Objetos implícitos: response• Representa a resposta enviada à
requisição que causou o serviço
• Permite a atribuição de valores para o cabeçalho da resposta, criação de cookies, definição de parâmetros, etc.
![Page 37: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/37.jpg)
37
Objetos implícitos: session• Sessão estabelecida entre o
cliente e o servidor• Armazena informações que
persistem por tempo determinado, podendo ser acessadas através de diversas páginas e requisições ao servidor
![Page 38: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/38.jpg)
38
Objetos implícitos: session• A sessão tem uma relação
direta com o browser, isto é, duas janelas de um browser compartilham a mesma sessão
• A maneira como as sessões são mantidas depende do JSP Engine
![Page 39: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/39.jpg)
39
Objetos implícitos: out
• Output stream para escrita da resposta no cliente
• Disponibiliza uma série de métodos para a escrita e controle do buffer de saída da página de resposta
![Page 40: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/40.jpg)
40
Objetos implícitos:out• Equivalente a response.getWriter();• Principais métodos
– print() e println()
• Os trechos de código abaixo são equivalentes<% for (int i = 0; i < 10; i++) {
out.print("<p> Linha " + i);
} %> OU
<% for (int i = 0; i < 10; i++) { %>
<p> Linha <%= i %>
<% } %>
![Page 41: Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022062512/552fc12a497959413d8cee22/html5/thumbnails/41.jpg)
41
Referências• Deitel, capítulo 27