Desenvolvimento de
Projetos e Aplicações Web
[email protected]
JSP
Conteúdo
•
•
•
•
Introdução
Arquitetura e funcionamento
Sintaxe
Elementos
3
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
4
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
5
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> &nbsp; </td>
<td width=250 align=right>
<h1>
<%System.out.println(“Hello, World!”); %>
</h1>
</td></tr>
</table></body></html>
6
Modelo de Requisições
JSP Engine
<%@ page info="a hello world example" %>
Request
<html><head><title>Hello, World</title></head>
<body bgcolor="#ffffff“ background="back.gif">
<%@ include file="dukebanner.html" %>
Response
<table><tr><td width=150> &nbsp; </td>
<td width=250 align=right> <h1>Hello, World!</h1>
</td></tr>
</table></body></html>
7
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
8
Mecanismo
(Funcionamento)
Servidor Web
JSP já traduzido
em servlet ?
Não
Traduz JSP
em Servlet
Sim
GET, POST
Sim
JSP foi modificado ?
Compila o
Servlet
Não
HTTP RESPONSE
Executar
o Servlet
Carrega o
Servlet
9
Sintaxe JSP
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
11
Elementos JSP
Elemento
Tag
Diretivas
<%@ ... %>
Declarações
<%! ... %>
Expressões
<%= ... %>
Scriptlets
<% ... %>
Comentários
<%-- ... --%>
Custom Tags
<prefixo:elemento ... />
12
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 %>
13
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
14
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.
15
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” %>
16
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
17
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
18
Diretivas – page
• Atributos de <%@page attribute=“valor”%>
19
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.*” %>
20
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
21
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” %>
22
Taglibs - Exemplo
<%@ taglib
uri=“http://www.company.com/tags”
prefix=“public” %>
...
<public:loop>
....
</public:loop>
23
Scripting
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
25
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)];
} %>
26
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>
27
Scriptlets
• Fragmentos de código Java
• Sintaxe: <% ... %>
• Exemplo:
<%
for(int i=0; i<100; i++)
out.println(i);
%>
28
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); %>
29
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!"); }
30
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
31
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>
32
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,...
33
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
34
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()
35
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.
36
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
37
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
38
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
39
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 %>
<% } %>
40
Referências
• Deitel, capítulo 27
41
Download

JSP