Your SlideShare is downloading. ×
0
JSP básico
Programa
1.   Minha Primeira Página JSP
2.   Sintaxe de JSP
3.   Ciclo de vida de página JSP
4.   Diretivas
5.   Ações
6. ...
Pré-requisitos
   Servlet




                 3
Minha primeira página
 JSP

Um simples contador
[http://exemplos.googlecode.com/svn/trunk/scwcd/jsp01/]
O que é JSP?
   JavaServer Page = JSP
   Tecnologia
   Combina HTML/XML e Java
   Objetivo: retornar conteúdo dinâmico...
contador.jsp
<html>
<body>
<%@ page language=quot;javaquot; %>
<%! int contador = 0; %>
<% contador++; %>

Esta é a requis...
Resultado
   Após algumas requisições...




                                  7
Sintaxe de JSP
Elementos de uma página JSP
   Diretiva
    <%@ diretivas %>
   Declaração
    <%! declaração em Java %>
   Scriptlet
 ...
<%@ diretiva %>
   Fornece informação geral acerca da página
    JSP
   Tipos: page, include, taglib
   <%@ page langua...
<%! declaração %>
   Declara e define variáveis e métodos
   <%! int contador = 0; %>
    Define a variável contador com...
<% scriptlets %>
   Código em Java embutido em página JSP
   <% contador = contador + 1; %>
    Adiciona um ao valor de ...
<%= expressão %>
   Representa expressão em Java
   <%= contador %>
    É substituído pelo valor da variável
   Uma exp...
<jsp:acao atributos />
   Comandos enviado para a máquina JSP
   <jsp:include page=“copyright.jsp” />
    Inclua a saída...
<%-- comentário --%>
   <%-- Confirmar com Fulano --%>
    Comentários não afetam a saída da página
   Observe a página ...
Ciclo de vida de página
JSP

   [jsp01.zip]
   [jsp02.zip]
Página JSP é um Servlet
   Toda página JSP é executada por um servlet
   Seqüência
       Máquina JSP gera arquivo Java...
Resumo
1.       JSP é convertida para Servlet
2.       Servlet é compilado
3.       Servlet é carregado
4.       Aguarda r...
Fases do ciclo de vida de página JSP
   Tradução
    Servlet correspondente é gerado da página JSP
   Compilação
    Ser...
Compilação
   Servlets gerados/compilados (Tomcat)
       %CATALINA_HOME%workCatalinalocalhost
   Executa compilador (r...
Contador “persistente”
   Problema
    O contador do primeiro exemplo (jsp01) não
    “guarda” os valores entre execuções...
contador.jsp (jsp02) (parte 1/6)
 “Esqueleto”
<html>
<body>
<%-- diretivas omitidas --%>
<%-- declarações omitidas --%>
<...
contador.jsp (jsp02) (parte 2/6)
   “Esqueleto” anterior sugere que precisamos:
       contador (declaração)
       Ini...
contador.jsp (jsp02) (parte 3/6)
public void jspInit() {
   try {
      ServletContext sc = getServletContext();
      con...
contador.jsp (jsp02) (parte 4/6)
public void sendInt(int v) throws Exception {
  FileOutputStream fos = new FileOutputStre...
contador.jsp (jsp02) (parte 5/6)
 Declaração resumida
<%!
int contador = 0;
String contadorArq = null;

// corpos dos mét...
contador.jsp (jsp02) (parte 6/6)
Diretivas omitidas
<%@ page language=quot;javaquot; %>
<%@ page import=quot;java.io.*quo...
Resultado após várias requisições
(jsp02)




     Este resultado foi obtido mesmo após várias interrupções
     e reiníci...
Diretivas
<%@ diretiva %>
   page (alguns atributos)
       import
       session
       errorPage
       isErrorPage
       l...
horacorrente.jsp (jsp03)
<html>
<body>
<%@ page language=quot;javaquot; %>
<%@ page import=quot;java.io.*quot; %>
<%@ page...
horacorrente.jsp (jsp04)
<html>
<body>
<%@ page language=quot;javaquot; %>
<%@ page import=quot;java.text.*quot; %>
<%@ pa...
Resultado [jsp04.zip]




                        33
Mais duas diretivas (jsp05)
   excecao.jsp
<%@ page errorPage=quot;DivisaoPorZero.jspquot; %>
<html><body>
<%= 4 / 0 %>
<...
Resultado (jsp05)




                    35
<%@ page info=“info” %> (jsp06)
<%@ page info=quot;Copyright (c) 2006 by Fábio Lucenaquot; %>
<html>
<body>
<%= getServlet...
Ações
Cabeçalho e rodapé
   Página JSP (pagina.jsp)
<html>
<body>
<jsp:include page=“/WEB-INF/jsp/cabecalho.jspquot; />

Este é...
Resultado (jsp07)




                    39
Variáveis implícitas
Variáveis implícitas
   application
       javax.servlet.ServletContext
   session
       javax.servlet.http.HttpSessi...
Exemplos [jsp08.zip]
   Identidades
       <%= application %>
       <%= getServletContext() %>
   Formas de se obter ...
Resultado [jsp08.zip]




                        Observe igualdades!




                                      43
+ 1 exemplo [jsp09.zip]
 endereco.jsp
<html>
<body>
A requisição desta página partiu do
endereço IP <%= request.getRemote...
Forward/include [jsp10.zip]
   Problema
       Aplicação que responde por default em /jsp10
        (index.jsp)
       ...
index.jsp [jsp10.zip]
<html>
<body>
<h3>index.jsp</h3>
<ul>
<li><a href=quot;pagina.jsp?use=includequot;>Include</a>
<li><...
pagina.jsp [jsp10.zip]
<html>
<body>
<h3>pagina.jsp</h3>
<% if (request.getParameter(quot;usequot;) == null) {
       page...
arg.jsp [jsp10.zip]
<html>
<body>
<h3>arg.jsp</h3>
<ul>
<li><a href=quot;pagina.jsp?use=includequot;>Include</a>
<li><a hr...
inclusao.jsp [jsp10.zip]
<%@ page import=quot;java.util.Datequot; %>
Inclui informações ao que já está sendo
  gerado.
<br...
redireciona.jsp [jsp10.zip]
<html>
<body>
<h3>redirecionada.jsp</h3>
Vá para <a href=quot;pagina.jspquot;>pagina.jsp</a>.
...
Configuração de uma
página JSP
Parâmetros (web.xml) [jsp11.zip]
<servlet>
  <servlet-name>Jsp11Exemplo</servlet-name>
  <jsp-file>/WEB-INF/jsp/jsp11.jsp<...
jsp11.jsp [jsp11.zip]
<html>
<body>
<b>Nome:</b> <%= getServletName() %>
<br><b>Cor</b>: <%= config.getInitParameter(quot;...
Resultado (jsp11)




                    54
Upcoming SlideShare
Loading in...5
×

jsp-intro

4,782

Published on

Introdução a JSP

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
4,782
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
268
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "jsp-intro"

  1. 1. JSP básico
  2. 2. Programa 1. Minha Primeira Página JSP 2. Sintaxe de JSP 3. Ciclo de vida de página JSP 4. Diretivas 5. Ações 6. Variáveis implícitas 7. Configuração de uma página JSP 2
  3. 3. Pré-requisitos  Servlet 3
  4. 4. Minha primeira página JSP Um simples contador [http://exemplos.googlecode.com/svn/trunk/scwcd/jsp01/]
  5. 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 5
  6. 6. contador.jsp <html> <body> <%@ page language=quot;javaquot; %> <%! int contador = 0; %> <% contador++; %> Esta é a requisição de número <%= contador %> que está sendo atendida. </body> </html> 6
  7. 7. Resultado  Após algumas requisições... 7
  8. 8. Sintaxe de JSP
  9. 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 --%> 9
  10. 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 10
  11. 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(). 11
  12. 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. 12
  13. 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 13
  14. 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 14
  15. 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 15
  16. 16. Ciclo de vida de página JSP [jsp01.zip] [jsp02.zip]
  17. 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 17
  18. 18. Resumo 1. JSP é convertida para Servlet 2. Servlet é compilado 3. Servlet é carregado 4. 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. 18
  19. 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 19
  20. 20. Compilação  Servlets gerados/compilados (Tomcat)  %CATALINA_HOME%workCatalinalocalhost  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 20
  21. 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/] 21
  22. 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> 22
  23. 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 %> 23
  24. 24. contador.jsp (jsp02) (parte 3/6) public void jspInit() { try { ServletContext sc = getServletContext(); contadorArq = sc.getRealPath(quot;/WEB-INF/contador.dbquot;); if (!new File(contadorArq).exists()) sendInt(0); contador = getInt(); } catch (Exception e) { log(quot;Erro ao ler arquivo de contadorquot;, e); } } public void jspDestroy() { try { sendInt(contador); } catch (Exception e) { log(quot;Erro ao salvar arquivo de contadorquot;, e); } } 24
  25. 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; } 25
  26. 26. contador.jsp (jsp02) (parte 5/6)  Declaração resumida <%! int contador = 0; String contadorArq = null; // corpos dos métodos omitidos public void jspInit() {} public void jspDestroy() {} public void sendInt(int v) throws Exception {} public int getInt() throws Exception {} %> 26
  27. 27. contador.jsp (jsp02) (parte 6/6) Diretivas omitidas <%@ page language=quot;javaquot; %> <%@ page import=quot;java.io.*quot; %>  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++; %> 27
  28. 28. Resultado após várias requisições (jsp02) Este resultado foi obtido mesmo após várias interrupções e reinícios do Tomcat. 28
  29. 29. Diretivas
  30. 30. <%@ diretiva %>  page (alguns atributos)  import  session  errorPage  isErrorPage  language  extends  buffer  autoFlush  contentType  pageEncoding Vejamos exemplos de alguns deles... 30
  31. 31. horacorrente.jsp (jsp03) <html> <body> <%@ page language=quot;javaquot; %> <%@ page import=quot;java.io.*quot; %> <%@ page import=quot;java.text.*quot; %> <%@ page import=quot;java.util.*quot; %> <%! String data; %> <% Locale l = new Locale(quot;ptquot;, quot;BRquot;); 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/] 31
  32. 32. horacorrente.jsp (jsp04) <html> <body> <%@ page language=quot;javaquot; %> <%@ page import=quot;java.text.*quot; %> <%@ page import=quot;java.util.*quot; %> <%! DateFormat df = null; %> <%! public void jspInit() { Locale l = new Locale(quot;ptquot;, quot;BRquot;); 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/] 32
  33. 33. Resultado [jsp04.zip] 33
  34. 34. Mais duas diretivas (jsp05)  excecao.jsp <%@ page errorPage=quot;DivisaoPorZero.jspquot; %> <html><body> <%= 4 / 0 %> </body></html>  DivisaoPorZero.jsp (pode ter nome melhor: TrataExcecao.jsp) <%@ page isErrorPage=quot;truequot; %> <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/] 34
  35. 35. Resultado (jsp05) 35
  36. 36. <%@ page info=“info” %> (jsp06) <%@ page info=quot;Copyright (c) 2006 by Fábio Lucenaquot; %> <html> <body> <%= getServletInfo() %> </body> </html> [http://exemplos.googlecode.com/svn/trunk/scwcd/jsp06/] 36
  37. 37. Ações
  38. 38. Cabeçalho e rodapé  Página JSP (pagina.jsp) <html> <body> <jsp:include page=“/WEB-INF/jsp/cabecalho.jspquot; /> Este é o corpo da minha página. <br>Cabeçalho e rodapé padronizados. <jsp:include page=quot;/WEB-INF/jsp/rodape.jspquot; /> </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/] 38
  39. 39. Resultado (jsp07) 39
  40. 40. Variáveis implícitas
  41. 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 41
  42. 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() %> 42
  43. 43. Resultado [jsp08.zip] Observe igualdades! 43
  44. 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 44
  45. 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. 45
  46. 46. index.jsp [jsp10.zip] <html> <body> <h3>index.jsp</h3> <ul> <li><a href=quot;pagina.jsp?use=includequot;>Include</a> <li><a href=quot;pagina.jsp?use=forwardquot;>Forward</a> <li><a href=quot;pagina.jspquot;>pagina.jsp</a> </ul> </body> </html> 46
  47. 47. pagina.jsp [jsp10.zip] <html> <body> <h3>pagina.jsp</h3> <% if (request.getParameter(quot;usequot;) == null) { pageContext.forward(quot;arg.jspquot;); return; } if (request.getParameter(quot;usequot;).equals(quot;includequot;)) pageContext.include(quot;inclusao.jspquot;); else pageContext.forward(quot;redireciona.jspquot;); %> </body> </html> 47
  48. 48. arg.jsp [jsp10.zip] <html> <body> <h3>arg.jsp</h3> <ul> <li><a href=quot;pagina.jsp?use=includequot;>Include</a> <li><a href=quot;pagina.jsp?use=forwardquot;>Forward</a> </ul> </body> </html> 48
  49. 49. inclusao.jsp [jsp10.zip] <%@ page import=quot;java.util.Datequot; %> Inclui informações ao que já está sendo gerado. <br>Gerado em <%= new Date() %> <br>Vá para <a href=quot;pagina.jspquot;>pagina.jsp</a>. 49
  50. 50. redireciona.jsp [jsp10.zip] <html> <body> <h3>redirecionada.jsp</h3> Vá para <a href=quot;pagina.jspquot;>pagina.jsp</a>. </body> </html> 50
  51. 51. Configuração de uma página JSP
  52. 52. Parâmetros (web.xml) [jsp11.zip] <servlet> <servlet-name>Jsp11Exemplo</servlet-name> <jsp-file>/WEB-INF/jsp/jsp11.jsp</jsp-file> Em vez de servlet-class <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> Referência não é WEB-INF/classes 52
  53. 53. jsp11.jsp [jsp11.zip] <html> <body> <b>Nome:</b> <%= getServletName() %> <br><b>Cor</b>: <%= config.getInitParameter(quot;corquot;) %> <br><b>Estado</b>: <%= config.getInitParameter(quot;estadoquot;) %> </body> </html> 53
  54. 54. Resultado (jsp11) 54
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×