LINGUAGEM DE
PROGRAMAÇÃO III
APLICAÇÕES WEB
ETIQUETAS
• Etiquetas constituem uma forma mais clara e mais poderosa
de se organizar código Java em JSPs
• A medida que lógicas de negócios se tornam complexas, passa
a ser crucial mover partes do código Java para blocos
gerenciáveis
• Não seria conveniente se simplesmente desenvolvessemos
todo o conteúdo de um SCRIPTLET, em um IDE java separado,
compilando-o lá, déssemos um nome especial a esse trecho
de código e tivéssemos nossa própria etiqueta especial na JSP,
especificando que o código JAVA associado a ela está na classe
TAL? É isso o que uma ETIQUETA faz.
ETIQUETAS
• O princípio de ETIQUETAS é o mesmo de etiquetas HTML
• O nome da etiqueta personalizada precisa ser associado a um
arquivo existente da classe JAVA, contendo o código JAVA que
toda instância dessa etiqueta precisará executar.
• Para fazer o mapeamento da etiqueta com a classe JAVA é
necessário usar um arquivo XML, chamado DESCRITOR DE TAG
• Cada etiqueta personalizada deverá pertencer a uma
BIBLIOTECA DE ETIQUETAS
ETIQUETAS
• Você pode ter várias bibliotecas de etiquetas
• CORPO DA ETIQUETA: é a parte na qual queremos realizar
operações tal como formatação
• Sintaxe:
<prefixo_biblioteca:nome_etiqueta
atributo1=“valor1” atributo2=“valor2” .... >
... Corpo ....
</prefixo_biblioteca:nome_etiqueta>
ETIQUETAS
• Passos para criar uma etiqueta personalizada:
1. Criar o arquivo JAVA que conterá o código Java para
a etiqueta. Não esquecer de criar um pacote.
2. Criar o Descritor de Biblioteca de Etiquetas (Tag Lib
Descriptor). Criar uma pasta chamada TLDS dentro
da pasta WEB-INF e colocar o arquivo ai.
3. Configurar o arquivo web.xml para o mapeamento da
biblioteca de tag
4. Usar a tag nas páginas JSP desejadas
ETIQUETAS
• Se comparar um SCRIPTLET com uma etiqueta
personalizada, você estará simplesmente movendo o
conteúdo do SCRIPTLET (linhas de código JAVA no
SCRIPTLET) para uma classe JAVA separada,
substituindo, na JSP, o SCRIPTLET por uma etiqueta
“personalizada” especial e concisa, especificando a
associação entre a etiqueta personalizada e sua classe
JAVA em um arquivo .TLD separado.
• A JSP parece mais limpa
ETIQUETAS
• Uma classe de etiqueta precisa sempre ESTENDER de
TAGSUPPORT
• DOSTARTTAG() e DOENDTAG(): métodos
chamados automaticamente pela estrutura quando o
servidor encontrar o inicio e o final da etiqueta
personalizada
• O código personalizado deve estar dentro de
DOSTARTTAG()
ETIQUETAS
• Se examinar a documentação da API de
TAGSUPPORT, você verá que ela tem um atributo
PROTECTED, chamado PAGECONTEXT, que
contém o mesmo objeto implícito PAGECONTEXT
disponível em uma JSP – a estrutura cuida de assegurar
que a TAGSUPPORT obtenha o mesmo
PAGECONTEXT em seu atributo
• GETOUT(): retorna um JSPWRITER que pode ser
usado para transferir HTML
ETIQUETAS
• SKY_BODY: é uma constante do tipo int definida na
interface TAG. Comunica ao chamador de
DOSTARTTAG() que a parte de avaliação do corpo da
etiqueta deve ser descartada, isto é, a etiqueta não tem
corpo.
• EXEMPLOS
CICLO DE VIDA
• Uma etiqueta pode conter uma etiqueta inicial, uma
etiqueta final e um corpo entre elas
• A maioria das etiquetas não precisa ter corpo
• TAGSUPPORT e BODYSUPPORT são classes de suporte
que fornecem implementação padrão para alguns dos
métodos obrigatórios
• BODYSUPPORT usado apenas quando a etiqueta tem
corpo
CICLO DE VIDA
• TAGSUPPORT e BODYSUPPORT implementam as
interfaces TAG, ITERATIONTAG e BODYTAG
• Quando estender uma classe para TAGSUPPORT ou
BODYSUPPORT lembre-se de que precisará
sobrescrever alguns métodos, como, por exemplo, o
DOSTARTTAG()
• Etiquetas de iteração: são usadas em um laço e devem
implementar ITERATIONTAG. Exemplo: processar o
conjunto resultante de uma consulta a banco
CICLO DE VIDA
• MÉTODOS IMPORTANTES:
1. DOSTARTTAG()
2. DOINITBODY()
3. DOAFTERBODY()
4. DOENDTAG()
5. RELEASE()
• Os métodos 1, 3 e 4 determinam quando descartar ou
chamar os métodos seguintes na sequencia. Retornam um
valor inteiro
• Esses cinco métodos devem ser chamados na sequencia
CICLO DE VIDA
• Sequencia de chamada
INTERFACE TAG
• Interface: TAG
• Método: doStartTag(0
• É chamado uma vez quando o inicio da etiqueta é
processado.
• É usado para inicializar a etiqueta e, geralmente, o
processamento completo da etiqueta (para etiquetas
sem corpo)
INTERFACE TAG
• Valores retornados:
• Tag.SKIP_BODY: o corpo da etiqueta deverá ser vazio e
será descartado
• Tag.EVAL_BODY_INCLUDE: o corpo da etiqueta deverá
estar presente e será avaliado
• BodyTag.EVAL_BODY_BUFFERED: o corpo da etiqueta
será colocado em uma memória temporária, podendo
ser processado mais tarde
INTERFACE BODYTAG
• Interface: BodyTag
• Método: doInitBody
• É chamado apenas para etiquetas com corpo
• É chamado uma vez após doStartTag(), mas antes do corpo
da etiqueta ser processado
• É usado para inicializar a etiqueta (além de doStartTag())
• Valor de retorno: void
INTERFACE INTERATIONTAG
• Interface: InterationTag
• Método: doAfterBody()
• É chamado apenas para etiquetas de iteração/corpo
• É chamado após o corpo da etiqueta ter sido
processado, mas antes de doEndTag()
INTERFACE INTERATIONTAG
• Valores retornados:
• InterationTag.EVAL_BODY_AGAIN: doAfterBody() deve
ser chamado mais uma vez
• Tag.SKIP_BODY: fim de processamento de corpo de
etiqueta
INTERFACE TAG
• Interface: Tag
• Método: doEndTag()
• É chamado uma vez quando o fim da etiqueta é
processado
• Valores retornados:
• Tag.EVAL_PAGE: avalia o restante da página
• Tag.SKIP_PAGE: descarta o restante da página após
esta estiqueta
INTERFACE TAG
• Interface: TAG
• Método: release()
• É chamado uma vez quando termina o processamento
da etiqueta
• É usado para liberar recursos não utilizados
ELEMENTOS DE AÇÃOE
JAVABEANS
• Elementos de ação são elementos JSP que parecem
com etiquetas HTML, tem um nome de etiqueta e uma
lista de pares, nome de atributo/valor
• O elemento de ação obtém a lista de pares, nome de
atributo/valor, e os passa adiante para uma classe
JAVA associada ao nome da etiqueta
• Cada elemento de ação tem um nome
ELEMENTOS DE AÇÃOE
JAVABEANS
• A especificação JAVA exige que cada elemento de ação
pertença a um grupo nomeado de elementos
• Etiquetas personalizadas são um tipo de elemento de
ação
• Um grupo nomeado de elementos é uma biblioteca de
etiquetas predefinidas
• Todos os elementos padrão devem começar com o
prefixo <jsp:
ELEMENTOS DE AÇÃOE
JAVABEANS
• Elementos de ação padrão:
• Representam o padrão, a rotina ou as ações mais
comumente usadas que uma JSP necessite realizar
• Não são etiquetas personalizadas
• Exemplos:
• <jsp:include page=“index.jsp”/>
• <jsp:forward page=“erro.jsp”/>
ELEMENTOS DE AÇÃOE
JAVABEANS
• <jsp:usebean>
• É uma etiqueta padrão predefinida que permite que
você especifique uma classe JAVA personalizada e
passe atributos a ela
• Tem comportamento similar ao de uma etiqueta
personalizada
• Um BEAN ou JAVABEANS é uma classe JAVA (pojo)
ELEMENTOS DE AÇÃOE
JAVABEANS
• Regras para a criação de uma classe JAVA BEAN:
• A classe deve ser public
• Deve fornecer um construtor padrão sem argumentos
• As propriedades dos beans devem ser manipuladas
separadamente (métodos set e get)
• Convenção de nome. Exemplo: dataAtual, horaAtual.
ELEMENTOS DE AÇÃOE
JAVABEANS
• Para invocar um bean na JSP, será necessário usar o
elemento de ação-padrão <jsp:useBean>
• Sintaxe:
• <jsp:useBean id=“nome_bean” class=“classe_bean”
scope=“escopo_bean”>
• Atributo: ID
• Significado: nome usado para identificar o objeto bean
na JSP. Deve ser único na JSP
ELEMENTOS DE AÇÃOE
JAVABEANS
• Atributo: CLASS
• Significado: nome totalmente qualificado da classe
bean, incluindo pacote
• Atributo: SCOPE
• Significado: escopo no qual um BEANS permanece
definido.
• VALORES DO ATRIBUTO SCOPE: page, request, session,
aplication
ELEMENTOS DE AÇÃOE
JAVABEANS
• PAGE: o bean estará em escopo somente na página JSP
• REQUEST: o bean estará em escopo nesta página, e
para qualquer página para a qual a solicitação seja
encaminhada
• SESSION: o bean estará em escopo na sessão atual
• APPLICATION: o bean estará em escopo em todo o
aplicativo Web
ELEMENTOS DE AÇÃOE
JAVABEANS
• <jsp:getProperty> e <jsp:setProperty>: usados para
acessar e alterar o bean (como em get e set na classe
java)
• Exemplo:
<jsp:useBean id=“datahorabean”
class=“br.com.Etiqueta.DataHoraAtualBe
an” scope=“page”/>
<jsp:getProperty name=“datahorabean”
property=“dataApenas”/>
<jsp:setProperty name=“datahorabean”
property=“dataApenas” value=“true”/>
ELEMENTOS DE AÇÃOE
JAVABEANS
• O servidor web substituirá a tag pelo valor da
propriedade em si, convertido para uma string.
• Name corresponde ao atributo ID do elemento (ambos
devem conter extamente o mesmo valor)
• Exemplo

JSPs Etiquetas

  • 1.
  • 2.
    ETIQUETAS • Etiquetas constituemuma forma mais clara e mais poderosa de se organizar código Java em JSPs • A medida que lógicas de negócios se tornam complexas, passa a ser crucial mover partes do código Java para blocos gerenciáveis • Não seria conveniente se simplesmente desenvolvessemos todo o conteúdo de um SCRIPTLET, em um IDE java separado, compilando-o lá, déssemos um nome especial a esse trecho de código e tivéssemos nossa própria etiqueta especial na JSP, especificando que o código JAVA associado a ela está na classe TAL? É isso o que uma ETIQUETA faz.
  • 3.
    ETIQUETAS • O princípiode ETIQUETAS é o mesmo de etiquetas HTML • O nome da etiqueta personalizada precisa ser associado a um arquivo existente da classe JAVA, contendo o código JAVA que toda instância dessa etiqueta precisará executar. • Para fazer o mapeamento da etiqueta com a classe JAVA é necessário usar um arquivo XML, chamado DESCRITOR DE TAG • Cada etiqueta personalizada deverá pertencer a uma BIBLIOTECA DE ETIQUETAS
  • 4.
    ETIQUETAS • Você podeter várias bibliotecas de etiquetas • CORPO DA ETIQUETA: é a parte na qual queremos realizar operações tal como formatação • Sintaxe: <prefixo_biblioteca:nome_etiqueta atributo1=“valor1” atributo2=“valor2” .... > ... Corpo .... </prefixo_biblioteca:nome_etiqueta>
  • 5.
    ETIQUETAS • Passos paracriar uma etiqueta personalizada: 1. Criar o arquivo JAVA que conterá o código Java para a etiqueta. Não esquecer de criar um pacote. 2. Criar o Descritor de Biblioteca de Etiquetas (Tag Lib Descriptor). Criar uma pasta chamada TLDS dentro da pasta WEB-INF e colocar o arquivo ai. 3. Configurar o arquivo web.xml para o mapeamento da biblioteca de tag 4. Usar a tag nas páginas JSP desejadas
  • 6.
    ETIQUETAS • Se compararum SCRIPTLET com uma etiqueta personalizada, você estará simplesmente movendo o conteúdo do SCRIPTLET (linhas de código JAVA no SCRIPTLET) para uma classe JAVA separada, substituindo, na JSP, o SCRIPTLET por uma etiqueta “personalizada” especial e concisa, especificando a associação entre a etiqueta personalizada e sua classe JAVA em um arquivo .TLD separado. • A JSP parece mais limpa
  • 7.
    ETIQUETAS • Uma classede etiqueta precisa sempre ESTENDER de TAGSUPPORT • DOSTARTTAG() e DOENDTAG(): métodos chamados automaticamente pela estrutura quando o servidor encontrar o inicio e o final da etiqueta personalizada • O código personalizado deve estar dentro de DOSTARTTAG()
  • 8.
    ETIQUETAS • Se examinara documentação da API de TAGSUPPORT, você verá que ela tem um atributo PROTECTED, chamado PAGECONTEXT, que contém o mesmo objeto implícito PAGECONTEXT disponível em uma JSP – a estrutura cuida de assegurar que a TAGSUPPORT obtenha o mesmo PAGECONTEXT em seu atributo • GETOUT(): retorna um JSPWRITER que pode ser usado para transferir HTML
  • 9.
    ETIQUETAS • SKY_BODY: éuma constante do tipo int definida na interface TAG. Comunica ao chamador de DOSTARTTAG() que a parte de avaliação do corpo da etiqueta deve ser descartada, isto é, a etiqueta não tem corpo. • EXEMPLOS
  • 10.
    CICLO DE VIDA •Uma etiqueta pode conter uma etiqueta inicial, uma etiqueta final e um corpo entre elas • A maioria das etiquetas não precisa ter corpo • TAGSUPPORT e BODYSUPPORT são classes de suporte que fornecem implementação padrão para alguns dos métodos obrigatórios • BODYSUPPORT usado apenas quando a etiqueta tem corpo
  • 11.
    CICLO DE VIDA •TAGSUPPORT e BODYSUPPORT implementam as interfaces TAG, ITERATIONTAG e BODYTAG • Quando estender uma classe para TAGSUPPORT ou BODYSUPPORT lembre-se de que precisará sobrescrever alguns métodos, como, por exemplo, o DOSTARTTAG() • Etiquetas de iteração: são usadas em um laço e devem implementar ITERATIONTAG. Exemplo: processar o conjunto resultante de uma consulta a banco
  • 12.
    CICLO DE VIDA •MÉTODOS IMPORTANTES: 1. DOSTARTTAG() 2. DOINITBODY() 3. DOAFTERBODY() 4. DOENDTAG() 5. RELEASE() • Os métodos 1, 3 e 4 determinam quando descartar ou chamar os métodos seguintes na sequencia. Retornam um valor inteiro • Esses cinco métodos devem ser chamados na sequencia
  • 13.
    CICLO DE VIDA •Sequencia de chamada
  • 14.
    INTERFACE TAG • Interface:TAG • Método: doStartTag(0 • É chamado uma vez quando o inicio da etiqueta é processado. • É usado para inicializar a etiqueta e, geralmente, o processamento completo da etiqueta (para etiquetas sem corpo)
  • 15.
    INTERFACE TAG • Valoresretornados: • Tag.SKIP_BODY: o corpo da etiqueta deverá ser vazio e será descartado • Tag.EVAL_BODY_INCLUDE: o corpo da etiqueta deverá estar presente e será avaliado • BodyTag.EVAL_BODY_BUFFERED: o corpo da etiqueta será colocado em uma memória temporária, podendo ser processado mais tarde
  • 16.
    INTERFACE BODYTAG • Interface:BodyTag • Método: doInitBody • É chamado apenas para etiquetas com corpo • É chamado uma vez após doStartTag(), mas antes do corpo da etiqueta ser processado • É usado para inicializar a etiqueta (além de doStartTag()) • Valor de retorno: void
  • 17.
    INTERFACE INTERATIONTAG • Interface:InterationTag • Método: doAfterBody() • É chamado apenas para etiquetas de iteração/corpo • É chamado após o corpo da etiqueta ter sido processado, mas antes de doEndTag()
  • 18.
    INTERFACE INTERATIONTAG • Valoresretornados: • InterationTag.EVAL_BODY_AGAIN: doAfterBody() deve ser chamado mais uma vez • Tag.SKIP_BODY: fim de processamento de corpo de etiqueta
  • 19.
    INTERFACE TAG • Interface:Tag • Método: doEndTag() • É chamado uma vez quando o fim da etiqueta é processado • Valores retornados: • Tag.EVAL_PAGE: avalia o restante da página • Tag.SKIP_PAGE: descarta o restante da página após esta estiqueta
  • 20.
    INTERFACE TAG • Interface:TAG • Método: release() • É chamado uma vez quando termina o processamento da etiqueta • É usado para liberar recursos não utilizados
  • 21.
    ELEMENTOS DE AÇÃOE JAVABEANS •Elementos de ação são elementos JSP que parecem com etiquetas HTML, tem um nome de etiqueta e uma lista de pares, nome de atributo/valor • O elemento de ação obtém a lista de pares, nome de atributo/valor, e os passa adiante para uma classe JAVA associada ao nome da etiqueta • Cada elemento de ação tem um nome
  • 22.
    ELEMENTOS DE AÇÃOE JAVABEANS •A especificação JAVA exige que cada elemento de ação pertença a um grupo nomeado de elementos • Etiquetas personalizadas são um tipo de elemento de ação • Um grupo nomeado de elementos é uma biblioteca de etiquetas predefinidas • Todos os elementos padrão devem começar com o prefixo <jsp:
  • 23.
    ELEMENTOS DE AÇÃOE JAVABEANS •Elementos de ação padrão: • Representam o padrão, a rotina ou as ações mais comumente usadas que uma JSP necessite realizar • Não são etiquetas personalizadas • Exemplos: • <jsp:include page=“index.jsp”/> • <jsp:forward page=“erro.jsp”/>
  • 24.
    ELEMENTOS DE AÇÃOE JAVABEANS •<jsp:usebean> • É uma etiqueta padrão predefinida que permite que você especifique uma classe JAVA personalizada e passe atributos a ela • Tem comportamento similar ao de uma etiqueta personalizada • Um BEAN ou JAVABEANS é uma classe JAVA (pojo)
  • 25.
    ELEMENTOS DE AÇÃOE JAVABEANS •Regras para a criação de uma classe JAVA BEAN: • A classe deve ser public • Deve fornecer um construtor padrão sem argumentos • As propriedades dos beans devem ser manipuladas separadamente (métodos set e get) • Convenção de nome. Exemplo: dataAtual, horaAtual.
  • 26.
    ELEMENTOS DE AÇÃOE JAVABEANS •Para invocar um bean na JSP, será necessário usar o elemento de ação-padrão <jsp:useBean> • Sintaxe: • <jsp:useBean id=“nome_bean” class=“classe_bean” scope=“escopo_bean”> • Atributo: ID • Significado: nome usado para identificar o objeto bean na JSP. Deve ser único na JSP
  • 27.
    ELEMENTOS DE AÇÃOE JAVABEANS •Atributo: CLASS • Significado: nome totalmente qualificado da classe bean, incluindo pacote • Atributo: SCOPE • Significado: escopo no qual um BEANS permanece definido. • VALORES DO ATRIBUTO SCOPE: page, request, session, aplication
  • 28.
    ELEMENTOS DE AÇÃOE JAVABEANS •PAGE: o bean estará em escopo somente na página JSP • REQUEST: o bean estará em escopo nesta página, e para qualquer página para a qual a solicitação seja encaminhada • SESSION: o bean estará em escopo na sessão atual • APPLICATION: o bean estará em escopo em todo o aplicativo Web
  • 29.
    ELEMENTOS DE AÇÃOE JAVABEANS •<jsp:getProperty> e <jsp:setProperty>: usados para acessar e alterar o bean (como em get e set na classe java) • Exemplo: <jsp:useBean id=“datahorabean” class=“br.com.Etiqueta.DataHoraAtualBe an” scope=“page”/> <jsp:getProperty name=“datahorabean” property=“dataApenas”/> <jsp:setProperty name=“datahorabean” property=“dataApenas” value=“true”/>
  • 30.
    ELEMENTOS DE AÇÃOE JAVABEANS •O servidor web substituirá a tag pelo valor da propriedade em si, convertido para uma string. • Name corresponde ao atributo ID do elemento (ambos devem conter extamente o mesmo valor) • Exemplo