Escolar Documentos
Profissional Documentos
Cultura Documentos
Problemas de servlets
Desvantagem se a maior parte do que tem que ser gerado texto ou cdigo HTML esttico Mistura as coisas: programador tem que ser bom Web Designer e se virar sem ferramentas de Web Design
JSP uma tecnologia padro, baseada em templates para servlets. O mecanismo que a traduz embutido no servidor. H vrias outras alternativas populares
Apache Cocoon XSP: baseado em XML (xml.apache.org/cocoon) Jakarta Velocity (jakarta.apache.org/velocity) WebMacro (www.webmacro.org)
Em um servidor que suporta JSP, processamento de JSP passa por uma camada adicional onde a pgina transformada (compilada) em um servlet Acesso via URL usa como localizador a prpria pgina
Exemplos de JSP
1. Mudar a extenso de um arquivo HTML para .jsp 2. Colocar o documento em um servidor que suporte JSP A compilao feita no primeiro acesso Nos acessos subseqentes, a requisio redirecionada ao servlet que foi gerado a partir da pgina
Transformado em um JSP, um arquivo HTML pode conter blocos de cdigo (scriptlets): <% ... %> e expresses <%= ... %>
Exemplo de JSP
Ciclo de vida
Verifica se o servlet correspondente pgina mais antigo que a pgina (ou se no existe) Se o servlet no existe ou mais antigo, a pgina JSP ser compilada para gerar novo servlet, em seguida, a requisio repassada ao servlet Se o servlet est atualizado, a requisio redirecionada para ele
Deste ponto em diante, o comportamento equivale ao ciclo de vida do servlet, mas os mtodos so diferentes
Se o servlet ainda no estiver na memria, ele instanciado, carregado e seu mtodo jspInit() chamado Para cada requisio, seu mtodo _jspService(req, res) chamado. Ele resultado da compilao do corpo da pgina JSP No fim da vida, o mtodo jspDestroy() chamado
Podem ser usados em documentos de texto (geralmente HTML ou XML) Todos so interpretados no servidor (jamais chegam ao browser)
<%@ ... %> <%! ... %> <%= ... %> <% ... %> <%-- ... --%> <jsp:ao ... /> <prefixo:elemento ... />
(a) diretivas
Contm informaes necessrias ao processamento da classe do servlet que gera a pgina JSP Sintaxe :
<%@ diretiva atrib1 atrib2 ... %>
Principais diretivas:
page: atributos relacionados pgina include: inclui outros arquivos na pgina taglib: declara biblioteca de custom tags usada no documento
<%@ page import="java.net.*, java.io.*" session="false" errorPage="/erro.jsp" %> <%@ include file="navbar.jsp" %>
Exemplos
session
Se true, aplicaes JSP podem manter sesses do usurio abertas usando HttpSession Se uma pgina declara session=false, ela no ter acesso a objetos gravados na sesso do usurio (objeto HttpSession) Se true, s um cliente poder acessar a pgina ao mesmo tempo
Se true, a pgina possui um objeto exception (Throwable) e pode extrair seus dados quando alvo de redirecionamento devido a erro. Possui tambm os dois atributos padro de pginas de erro. URL da pgina para o qual o controle ser redirecionado na ocorrncia de um erro ou exceo. Deve ser uma pgina com isErrorPage=true.
isThreadSafe
isErrorPage
errorPage
Pode-se redirecionar, criar um cookie ou modificar o tipo de dados gerado por uma pgina JSP em qualquer parte dela
Essas operaes so realizadas pelo browser e devem ser passadas atravs do cabealho de resposta do servidor Lembre-se que o cabealho termina ANTES que os dados comecem
O servidor JSP armazena os dados da resposta do servidor em um buffer (de 8kB, default) antes de enviar
Assim possvel montar o cabealho corretamente antes dos dados, e permitir que o programador escolha onde e quando definir informaes de cabealho O buffer pode ser redefinido por pgina (diretiva page buffer). Aumente-o se sua pgina for grande. autoFlush determina se dados sero enviados quando buffer encher ou se o programa lanar uma exceo.
(b) declaraes
Do acesso ao corpo da classe do servlet. Permitem a declarao de variveis e mtodos em uma pgina teis para declarar:
Variveis e mtodos de instncia (pertencentes ao servlet) variveis e mtodos estticos (pertencentes classe do servlet) Classes internas (estticas e de instncia), blocos static, etc. <%! declarao %>
Sintaxe
Exemplos
Ambos so opcionais teis para inicializar conexes, obter recursos via JNDI, ler parmetros de inicializao do web.xml, etc.
Inicializao da pgina (chamado uma vez, antes daprimeira requisio, aps o instanciamento do servlet)
<%! public void jspInit() { ... } %>
Expresses: Quando processadas, retornam um valor que inserido na pgina no lugar da expresso Sintaxe:
<%= expresso %>
Todos os valores resultantes das expresses so convertidos em String antes de serem redirecionados sada padro
Scriptlets: Blocos de cdigo que so executados sempre que uma pgina JSP processada Correspondem a insero de seqncias de instrues no mtodo _jspService() do servlet gerado Sintaxe:
<% instrues Java; %>
(e) comentrios
Pode-se tambm usar comentrios Java quando dentro de scriptlets, expresses ou declaraes:
<% cdigo JSP ... /* texto ou comandos Java ignorados pelo servidor */ ... mais cdigo %>
Sintaxe:
<jsp:nome_ao atrib1 atrib2 ... > <jsp:param name="xxx" value="yyy"/> ... </jsp:nome_ao>
Concatenao de vrias pginas em uma nica resposta <jsp:forward> e <jsp:include> Incluso de JavaBeans <jsp:useBean>, <jsp:setProperty> e <jsp:getProperty> Gerao de cdigo HTML para Applets <jsp:plugin>
Classes abstratas:
Classes concretas:
So variveis locais previamente inicializadas Disponveis nos blocos <% ... %> (scriptlets) de qualquerpgina (exceto session e exception que dependem de @page para serem ativados/desativados)
Objetos do servlet
Entrada e sada
Objetos contextuais
Controle de excees
exception
(a) page
Pode ser usada para chamar qualquer mtodo ou varivel do servlet ou superclasses
Tem acesso aos mtodos da interface javax.servlet.jsp.JspPage (ou HttpJspPage) Pode ter acesso a mais variveis e mtodos se estender alguma classe usando a diretiva @page extends: <%@ page extends="outra.Classe" %>
Exemplo:
<% HttpSession sessionCopy = page.getSession() %>
(b) config
Referncia para os parmetros de inicializao do servlet (se existirem) atravs de objeto ServletConfig Equivale a page.getServletConfig() Exemplo:
<% String user = config.getInitParameter("nome"); String pass = config.getInitParameter("pass"); %>
Parmetros de inicializao so fornecidos na instalao do servlet no servidor, atravs de <init-param> de <servlet> em web.xml. preciso declarar a pgina no web.xml
(c) request
Referncia para os dados de entrada enviados na requisio do cliente (no GET ou POST, por exemplo, em HTTP)
Usado para
Guardar e recuperar atributos que sero usadas enquanto durar a requisio (que pode durar mais de uma pgina) Recuperar parmetros passados pelo cliente (dados de um formulrio HTML, por exemplo) Recuperar cookies Descobrir o mtodo usado (GET, POST)
String method = request.getMethod();
(c) exemplos
URL no browser:
http://servidor/programa.jsp?nome=Fulano&id=5
Cookies
Cookie[] c = request.getCookies()
(d) response
um objeto do tipo javax.servlet.http.HttpServletResponse Definir o tipo dos dados retornados (default: text/thml) Criar cookies Cookie c = new Cookie("nome", "valor"); response.addCookie(c); Definir cabealhos de resposta Redirecionar response.sendRedirect("pagina2.html");
Usado para
(e) out
Representa o stream de sada da pgina (texto que compe o HTML que chegar ao cliente). instncia da classe javax.servlet.jsp.JspWriter (implementao de java.io.Writer) Equivalente a response.getWriter(); Principais mtodos
print() e println() - imprimem Unicode
(f) session
til para armazenar valores que devero permanecer durante a sesso (set/getAttribute())
(g) application
Instncia de javax.servlet.ServletContext
til para guardar valores que devem persistir pelo tempo que durar a aplicao (at que o servlet seja descarregado do servidor) Exemplo
(h) pageContext
getPage() - retorna page getRequest() - retorna request getResponse() - retorna response getOut() - retorna out getSession() - retorna session getServletConfig() - retorna config getServletContext() - retorna application getException() - retorna exception
A persistncia das informaes depende do escopo dos objetos onde elas esto disponveis Constantes da classe javax.servlet.jsp.PageContext identificam escopo de objetos
(i) exception
Exerccios
2. Escreva um JSP temperatura.jsp que imprima uma tabela HTML de converso Celsius-Fahrenheit entre -40 e 100 graus Celsius com incrementos de 10 em 10
A frmula F = 9/5 C + 32
3. Altere o exerccio anterior para que a pgina tambm apresente um campo de textos para entrada de temperatura em um formulrio que envie os dados com POST. Faa com que a prpria pgina JSP receba a mensagem
Identifique, no incio, o mtodo com request.getMethod() (retorna POST ou GET, em maisculas). Se o mtodo for POST, mostre, em vermelho, antes da exibio do formulrio, o texto: "x graus F = y graus C" onde x o valor digitado pelo usurio e y a resposta.
Exerccios
Escreva uma pgina JSP novaMensagem.jsp que mostre formulrio na tela com dois campos: email e mensagem. Escreva uma outra pgina gravarMensagem.jsp que receba parmetros: email e mensagem e grave esses dois parmetros na sesso do usurio. Faa com que a primeira pgina aponte para a segunda. Crie uma terceira pgina listarMensagens.jsp que mostre mensagens criadas at o momento. A pgina gravarMensagem.jsp mostre todas as mensagens da sesso como resposta, mas grave a mensagem em disco usando parmetro de inicializao do web.xml A pgina listarMensagens.jsp liste todas as mensagens em disco. Obs: garanta uma gravao thread-safe para os dados.