Você está na página 1de 33

JSP Java Server Pages

Problemas de servlets

Servlets foram o programador a embutir cdigo HTML dentro de cdigo Java

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

Uma soluo inteligente escrever um arquivo de template

O que so JavaServer Pages (JSP)


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)

Soluo do problema anterior usando templates JSP

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

A forma mais simples de criar documentos 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

Fazendo isto, a pgina ser transformada em um servlet


Transformado em um JSP, um arquivo HTML pode conter blocos de cdigo (scriptlets): <% ... %> e expresses <%= ... %>

Exemplo de JSP

Ciclo de vida

Quando uma requisio mapeada a uma pgina JSP, o container

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

Como funciona JSP

Sintaxe dos elementos JSP

Podem ser usados em documentos de texto (geralmente HTML ou XML) Todos so interpretados no servidor (jamais chegam ao browser)

diretivas: declaraes: expresses: scriptlets: comentrios: aes: custom tags:

<%@ ... %> <%! ... %> <%= ... %> <% ... %> <%-- ... --%> <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

(a) diretiva page

Atributos de <%@page ... %>


info="Texto informativo" language="java" contentType="text/html; charset=ISO-8859-1" extends="acme.FonteJsp" import="java.io.*, java.net.*" session="true" buffer="8kb" autoFlush="true" isThreadSafe="true" errorPage="/erros/404.jsp" isErrorPage= "false" default: nenhum (default) (default) default: nenhum default: java.lang (default) (default) (default) (default) default: nenhum (default)

Alguns atributos de @page

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

Atributos de @page: buffer e autoflush

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

(b) declaraes (mtodos especiais)

jspInit() e jspDestroy() permitem maior controle sobre o ciclo de vida do servlet


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() { ... } %>

Destruio da pgina (ocorre quando o servlet deixa a memria)


<%! public void jspDestroy() { ... } %>

(c) expresses e (d) scriptlets


Expresses: Quando processadas, retornam um valor que inserido na pgina no lugar da expresso Sintaxe:
<%= expresso %>

Equivale a out.print(expresso), portanto, no pode terminar em ponto-e-vrgula

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

Comentrios HTML <!-- --> no servem para comentar JSP


<!-- Texto ignorado pelo browser mas no pelo servidor. Tags so processados -->

Comentrios JSP: podem ser usados para comentar blocos JSP


<%-- Texto, cdigo Java, <HTML> ou tags <%JSP%> ignorados pelo servidor --%>

Pode-se tambm usar comentrios Java quando dentro de scriptlets, expresses ou declaraes:
<% cdigo JSP ... /* texto ou comandos Java ignorados pelo servidor */ ... mais cdigo %>

(f) aes padronizadas

Sintaxe:
<jsp:nome_ao atrib1 atrib2 ... > <jsp:param name="xxx" value="yyy"/> ... </jsp:nome_ao>

Permitem realizar operaes (e meta-operaes) externas ao servlet (tempo de execuo)

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>

(f) aes (exemplos)

API: Classes de suporte a JSP


Pacote javax.servlet.jsp Interfaces

JspPage HttpJspPage JspEngineInfo JspFactory JspWriter PageContext JspException JspTagException

Classes abstratas:

Classes concretas:

Objetos implcitos JSP


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

page config request response out session application pageContext

Entrada e sada

Objetos contextuais

Controle de excees

exception

(a) page

Referncia para o servlet gerado pela pgina

Equivale a "this" no servlet

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)

um objeto do tipo javax.servlet.http.HttpServletRequest

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

Recuperao dos parmetros no programa JSP:


<% String nome = request.getParameter("nome"); String idStr = request.getParameter("id"); int id = Integer.parseInt(idStr); %> <p>Bom dia <%=nome %>! (cod: <%=id %>

Cookies

Cookie[] c = request.getCookies()

(d) response

Referncia aos dados de sada enviados na resposta do servidor enviada ao cliente

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

Os trechos de cdigo abaixo so equivalentes

(f) session

Representa a sesso do usurio

O objeto uma instncia da classe javax.servlet.http.HttpSession

til para armazenar valores que devero permanecer durante a sesso (set/getAttribute())

(g) application

Representa o contexto ao qual a pgina pertence

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

Instncia de javax.servlet.jsp.PageContext Oferece acesso a todos os outros objetos implcitos. Mtodos:


getPage() - retorna page getRequest() - retorna request getResponse() - retorna response getOut() - retorna out getSession() - retorna session getServletConfig() - retorna config getServletContext() - retorna application getException() - retorna exception

Constri a pgina (mesma resposta) com informaes localizadas em outras URLs


pageContext.forward(String) - mesmo que ao <jsp:forward> pageContext.include(String) - mesmo que ao <jsp:include>

Escopo dos objetos


A persistncia das informaes depende do escopo dos objetos onde elas esto disponveis Constantes da classe javax.servlet.jsp.PageContext identificam escopo de objetos

pageContext PageContext.PAGE_SCOPE request PageContext.REQUEST_SCOPE session PageContext.SESSION_SCOPE application PageContext.APPLICATION_SCOPE

Mtodos de pageContext permitem setar ou buscar atributos em qualquer objeto de escopo:

setAttribute(nome, valor, escopo) getAttribute(nome, escopo)

(i) exception

No existe em todas as pginas - apenas em pginas designadas como pginas de erro


<%@ page isErrorPage="true" %>

Instncia de java.lang.Throwable Exemplo:


<h1>Ocoreu um erro!</h1> <p>A exceo <%= exception %> Detalhes: <hr> <% exception.printStackTrace(out); %>

Exerccios

1. Escreva um JSP data.jsp que imprima a data de hoje.

Use Calendar e GregorianCalendar

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

4. JSP simples usando objeto de sesso

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.

5. Altere o exerccio anterior fazendo com que

Você também pode gostar