SlideShare ist ein Scribd-Unternehmen logo
1 von 54
Downloaden Sie, um offline zu lesen
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.   Variáveis implícitas
7.   Configuração de uma página JSP




                                      2
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 para
    um cliente
   Não há JSP sem servlets




                                                5
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
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
    <% código em Java %>
   Expressão
    <%= expressão em Java %>
   Ação
    <jsp:acaoNome />
   Comentário
    <%-- Qualquer texto --%>


                                9
<%@ 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
<%! 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
<% 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
<%= 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
<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
<%-- 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
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 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
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
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
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
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
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
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
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
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
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
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
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
Diretivas
<%@ diretiva %>
   page (alguns atributos)
       import
       session
       errorPage
       isErrorPage
       language
       extends
       buffer
       autoFlush
       contentType
       pageEncoding
                          Vejamos exemplos de alguns deles...


                                                            30
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
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
Resultado [jsp04.zip]




                        33
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
Resultado (jsp05)




                    35
<%@ 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
Ações
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
Resultado (jsp07)




                    39
Variáveis implícitas
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
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
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.getRemoteAddr() %>.
</body>
</html>
 Resultado
  Se você estiver executando o tomcat localmente,
  provavelmente o endereço será 127.0.0.1


                                                    44
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
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
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
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
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
redireciona.jsp [jsp10.zip]
<html>
<body>
<h3>redirecionada.jsp</h3>
Vá para <a href=quot;pagina.jspquot;>pagina.jsp</a>.
</body>
</html>




                                               50
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</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
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
Resultado (jsp11)




                    54

Weitere ähnliche Inhalte

Was ist angesagt?

Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...Professor Samuel Ribeiro
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoEduardo Mendes
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationMario Sergio
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...Professor Samuel Ribeiro
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTMario Sergio
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08Gilson Silva
 

Was ist angesagt? (20)

JSPs Introdução Parte 1
JSPs Introdução Parte 1JSPs Introdução Parte 1
JSPs Introdução Parte 1
 
Java Web 1 Introducao
Java Web 1 IntroducaoJava Web 1 Introducao
Java Web 1 Introducao
 
Tutorial +login+mvc
Tutorial +login+mvcTutorial +login+mvc
Tutorial +login+mvc
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuração
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...Introdução à programação para web com Java -  Módulo 01: Conexão com bamco de...
Introdução à programação para web com Java - Módulo 01: Conexão com bamco de...
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service REST
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 

Andere mochten auch

Andere mochten auch (6)

Apresentação JSF
Apresentação JSFApresentação JSF
Apresentação JSF
 
JSP: Etiquetas
JSP: EtiquetasJSP: Etiquetas
JSP: Etiquetas
 
JSP: Introdução Parte 1
JSP: Introdução Parte 1JSP: Introdução Parte 1
JSP: Introdução Parte 1
 
Análise Orientada a Objetos - Casos de Uso
Análise Orientada a Objetos - Casos de UsoAnálise Orientada a Objetos - Casos de Uso
Análise Orientada a Objetos - Casos de Uso
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de Uso
 
4. Liferay JSP Portlets
4. Liferay JSP Portlets4. Liferay JSP Portlets
4. Liferay JSP Portlets
 

Ähnlich wie Introdução básica ao programa JSP

Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
 
Trabalho ProgramaçãO Comercial Ii
Trabalho ProgramaçãO Comercial IiTrabalho ProgramaçãO Comercial Ii
Trabalho ProgramaçãO Comercial IiMateus Ramos Pereira
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusDenis L Presciliano
 
Revisao Geral
Revisao GeralRevisao Geral
Revisao GeralOscar
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6danielfcampos
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Marcelo Rodrigues
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
JSP - Expression Language
JSP - Expression LanguageJSP - Expression Language
JSP - Expression LanguageAntonio Passos
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlManuel Lemos
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
Servlet jsp tomcat 8
Servlet jsp tomcat 8Servlet jsp tomcat 8
Servlet jsp tomcat 8maxrosan
 

Ähnlich wie Introdução básica ao programa JSP (20)

Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
 
Trabalho ProgramaçãO Comercial Ii
Trabalho ProgramaçãO Comercial IiTrabalho ProgramaçãO Comercial Ii
Trabalho ProgramaçãO Comercial Ii
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta Cactus
 
Revisao Geral
Revisao GeralRevisao Geral
Revisao Geral
 
Visão Geral de EJB 3.0
Visão Geral de EJB 3.0Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
servlet-introducao
servlet-introducaoservlet-introducao
servlet-introducao
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
JSP - Expression Language
JSP - Expression LanguageJSP - Expression Language
JSP - Expression Language
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
Servlet jsp tomcat 8
Servlet jsp tomcat 8Servlet jsp tomcat 8
Servlet jsp tomcat 8
 
Http Servlet
Http ServletHttp Servlet
Http Servlet
 

Mehr von Fábio Nogueira de Lucena

Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Fábio Nogueira de Lucena
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoFábio Nogueira de Lucena
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Fábio Nogueira de Lucena
 

Mehr von Fábio Nogueira de Lucena (20)

CSS
CSSCSS
CSS
 
Fundamentos de Programação Front-End
Fundamentos de Programação Front-EndFundamentos de Programação Front-End
Fundamentos de Programação Front-End
 
JavaScript: Aprendendo a programar
JavaScript: Aprendendo a programarJavaScript: Aprendendo a programar
JavaScript: Aprendendo a programar
 
HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)
 
HTTP: Um Curso Básico
HTTP: Um Curso BásicoHTTP: Um Curso Básico
HTTP: Um Curso Básico
 
Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08
 
Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017
 
Arquétipos
ArquétiposArquétipos
Arquétipos
 
Introducao integracao
Introducao integracaoIntroducao integracao
Introducao integracao
 
Healthdb Visão Geral
Healthdb Visão GeralHealthdb Visão Geral
Healthdb Visão Geral
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógico
 
Arquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADAArquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADA
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Arquitetura software
Arquitetura softwareArquitetura software
Arquitetura software
 
Prontuário Eletrônico do Paciente
Prontuário Eletrônico do PacienteProntuário Eletrônico do Paciente
Prontuário Eletrônico do Paciente
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
 
Introducao
IntroducaoIntroducao
Introducao
 
Uml
UmlUml
Uml
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Orientação a Objetos (3)
Orientação a Objetos (3)Orientação a Objetos (3)
Orientação a Objetos (3)
 

Introdução básica ao programa JSP

  • 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
  • 4. 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 5
  • 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. Resultado  Após algumas requisições... 7
  • 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. <%@ 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. <%! 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. <% 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. <%= 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. <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. <%-- 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. 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 17
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 30. <%@ diretiva %>  page (alguns atributos)  import  session  errorPage  isErrorPage  language  extends  buffer  autoFlush  contentType  pageEncoding Vejamos exemplos de alguns deles... 30
  • 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. 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
  • 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
  • 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
  • 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
  • 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. 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. Resultado [jsp08.zip] Observe igualdades! 43
  • 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. 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. 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. 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
  • 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. redireciona.jsp [jsp10.zip] <html> <body> <h3>redirecionada.jsp</h3> Vá para <a href=quot;pagina.jspquot;>pagina.jsp</a>. </body> </html> 50
  • 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. 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