jsp-intro
-
Upload
fabio-nogueira-de-lucena -
Category
Technology
-
view
4.755 -
download
0
description
Transcript of jsp-intro
JSP básico
2
Programa1. Minha Primeira Página JSP2. Sintaxe de JSP3. Ciclo de vida de página JSP4. Diretivas5. Ações6. Variáveis implícitas7. Configuração de uma página JSP
3
Pré-requisitos Servlet
Minha primeira página JSP
Um simples contador[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp01/]
5
O que é JSP? JavaServer Page = JSP Tecnologia Combina HTML/XML e Java Objetivo: retornar conteúdo dinâmico para
um cliente Não há JSP sem servlets
6
contador.jsp
<html><body><%@ page language="java" %><%! int contador = 0; %><% contador++; %>
Esta é a requisição de número <%= contador %> que está sendo atendida.</body></html>
7
Resultado Após algumas requisições...
Sintaxe de JSP
9
Elementos de uma página JSP Diretiva
<%@ diretivas %> Declaração
<%! declaração em Java %> Scriptlet
<% código em Java %> Expressão
<%= expressão em Java %> Ação
<jsp:acaoNome /> Comentário
<%-- Qualquer texto --%>
10
<%@ diretiva %> Fornece informação geral acerca da página
JSP Tipos: page, include, taglib <%@ page language=“java” %>
Informa que Java é usada como linguagem de script
<%@ include file=“copyright.html” %>Conteúdo do arquivo inserido na página corrente
<%@ taglib prefix=“teste” uri=“taglib.tld” %>Associa prefixo a uma biblioteca de tags
11
<%! declaração %> Declara e define variáveis e métodos <%! int contador = 0; %>
Define a variável contador com valor inicial 0 Isto é feito uma única vez por página O valor é mantido em chamadas posteriores <%! String str = “ Funciona mesmo! “;
String getStr() { return str.trim(); }%>Declara str e o método getStr().
12
<% scriptlets %> Código em Java embutido em página JSP <% contador = contador + 1; %>
Adiciona um ao valor de contador Toda vez que se tem acesso à página o
código em Java é executado <% out.print(“<html><body>”);
out.print(“Bem-vindo ao curso JSP”); out.print(“</body></html>”);%>Gera página HTML de boas-vindas ao curso.
13
<%= expressão %> Representa expressão em Java <%= contador %>
É substituído pelo valor da variável Uma expressão é avaliada toda vez que se
tem acesso à página <%= 28 %>
Valor 28 <%= 27.5 * salario / 100 %>
27.5% do salário <%= str.length() %>
Tamanho da string
14
<jsp:acao atributos /> Comandos enviado para a máquina JSP <jsp:include page=“copyright.jsp” />
Inclua a saída de copyright.jsp nesta página Forma geral
<jsp:acaoNome atributos /> Ações padrão
jsp:include jsp:forward jsp:useBean jsp:setProperty jsp:getProperty jsp:plugin
15
<%-- comentário --%> <%-- Confirmar com Fulano --%>
Comentários não afetam a saída da página Observe a página JSP abaixo...
<html><body><!-- Comentário em HTML --><%-- Comentário em JSP --%><h1>Funciona ambos</h1></body></html>Comentário em HTML e JSP podem coexistir em uma mesma página
Ciclo de vida de página JSP
[jsp01.zip][jsp02.zip]
17
Página JSP é um Servlet Toda página JSP é executada por um servlet Seqüência
Máquina JSP gera arquivo Java correspondente à página JSP (este arquivo é um Servlet)
Máquina JSP compila o Servlet gerado Máquina JSP carrega em memória o Servlet Máquina JSP executa o Servlet como qualquer
outro Saída é enviada para o cliente
18
Resumo
1. JSP é convertida para Servlet2. Servlet é compilado3. Servlet é carregado4. Aguarda requisição Em conseqüência,...
A primeira vez que uma página JSP é requisitada a resposta é “lenta”, comparada com as demais. Após a primeira vez,...
Máquina compara data de criação da página e do Servlet correspondente gerado. O processo é refeito apenas quando o fonte é mais recente.
19
Fases do ciclo de vida de página JSP Tradução
Servlet correspondente é gerado da página JSP Compilação
Servlet gerado é compilado Carga
Classe compilada é carregada Instanciação
Instância do Servlet é criada jspInit()
Método chamado antes de qualquer outro _jspService()
Método chamado para cada requisição jspDestroy()
Chamado quando contêiner decide remover Servlet
20
Compilação Servlets gerados/compilados (Tomcat)
%CATALINA_HOME%\work\Catalina\localhost Executa compilador (reduzir tempo de resposta)
http://localhost:8080/app/p.jsp?jsp_precompile=true
Parâmetros com prefixo jsp são reservados Prática
Antes de qualquer requisição a uma página JSP, logo após início do contêiner, verifique que não há arquivo gerado
Faça uso da URL ilustrada acima (verifique o resultado) Consulte o conteúdo do arquivo gerado pelo compilador sem
fazer requisições à página
21
Contador “persistente” Problema
O contador do primeiro exemplo (jsp01) não “guarda” os valores entre execuções da aplicação. Reescreva-o para persistir o valor do contador entre execuções distintas.
Solução Guardar o valor do contador em meio estável
(arquivo)
[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp02/]
22
contador.jsp (jsp02) (parte 1/6) “Esqueleto”<html><body><%-- diretivas omitidas --%><%-- declarações omitidas --%><%-- scriptlet omitido --%>Esta é a requisição de número <%= contador
%> que está sendo atendida.</body></html>
23
contador.jsp (jsp02) (parte 2/6) “Esqueleto” anterior sugere que precisamos:
contador (declaração) Iniciar este contador com valor armazenado em
arquivo. Caso seja a primeira vez então criar arquivo com valor 0 (jspInit()) Precisamos criar arquivo com valor fornecido Precisamos carregar valor de arquivo
Ao fechar o Servlet, enviar contador para arquivo (jspDestroy())
Todos os elementos acima podem ser colocados em uma <%! declaração %>
24
contador.jsp (jsp02) (parte 3/6)public void jspInit() {
try { ServletContext sc = getServletContext(); contadorArq = sc.getRealPath("/WEB-INF/contador.db"); if (!new File(contadorArq).exists()) sendInt(0);
contador = getInt();} catch (Exception e) { log("Erro ao ler arquivo de contador", e);}
}
public void jspDestroy() { try {
sendInt(contador); } catch (Exception e) {
log("Erro ao salvar arquivo de contador", e); }}
25
contador.jsp (jsp02) (parte 4/6) public void sendInt(int v) throws Exception {
FileOutputStream fos = new FileOutputStream(contadorArq);DataOutputStream dos = new DataOutputStream(fos);dos.writeInt(v);dos.close();
}
public int getInt() throws Exception {FileInputStream fis = new FileInputStream(contadorArq);DataInputStream dis = new DataInputStream(fis);contador = dis.readInt();dis.close();return contador;
}
26
contador.jsp (jsp02) (parte 5/6) Declaração resumida<%! int contador = 0; String contadorArq = null;
// corpos dos métodos omitidospublic void jspInit() {}public void jspDestroy() {} public void sendInt(int v) throws Exception {}public int getInt() throws Exception {}%>
27
contador.jsp (jsp02) (parte 6/6) Diretivas omitidas
<%@ page language="java" %><%@ page import="java.io.*" %>
Indicam que script será em Java Requisita a importação do pacote indicado
(serviços de I/O serão usados) Scriptlet omitido (executado a cada requisição)
<% contador++; %>
28
Resultado após várias requisições (jsp02)
Este resultado foi obtido mesmo após várias interrupçõese reinícios do Tomcat.
Diretivas
30
<%@ diretiva %> page (alguns atributos)
import session errorPage isErrorPage language extends buffer autoFlush contentType pageEncoding
Vejamos exemplos de alguns deles...
31
horacorrente.jsp (jsp03)<html><body><%@ page language="java" %><%@ page import="java.io.*" %><%@ page import="java.text.*" %><%@ page import="java.util.*" %><%! String data; %><%
Locale l = new Locale("pt", "BR");DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL, l);data = df.format(new Date());
%>Hora corrente no servidor: <%= data %>.</body></html>
O que está em azul é executado em toda requisição à página.Uma versão alternativa é ...
[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp03/]
32
horacorrente.jsp (jsp04)<html><body><%@ page language="java" %><%@ page import="java.text.*" %><%@ page import="java.util.*" %><%! DateFormat df = null; %><%! public void jspInit() {
Locale l = new Locale("pt", "BR"); df = DateFormat.getTimeInstance(DateFormat.FULL, l);
} %>Hora corrente no servidor: <%= df.format(new Date()) %>.</body></html>
Menos operações serão executadas para cada requisição.Há, por outro lado, memória ocupada pelo objeto DateFormat.
[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp04/]
33
Resultado [jsp04.zip]
34
Mais duas diretivas (jsp05) excecao.jsp<%@ page errorPage="DivisaoPorZero.jsp" %><html><body><%= 4 / 0 %></body></html> DivisaoPorZero.jsp (pode ter nome melhor:
TrataExcecao.jsp)<%@ page isErrorPage="true" %><html><body><h2>Não foi possível executar sua requisição.</h2>Exceção gerada em <%= new java.util.Date().toString() %><br><br><%= exception.getMessage() %></body></html>
exception é uma variável implícita, veremos mais adiante.
[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp05/]
35
Resultado (jsp05)
36
<%@ page info=“info” %> (jsp06)<%@ page info="Copyright (c) 2006 by Fábio Lucena" %><html><body><%= getServletInfo() %></body></html>
[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp06/]
Ações
38
Cabeçalho e rodapé Página JSP (pagina.jsp)<html><body><jsp:include page=“/WEB-INF/jsp/cabecalho.jsp" />
Este é o corpo da minha página.<br>Cabeçalho e rodapé padronizados.
<jsp:include page="/WEB-INF/jsp/rodape.jsp" /></body></html>
Página JSP (cabecalho.jsp)Cabeçalho<hr> Página JSP (rodape.jsp)<hr>Obtido em <%= new java.util.Date() %>
[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp07/]
39
Resultado (jsp07)
Variáveis implícitas
41
Variáveis implícitas application
javax.servlet.ServletContext session
javax.servlet.http.HttpSession request
javax.servlet.http.HttpServletRequest response
javax.servlet.http.HttpServletResponse out
javax.servlet.jsp.JspWriter (saída da página) page
java.lang.Object (instância do servlet referente à página) pageContext
javax.servlet.jsp.PageContext (ambiente da página) config
javax.servlet.ServletConfig exception
java.lang.Throwable
42
Exemplos [jsp08.zip] Identidades
<%= application %> <%= getServletContext() %>
Formas de se obter a sessão <%= session %> <%= request.getSession() %>
Servlet path (/vars.jsp) <%= request.getServletPath() %>
Servlet name <%= ((HttpServlet) page).getServletName() %>
43
Resultado [jsp08.zip]
Observe igualdades!
44
+ 1 exemplo [jsp09.zip] endereco.jsp
<html><body>A requisição desta página partiu do endereço IP <%= request.getRemoteAddr() %>.</body></html> Resultado
Se você estiver executando o tomcat localmente, provavelmente o endereço será 127.0.0.1
45
Forward/include [jsp10.zip] Problema
Aplicação que responde por default em /jsp10(index.jsp)
Uma página (pagina.jsp) deverá consultar o parâmetro “use”. Se o argumento é “include”, então inclua “inclusao.jsp”. Caso contrário, redirecione para “redireciona.jsp”. Se nenhum argumento é fornecido, então redirecione para arg.jsp.
46
index.jsp [jsp10.zip]<html><body><h3>index.jsp</h3><ul><li><a href="pagina.jsp?use=include">Include</a><li><a href="pagina.jsp?use=forward">Forward</a><li><a href="pagina.jsp">pagina.jsp</a></ul></body></html>
47
pagina.jsp [jsp10.zip]<html><body><h3>pagina.jsp</h3><% if (request.getParameter("use") == null) { pageContext.forward("arg.jsp"); return; } if (request.getParameter("use").equals("include")) pageContext.include("inclusao.jsp"); else pageContext.forward("redireciona.jsp");%></body></html>
48
arg.jsp [jsp10.zip]<html><body><h3>arg.jsp</h3><ul><li><a href="pagina.jsp?use=include">Include</a><li><a href="pagina.jsp?use=forward">Forward</a></ul></body></html>
49
inclusao.jsp [jsp10.zip]
<%@ page import="java.util.Date" %>Inclui informações ao que já está sendo
gerado.<br>Gerado em <%= new Date() %><br>Vá para <a href="pagina.jsp">pagina.jsp</a>.
50
redireciona.jsp [jsp10.zip]
<html><body><h3>redirecionada.jsp</h3>Vá para <a href="pagina.jsp">pagina.jsp</a>.</body></html>
Configuração de uma página JSP
52
Parâmetros (web.xml) [jsp11.zip]<servlet> <servlet-name>Jsp11Exemplo</servlet-name> <jsp-file>/WEB-INF/jsp/jsp11.jsp</jsp-file> <init-param> <param-name>cor</param-name> <param-value>azul</param-value> </init-param> <init-param> <param-name>estado</param-name> <param-value>Goiás</param-value> </init-param></servlet><servlet-mapping> <servlet-name>Jsp11Exemplo</servlet-name> <url-pattern>/</url-pattern></servlet-mapping>
Em vez de servlet-class
Referência não é WEB-INF/classes
53
jsp11.jsp [jsp11.zip]<html><body><b>Nome:</b> <%= getServletName() %><br><b>Cor</b>: <%= config.getInitParameter("cor") %><br><b>Estado</b>: <%= config.getInitParameter("estado") %></body></html>
54
Resultado (jsp11)