JSP
3
Conteúdo• Introdução• Arquitetura e funcionamento• Sintaxe• Elementos
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
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
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>
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
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
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
Sintaxe JSP
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
12
Elementos JSP
Elemento Tag
Diretivas <%@ ... %>
Declarações <%! ... %>
Expressões <%= ... %>
Scriptlets <% ... %>
Comentários <%-- ... --%>
Custom Tags <prefixo:elemento ... />
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 %>
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
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.
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” %>
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
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
19
Diretivas – page• Atributos de <%@page attribute=“valor”%>
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.*” %>
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
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” %>
23
Taglibs - Exemplo
<%@ taglib uri=“http://www.company.com/tags”prefix=“public” %>
...
<public:loop>
....
</public:loop>
Scripting
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
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)];
} %>
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>
28
Scriptlets
• Fragmentos de código Java
• Sintaxe: <% ... %>• Exemplo:<%
for(int i=0; i<100; i++)
out.println(i);
%>
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); %>
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!"); }
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
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>
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,...
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
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()
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.
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
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
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
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 %>
<% } %>
41
Referências• Deitel, capítulo 27