JSP - Wiki LES PUC-Rio

Propaganda
Java II
Sérgio Luiz Ruivace Cerqueira
[email protected]
Por quê JSP?
• Com Servlets é fácil
– Ler dados de um formulário
– Recuperar dados de uma requisição
– Gerar informação de resposta
– Fazer gerenciamento de sessão / cookies
– Compartilhar dados entre Servlets
– Lembrar dados entre requisições
• Mas é difícil
– Gerar o HTML de saída usando println
– Fazer manutenção neste HTML de saída
© LES/PUC-Rio
JSP
• A idéia
– Usar HTML para maior parte das páginas
– Marcar código Servlet com tags especiais
– Toda a página JSP é traduzida para um Servlet (uma única vez)
e é este Servlet que é chamado ao se chamar uma jsp
© LES/PUC-Rio
JSP
• Exemplo de JSP
– Página JSP
• Obrigado por estudar
<i><%="request.getParameter(titulo)"%></i>
– URL
• http://localhost:8080/meuJsp.jsp?titulo=Curso+de+JSP
– Saída
• Obrigado por estudar Curso de JSP
© LES/PUC-Rio
JSP
HTML de resposta montado a
partir de sucessivos
comandos out.println(...).
C
on
trolador
B
row
ser
O
bjetosdeN
egócio
JavaB
eande
R
esposta
JS
P
© LES/PUC-Rio
JSP
• JSP é uma tecnologia que permite combinar informações
estáticas com informações geradas dinamicamente
• Script executado no servidor
– Combinação de sintaxe JSP e tags de marcação
– Tags estáticos (HTML, XML)
– Conteúdo dinâmico gerado pelo código do script
– Java
• Exemplo
<HTML><HEAD><TITLE>Primeiro JSP</TITLE></HEAD>
<BODY><H1>Data e hora:
<%= new java.util.Date() %></H1>
</BODY></HTML>
© LES/PUC-Rio
JSP – benefícios
• Embora JSP e Servlets sejam equivalentes, JSP
– Facilita o desenvolvimento da interface da aplicação com HTML
– Facilita a manutenção desta interface
• JSP permite o uso de ferramentas de desenvolvimento HTML
para criar a interface de aplicações Web
• JSP encoraja a separação do código HTML de interface do
código Java da aplicação
– A lógica de geração de HTML pode ser implementada na JSP ou
nas tags reutilizadas ou criadas como componentes separados
© LES/PUC-Rio
JSP – algumas perguntas
• Quando o JSP é traduzido em um Servlet?
– Na primeira chamada ao JSP
– A tradução não ocorre para toda requisição
• O que ocorre durante a tradução?
– Código Servlet é gerado, usando as marcações JSP
• O que ocorre ao se fazer uma requisição a um JSP?
– O código Servlet gerado é executado
– Em tempo de execução, não existe interpretação de páginas
JSP – somente código Servlet é executado
© LES/PUC-Rio
JSP – compilação de um script
requisição para
xxx.jsp
xxx.jsp
Compilação
resposta
resposta
indicação de
erro
xxx.class
(servlet)
Geração de
Código Java
xxx.java
(servlet)
© LES/PUC-Rio
JSP – compilação de um script (cont.)
requisição
para xxx.jsp
resposta de erro
xxx.jsp
Geração de
Código Java
Compilação
resposta
xxx.java
(servlet)
xxx.class
(servlet)
© LES/PUC-Rio
JSP – construções
• Elementos de script chamando código Servlet diretamente
• Uso de Beans
• Uso de Tag Library
© LES/PUC-Rio
Escopo, tags e diretivas
JSP – escopos dos atributos
• O JSP pode acessar objetos em tempo de execução em
quatro escopos diferentes
– Página
• Objeto PageContext corrente (contexto da página)
– Requisição
• Objeto HttpServletRequest corrente (requisição HTTP)
– Sessão
• Objeto HttpSession corrente (sessão)
– Aplicação
• Objeto ServletContext corrente (contexto do servlet)
© LES/PUC-Rio
JSP – escopos dos atributos
• Para armazenar informações: setAttribute(String, Object)
• Para recuperar informações: getAttribute(String)
© LES/PUC-Rio
JSP – tags
• Diretivas
– Configuração do processador JSP
– Inclusão estática de conteúdo
– Encaminhamento de requisições para outros servidores
• Comandos de script
– Inserção de código para a programação de conteúdo dinâmico
• Ações
– Tags de alto nível que encapsulam padrões de programação
mais corriqueiros
© LES/PUC-Rio
JSP – tags de diretivas
• Formato
– <%@ nome-da-diretiva
[nome-atributo = "valor-do-atributo"]* %>
• Diretivas disponíveis
– <%@ page lista-de-atributos %>
– <%@ include file="url-relativa" %>
– <%@ taglib uri="url-relativa-da-biblioteca-de-tags“
prefix="prefixo-das-tags" %>
© LES/PUC-Rio
JSP – atributos da diretiva Page
• language="nome-da-linguagem-de-script"
• contentType="mime-type | mime-type; charset=nomecharset"
• errorPage="url-página-de-erro"
• isErrorPage="true | false"
• buffer="none | tamanho-em-kb"
• auto-flush="true | false“
• import="lista-de-pacotes"
• Extends="nome-da-classe-base"
• session="true | false"
• isThreadSafe="true | false"
• info="texto-informativo"
© LES/PUC-Rio
JSP – diretiva Page: atributo import
• Formato
– <%@ page import="package-class" %>
– <%@ page import="package-class1, ..., package-classN" %>
• Propósito
– Permitir o uso de sentenças import no início do JSP
© LES/PUC-Rio
JSP – diretiva Page: atributo import
(exemplo)
© LES/PUC-Rio
JSP – diretiva Page: atributo import
(exemplo)
• Saída
– Primeiro acesso
– Demais acessos
© LES/PUC-Rio
JSP – diretiva Page: atributo contentType
• Formato
– <%@ page contentType="MIME-type" %>
– <%@ page import="MIME-type; charset=CharSet" %>
• Propósito
– Permitir dizer qual é o tipo de conteúdo da página de saída
gerada pelo JSP
© LES/PUC-Rio
JSP – diretiva Page: atributo contentType (ex.)
© LES/PUC-Rio
JSP – diretiva Include
• Formato
– <%@ include file="relativeURL" %>
• Propósito
– Permitir o reuso de páginas JSP pela inserção destas em uma
outra página JSP, fazendo uso das variáveis do JSP principal
© LES/PUC-Rio
JSP – diretiva Include (exemplo)
• Arquivo JSP a ser incluído: ContactSection.jsp
© LES/PUC-Rio
JSP – diretiva Include (exemplo)
• Arquivo JSP que inclui
© LES/PUC-Rio
JSP – diretiva Include (exemplo)
• Saída
© LES/PUC-Rio
Tags de Scripts e Ações
JSP – tags de script
• Declarações
– <%! declaração %>
• Scriptlets
– <% comandos %>
• Expressões
– <%= expressão %>
• Comentários
– <!-- comentário html -->
– <%-- comentário jsp -->
© LES/PUC-Rio
JSP – tags de script: declarações
• <%! declarações %>
<%! int i = 0;
public void metodo {...} %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
Declara variáveis ou métodos a serem utilizados no código JSP.
© LES/PUC-Rio
JSP – tags de script: scriptlets
• <% fragmento_de_código_válido %>
<% String name = null;
if (request.getParameter(“nome") == null)‫‏‬
{
%>
<%@ include file="error.html" %>
<%
}
else
{
foo.setName(request.getParameter(“nome"));
}
%>
Um scriptlet pode conter qualquer número de instruções,
variáveis, métodos, declarações ou expressões válidos.
© LES/PUC-Rio
JSP – tags de script: scriptlets (exemplo)
© LES/PUC-Rio
JSP – tags de script: scriptlets (exemplo)
• Saída
© LES/PUC-Rio
JSP – tags de script: expressões
• <%= expressão %>
O mapa tem
<font color="blue"><%= mapa.getCount() %></font>
entradas.
Esta tag contém uma expressão que é avaliada e convertida para
string, depois de processada.
© LES/PUC-Rio
JSP – tags de script: expressões (exemplo)
© LES/PUC-Rio
JSP – tags de script: expressões (exemplo)
© LES/PUC-Rio
JSP – tags de script: comentários
• <!-- comentário [ <%= expressão %> ] -->
<!-- Comentário -->
<!-- Esta página foi carregada em
<%= (new java.util.Date()).toLocaleString() %> -->
O processador JSP trata um comentário como texto HTML
não interpretado, retornando-o ao cliente.
Uma expressão pode ser incluída em um comentário, sendo
avaliada e seu resultado é retornado ao usuário juntamente
com o HTML de resposta.
© LES/PUC-Rio
JSP – tags de script: comentários
• <%-- comentário --%>
<%@ page language="java" %>
<html>
<head><title>Um teste - comentário</title></head>
<body>
<h2>Um teste - comentário</h2>
<%-- Este comentário não estará disponível
para o cliente --%>
</body>
</html>
O processador JSP simplesmente ignora este tipo de comentário
e não processa nenhum código ou expressão contida entre os
delimitadores.
Este tipo de comentário não será enviado para o cliente.
© LES/PUC-Rio
JSP – objetos pré-definidos
• Disponíveis para scriplets e expressões
– request
– response
– session
– out
– exception (somente em páginas de erro)
– page
© LES/PUC-Rio
JSP – ações
• jsp:include
• jsp:forward
• jsp:useBean
• jsp:setProperty
• jsp:getProperty
• ...
© LES/PUC-Rio
JSP – ação include
• Formato
– <jsp:include page="relativeURL" flush="true" %>
• Propósito
– Permitir o reuso de páginas HTML e JSP
– Permitir a modificação das páginas HTML e JSP incluídas sem
modificar a página JSP que as inclui
© LES/PUC-Rio
JSP – ação include (exemplo)
© LES/PUC-Rio
JSP – ação include (exemplo)
• Saída
© LES/PUC-Rio
JSP – ação forward
• Formato
– <jsp:forward page="{URLrelativa | <%=expressão%>}"/>
• Propósito
– Repassar o objeto request enviado para o arquivo JSP para
que seja processado por outra aplicação
• Nota
– O processador JSP não executa o restante das instruções
contidas após a tag
© LES/PUC-Rio
JSP – ação useBean
• Cria ou recupera uma instância de um bean
• Java Bean
– Classe Java que segue as seguintes convenções
• Deve ter um construtor sem argumentos
• Não deve ter atributos públicos
• Atributos são acessados através de métodos getXXX e setXXX
– Valores booleanos usam isXXX em vez de getXXX
© LES/PUC-Rio
JSP – ação useBean
• Formato
– <jsp:useBean id="nome" class="pacote.Classe" %>
• Propósito
– Permitir a instanciação de classes Java sem a sintaxe explícita
de Java
© LES/PUC-Rio
JSP – ação useBean
• Notas
– <jsp:useBean id="umLivro" class="puc.Livro" %>
é equivalente a
<% puc.Livro umLivro = new puc.Livro(); %>
– Mas o uso de Beans permite
• Reuso mais simples de classes (Beans)
• Uso simplificado dos atributos do Bean
© LES/PUC-Rio
JSP – acessando propriedades de um Bean
• Formato
– <jsp:getProperty id="nome" property="propriedade" %>
• Propósito
– Permitir recuperar o valor de atributos de um Bean sem uma
chamada explícita ao método getXXX
© LES/PUC-Rio
JSP – acessando propriedades de um Bean
• Notas
– <jsp:getProperty id="umLivro" property="titulo" %>
é equivalente a
<% umLivro.getTitulo(); %>
© LES/PUC-Rio
JSP – modificando propriedades de um Bean
• Formato
– <jsp:setProperty id="nome" property="propriedade"
value="valor"%>
• Propósito
– Permitir atribuir o valor de atributos de um Bean sem uma
chamada explícita ao método setXXX
© LES/PUC-Rio
JSP – modificando propriedades de um Bean
• Notas
– <jsp:setProperty id="umLivro" property="titulo"
value="Livro de JSP"%>
é equivalente a
<% umLivro.setTitulo("Livro de JSP"); %>
© LES/PUC-Rio
JSP – ação useBean (exemplo)
• Bean StringBean
© LES/PUC-Rio
JSP – ação useBean (exemplo)
• JSP que usa o Bean StringBean
© LES/PUC-Rio
JSP – ação useBean (exemplo)
• Saída
© LES/PUC-Rio
JSP – ação useBean
• É possível atribuir valores da requisição HTTP para um Bean
• Se a propriedade for uma String
– <jsp:setProperty ...
value='<%=request.getParameter("...")%>' %>
• Para fazer a conversão entre tipos, é preciso usar scriptlets
JSP
© LES/PUC-Rio
JSP – ação useBean (exemplo)
• Sem conversão explícita
© LES/PUC-Rio
JSP – ação useBean (exemplo)
• Com conversão explícita
© LES/PUC-Rio
JSP – ação useBean
• É possível compartilhar um Bean
• Usar o atributo escopo para fazê-lo
– <jsp:useBean id="..." class="..." scope="..."%>
• Permite que diversos Servlets e JSP acessem o Bean
• Também permite a criação condicional de um Bean
© LES/PUC-Rio
JSP – ação useBean (escopos)
• Page
– Escopo padrão. O Bean é colocado no objeto PageContext e só
pode ser acessado pela página que o cria
• Application
– O Bean é colocado no objeto ServletContext e pode, então, ser
compartilhado por todos os Servlets da aplicação
© LES/PUC-Rio
JSP – ação useBean (escopos)
• Session
– O Bean é colocado no objeto HttpSession associado à
requisição atual e pode ser acessado enquanto a sessão do
cliente com o servidor estiver ativa, por outras requisições
• Request
– O Bean é colocado no objeto HttpServletRequest e pode ser
acessado (getXXX) somente na requisição atual. Não se pode
atribuir o valor em um Bean (setXXX) neste escopo
© LES/PUC-Rio
Download