jsp-intro
-
Upload
fabio-nogueira-de-lucena -
Category
Technology
-
view
4.755 -
download
0
description
Transcript of jsp-intro
![Page 1: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/1.jpg)
JSP básico
![Page 2: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/2.jpg)
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
![Page 3: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/3.jpg)
3
Pré-requisitos Servlet
![Page 4: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/4.jpg)
Minha primeira página JSP
Um simples contador[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp01/]
![Page 5: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/5.jpg)
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
![Page 6: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/6.jpg)
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>
![Page 7: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/7.jpg)
7
Resultado Após algumas requisições...
![Page 8: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/8.jpg)
Sintaxe de JSP
![Page 9: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/9.jpg)
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 --%>
![Page 10: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/10.jpg)
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
![Page 11: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/11.jpg)
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().
![Page 12: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/12.jpg)
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.
![Page 13: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/13.jpg)
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
![Page 14: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/14.jpg)
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
![Page 15: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/15.jpg)
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
![Page 16: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/16.jpg)
Ciclo de vida de página JSP
[jsp01.zip][jsp02.zip]
![Page 17: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/17.jpg)
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
![Page 18: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/18.jpg)
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.
![Page 19: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/19.jpg)
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
![Page 20: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/20.jpg)
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
![Page 21: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/21.jpg)
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/]
![Page 22: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/22.jpg)
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>
![Page 23: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/23.jpg)
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 %>
![Page 24: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/24.jpg)
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); }}
![Page 25: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/25.jpg)
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;
}
![Page 26: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/26.jpg)
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 {}%>
![Page 27: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/27.jpg)
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++; %>
![Page 28: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/28.jpg)
28
Resultado após várias requisições (jsp02)
Este resultado foi obtido mesmo após várias interrupçõese reinícios do Tomcat.
![Page 29: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/29.jpg)
Diretivas
![Page 30: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/30.jpg)
30
<%@ diretiva %> page (alguns atributos)
import session errorPage isErrorPage language extends buffer autoFlush contentType pageEncoding
Vejamos exemplos de alguns deles...
![Page 31: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/31.jpg)
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/]
![Page 32: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/32.jpg)
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/]
![Page 33: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/33.jpg)
33
Resultado [jsp04.zip]
![Page 34: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/34.jpg)
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/]
![Page 35: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/35.jpg)
35
Resultado (jsp05)
![Page 36: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/36.jpg)
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/]
![Page 37: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/37.jpg)
Ações
![Page 38: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/38.jpg)
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/]
![Page 39: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/39.jpg)
39
Resultado (jsp07)
![Page 40: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/40.jpg)
Variáveis implícitas
![Page 41: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/41.jpg)
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
![Page 42: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/42.jpg)
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() %>
![Page 43: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/43.jpg)
43
Resultado [jsp08.zip]
Observe igualdades!
![Page 44: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/44.jpg)
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
![Page 45: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/45.jpg)
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.
![Page 46: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/46.jpg)
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>
![Page 47: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/47.jpg)
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>
![Page 48: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/48.jpg)
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>
![Page 49: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/49.jpg)
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>.
![Page 50: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/50.jpg)
50
redireciona.jsp [jsp10.zip]
<html><body><h3>redirecionada.jsp</h3>Vá para <a href="pagina.jsp">pagina.jsp</a>.</body></html>
![Page 51: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/51.jpg)
Configuração de uma página JSP
![Page 52: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/52.jpg)
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
![Page 53: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/53.jpg)
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>
![Page 54: jsp-intro](https://reader033.fdocuments.net/reader033/viewer/2022060118/55893259d8b42ad7138b45d8/html5/thumbnails/54.jpg)
54
Resultado (jsp11)