Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivos
Aprender o que so JavaBeans e como podem ser usados em pginas JSPs Aprender a usar a JSTL Aprender a usar e EL
Usando beans
JavaBeans so objetos escritos de acordo com um determinado padro que permite trat-los como componentes de um framework
timos para separar os detalhes de implementao de uma aplicao de seus servios Permitem encapsular dados recebidos de outras partes da aplicao e torn-los disponveis para alterao e leitura atravs de uma interface uniforme.
Podem ser usados com JSP para remover grande parte do cdigo Java de uma pgina JSP
Para que um bean possa ser usado por uma aplicao JSP, ele deve estar compilado e localizado dentro do CLASSPATH reconhecido pelo servidor
Para incluir:
<jsp:useBean id="nome_da_referncia class="pacote.NomeDaClasse scope="page|session|request|application"/>
O atributo de escopo opcional e indica o tempo de vida do Java Bean. Se omitido, ser page, que o limita pgina
Com escopo de request, o bean pode ser recuperado com outra instruo <jsp:useBean> que esteja em outra pgina que receber amesma requisio (via dispatcher) Com escopo de session, o bean recupervel em pginas usadas pelo mesmo cliente, desde que <%@page> no tenha session=false
O nome do bean (atributo id) comporta-se como uma referncia a um objeto Java Incluir o tag
<jsp:useBean id="bean" class="bean.HelloBean" scope="request" />
Propriedades
JavaBeans possuem propriedades que podem ser somenteleitura ou leitura-alterao. O nome da propriedade sempre derivada do nome do mtodo getXXX():
public class Bean { private String mensagem; public void setTexto(String x) { mensagem = x; } public String getTexto() { return mensagem; } }
Propriedades
que equivale a <%=bean.getPropriedade() %> Observe que o nome do bean passado atravs do atributo name, que corresponde ao atributo id em <jsp:useBean> Valores so convertidos de e para String automaticamente Parmetros HTTP com mesmo nome que as propriedades tm valores passados automaticamente com <jsp:setProperty>
Se no tiverem, pode-se usar atributo param de <jsp:setProperty> <jsp:setProperty ... property="*"/> l todos os parmetros
Inicializao de beans
A tag <jsp:useBean> simplesmente cria um bean chamando seu construtor. Para inicializ-lo, preciso chamar seus mtodos setXXX() ou usar <jsp:setProperty> aps a definio
<jsp:useBean id="bean" class="bean.HelloBean" /> <jsp:setProperty name="bean" property="prop" value="valor"/>
Se um bean j existe, porm, geralmente no se deseja inicializ-lo. Neste caso, a inicializao pode ser feita dentro do marcador <jsp:useBean> e o sistema s a executar se o bean for novo (sej existir, o cdigo ser ignorado)
<jsp:useBean id="bean" class="bean.HelloBean" /> <jsp:setProperty name="bean" property="prop" value="valor"/> </jsp:useBean>
ou
<jsp:useBean id="bean" class="bean.HelloBean" /> <% bean.setProp(valor); %> </jsp:useBean>
Condicionais e iteraes
No possvel usar beans para remover de pginas Web o cdigo Java de expresses condicionais e iteraes como for do-while e while
Beans, porm, podem ser usados dentro de iteraes e condicionais, e ter seus valores alterados a cada repetio ou condio
<jsp:useBean id="mBean" class="MessageBean" scope="session" /> <% MessageBean[] messages = MessagesCollection.getAll(); for (int i = messages.length -1; i >= 0; i--) { mBean = messages[i]; %> <tr><td><jsp:getProperty name="mBean" property="time"/></td> <td><%=mBean.getHost()%></td> <td><%=mBean.getMessage()%></td></tr> <% } %>
Matando beans
Beans so sempre gravados em algum objeto de escopo: page, request, session ou application
Persistem at que o escopo termine ou expirem devido a um timeout (no caso de sesses)
Para se livrar de beans persistentes, use os mtodos removeAttribute(), disponveis para cada objeto de escopo:
session.removeAttribute(bean); application.removeAttribute(bean); request.removeAttribute(bean);
Composite View
Algumas partes so altamente dinmicas, mudando frequentemente at na estrutura interna Outras partes mudam apenas o contedo Outras partes sequer mudam o contedo
Composite View
O padro de projeto Composite View sugere que tais pginas sejam separadas em blocos menores, que possam ser alterados individualmente e compostos durante a publicao (deployment) ou exibio JSP oferece duas solues para obter esse efeito
Usando incluso esttica (no momento da compilao do servlet) Usando incluso dinmica (no momento da requisio)
Incluso esttica
Mais eficiente: fragmentos so includos em nico servlet Indicada quando estrutura no muda com freqncia (contedo pode mudar)
Incluso dinmica
Mais lento: fragmentos no so includos no servlet mas carregados no momento da requisio Indicada para blocos cuja estrutura muda com freqncia
Implementada com <jsp:include page="fragmento"/> Pode-se passar parmetros em tempo de execuo usando <jsp:param> no seu interior
<!-- Texto principal --> <table> <tr><td> <jsp:include page="texto.jsp"> <jsp:param name="data" value="<%=new Date() %>"> </jsp:include> </td></tr> </table> <!-- Fim do texto principal -->
Repasse de requisies
Uma requisio pode ser repassada de uma pgina JSP para outra pgina ou servlet usando RequestDispatcher
<% RequestDispatcher rd = request.getRequestDispatcher("url"); rd.forward(request, response); %>
O mesmo efeito possvel sem usar scriptlets com a ao padro <jsp:forward> Assim como <jsp:include>, pode incluir parmetros recuperveis na pgina que receber a requisio usando request.getParameter() ou <jsp:getProperty> se houver bean
<% if (nome != null) { %> <jsp:forward page="segunda.jsp"> <jsp:param name="nome" value="<%=nome %>"> </jsp:forward> <% } %>
Baseado no Jakarta Taglibs (porm bem menor) Conjunto padro de tags bsicos (Core, XML, banco de dados e internacionalizao) Linguagem de expresses do JSP 1.3
Controle sobre dados sem precisar escrever scripts Estimula a separao da apresentao e lgica Estimula o investimento em solues MVC
1. Fazer o download da ltima verso do site da Sun 2. Copiar os JARs das bibliotecas desejadas para o diretrio WEBINF/lib/ da sua aplicao Web 3. Incluir em cada pgina que usa os tags:
<%@ taglib uri="uri_da_taglib" prefix="prefixo" %>
Internationalization library
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> Exemplo: <fmt:message key="..." />
SQL library
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> Exemplo: <sql:update>...</sql:update>
Function library
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> Exemplo: ${fn:length(...)}
Linguagem de expresses
Valores default
<tag value="${abc.def}" default="todos" />
Principais aes
Expresses condicionais
<c:choose>
<c:when test="${dia.hora == 13}"> <c:out value="${mensagemEspecial}" /> </c:when> <c:otherwise> <c:out value="${mensagemPadrao}" /> </c:otherwise> </c:choose>
Iterao
Reuso os tag files permitem uma melhor customizao de contedo, assim como o uso de nested tags. Compatibilidade com tag handlers Pginas JSP sem Scriptlet Desenvolvimento rpido Recompilao dinmica dos tag files suportada por alguns containers como tomcat 5.X
Tag Files
<%@tag description=Descrio da Tag" pageEncoding=Padro de codifficao bodycontent="empty | scriptless | tagdependent" dynamic-attributes=handlerDosAtributos" %> - similar a diretiva page das pginas JSP. <%@attribute name=NomeDoAtributo" required="true|flase type=TipoDoDado %> - descreve um atributo da tag, e se obrigatrio ou no. <jsp:doBody/> - representa o que definido entre a abertura e fechamento da tag.
Exerccios
1. Use um JavaBean Mensagem, com propriedades email e mensagem para implementar a aplicao de Mensagen da aula anterior
Substitua todas as chamadas de new Mensagem() por <jsp:useBean> no escopo da sesso Use Expresses para exibir os dados
2. Altere gravarMensagens para que use <jsp:forward> para despachar a requisio para uma pgina erro.jsp, caso o usurio deixe os campos do formulrio em branco, e para listarMensagens.jsp se tudo funcionar corretamente 3. Instalar tags do JSTL
4. Use os tags de lgica <if> e <forEach> para remover as expresses condicionais e iteraes das pginas da aplicao de mensagens
Exerccios
5. Substitua a pgina grava mensagem por um servlet que faa a mesma coisa
6. Escreva um custom tag simples <pcc:tabela> que receba um String como parmetro (texto) e imprima o String dentro de uma tabela HTML:
O tag <pec:tabela texto="Texto Recebido"/> deve produzir <table border="1"><tr><td>Texto Recebido</td></tr></table> Crie mais dois atributos que definam cor-de-fundo e cor-do-texto para a tabela e o texto.
7.Escreva uma segunda verso do tag acima que aceite o texto entre os tags <pec:tabela>Texto Recebido</pcc:tabela>