Linguagem de Programação para Web Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos) Prof. Mauro Lopes 1-31 28
Objetivos Dando continuidade aos estudos sobre JSP, apresentaremos os elementos básicos para a composição de uma página JSP (Java Server Page). Para escrever uma página JSP eficaz precisamos entender os elementos de diretiva, script e ação. Aqui abordaremos as diretivas de página e também os objetos implícitos que compõe uma página JSP! 2-28
Plano de Aula O que são diretivas? Tipos de diretivas Diretivas de página (page) Diretivas de inclusão (include) Diretivas de tag de biblioteca (taglib) Diretiva Page Diretiva Include Diretiva taglib Elementos de Script e Objetos Implícitos 3-28
O que são diretivas? Diretivas são mensagens ao JSP Container, contendo informações de como este precisa traduzir uma página JSP para um servlet correspondente; As diretivas tem a seguinte sintaxe: <%@ diretiva atributo= valor %> ou <%@ diretiva atributo= valor atributo= valor... %> Os espaços em branco depois da abertura <%@ e de %> antes do fechamento, são opcionais, mas são recomendados, para aumentar a legibilidade; O valor do atributo precisa estar entre aspas. 4-28
Tipos de Diretivas Há três tipos de Diretivas: Diretivas de Página (Page): Seu uso é básico dentro do conceito de diretiva. Diretivas de inclusão (Include): Coloca o conteúdo de um arquivo em outro. Não há limites para inclusões, podendo ter várias em uma mesma página. A diretiva se substitui pelo conteúdo indicado. Diretivas de tag de biblioteca (taglib): Se usarmos esta diretiva em uma página, um conjunto de tags personalizadas estará a sua disposição, que poderá ser usada num sistema de página à página. 5-28
Diretiva Page O que torna esta diretiva um pouco complicada é que ela possui onze atributos diferentes. Vamos conhecer cada um deles. Observe primeiro como é a sua sintaxe: <%@ page atributo1= valor1 atributo2= valor2 atributo3= valor3... %> ou <jsp:directive.page atributo1= valor1 atributo2= valor2 atributo3= valor3... />. Por possuir múltiplos atributos a linguagem JSP permite que se declare várias diretivas numa mesma página, porém o único atributo que pode ser repetido é o import, que veremos mais a diante. 6-28
Diretiva Page Atributos da Diretiva Page: Atributo Info Atributo Language Atributo ContentType Atributo Extends Atributo Import Atributo Session Atributo Buffer Atributo AutoFlush Atributo isthreadsafe Atributo errorpage Atributo iserrorpage 7-28
Atributo Info Usado para inserir informações sumarizadas da página, não havendo restrições ao seu tamanho. Exemplo: <%@ page info= Estudo sobre Diretivas JSP %> Valor padrão: NENHUM Atributo Language Usado, em geral, para especificar Java como a linguagem de criação de script para a página. Exemplo: <%@ page language= java %> Valor padrão: Java Diretiva Page 8-28
Atributo ContentType Este atributo indica qual o tipo MIME (Multipurpose Internet Mail Extensions) da resposta está sendo gerada pela JSP. Os tipos mais comuns são: text/plain, text/html, text/xml. Logo abaixo segue o exemplo usado como padrão para as JSPs. <%@ page contenttype= text/html %> Valor padrão: text/html;charset=isso-8859-1 Atributo Extends (cuidado!!!) Serve para indicar a super classe que será usada pelo container JSP no momento de tradução da página em uma Servlet Java. Exemplo: <%@ page extends= com.taglib.jsp.primeirapagina %> Valor padrão: NENHUM Diretiva Page 9-28
Atributo Import Com o atributo import, diferente do extends, é capaz de importar um conjunto de classes Java que poderão ser usadas nas páginas JSPs. Esta forma é mais econômica de se digitar código, sendo mais prático. Exemplo: <%@ page import= java.util.list %> Valor padrão: NENHUM Atributo Session Session é do tipo boolean, indica se a página está participando do gerenciamento de sessão. Por exemplo, se quisermos dizer que uma página é parte de uma sessão, utiliza-se a seguinte sintaxe: <%@ page session= true %> Valor padrão: true Diretiva Page 10-28
Diretiva Page Atributo Buffer Responsável por controlar a saída bufferizada para uma página JSP. Se for ajustado para none o conteúdo de uma JSP é passado instantaneamente à resposta HTTP. O tamanho do buffer é descrito em kilobytes. Exemplo: <%@ page buffer="12 %> ou <%@ page buffer= none %> Valor padrão: 8192 caracteres ou 8 Kb Atributo AutoFlush Também é responsável por controlar a saída buferizada, determinando o comportamento do container JSP quando o Buffer de saída já esta cheio (ação de forma automática). Neste caso é esvaziado o Buffer de saída e o conteúdo enviado para o servidor HTTP que envia para o Browser responsável pela solicitação. Abaixo sua sintaxe: <%@ page autoflush= true %> Valor padrão: true 11-28
Atributo isthreadsafe Quando uma página JSP é compilada em uma Servlet, ela deve ser capaz de atender a múltiplas solicitações. Para isso devemos utilizar o atributo isthreadsafe, caso contrário é necessário definí-lo como false. Exemplo: <%@ page isthreadsafe= false %> Valor padrão: true Atributo errorpage ErrorPage indica Define uma URL para o recurso para onde os uncaught Throwables devem ser enviados. Se você definir um JSP aqui, então este JSP terá um atributo iserrorpage= true na sua diretiva.container. Exemplo: <%@ page errorpage= /trabalho/paginas/erro.jsp %> Valor padrão: NENHUM Diretiva Page 12-28
Atributo iserrorpage Define se a página atual representa uma outra página de erro dos JSPs. O valor padrão é false, mas se for true, as páginas têm acesso ao objeto implícito exception (que é uma referência ao inconveniente Throwables). Se for false, o objeto implícito exception fica indisponível para o JSP. <%@ page iserrorpage= true %> Valor padrão: false Diretiva Page 13-28
Diretiva Include Coloca o conteúdo de um arquivo em outro. Não há limites para inclusões, podendo ter várias em uma mesma página. A diretiva se substitui pelo conteúdo indicado. A diretiva include é útil se voce tiver uma fonte comum que será usada por mais de uma página JSP. Em vez de repetir o mesmo código em cada página JSP, basta usar o include, evitando problemas de manutenção; Sua sintaxe é: <%@ include file= URLdoArquivo %> ou <jsp:directive.include file= URLdo Arquivo /> 14-28
Diretiva taglib Se usarmos esta diretiva em uma página, um conjunto de tags personalizadas estará a sua disposição, que poderá ser usada num sistema de página à página. Podendo ser declaradas, também, de duas formas: <%@ taglib uri= URLdaBibliotecadeTags prefix= PrefixodaTag %> ou <jsp:directive.taglib uri= URLdaBibliotecadeTags prefix= PrefixodaTag /> 15-28
Elementos de Script Uma página JSP pode ter três tipos de elementos: Elementos de Script que são inseridos diretamente no servlet. Diretivas que permitem a manipulação do código gerado como servlet. Ações que possibilitam o uso de outros componentes, como JavaBeans. 16-28
Elementos de Script Os elementos de script JSP que podem ser inseridos em uma página HTML são: Expressões que são avaliadas e inseridas na saída do servlet; Scriptlets, trechos de código inseridos no método _jspservice; Declarações inseridas fora dos métodos do servlet. 17-28
Elementos de Script DECLARAÇÕES: Bloco de código JAVA que define variáveis, constantes e métodos referentes a página. É definido entre os símbolos <%! e %>; Exemplo: <%! int numtimes=0; public String sayhello(string name) { return Hello +name+! ; } %> 18-28
Elementos de Script Scriptlets: Bloco de código JAVA que será executado durante a requisição à página; Trechos de código Java delimitados por <% e %> Podem acessar as variáveis pré-definidas Exemplo: <% for (int i=0; i<10; i++) %> out.println( <b> i= +i+ </b><br> ); 19-28
Expressões: Notação simples para scriptlets que serão avaliados e retornarão seus valores ao cliente; A expressão é avaliada, convertida para string e inserida na página. As expressões podem ser qualquer comando Java que retorne valor. Exemplo: <html> </html> Elementos de Script <body> <% int valor=10; %> <b>valor:</b> </body> <%=valor%> Scriptlet Expressão 20-28
Objetos Implícitos As páginas JSP oferecem, automaticamente, instâncias de objetos especiais que estão prontas para serem referenciadas; Os nomes dessas variáveis são padronizados e estas representam os objetos dos servlets; HTTPServletRequest request / HTTPServletResponse- response / PrintWriter out / HTTPSession - session, etc; Iremos abordar apenas os mais usados... 21-28
Encapsula todos os dados/metadados contidos numa requisição http; O que contém, basicamente, uma requisição http? URL requisitada Cookies Objetos Implícitos - Request Content Type (texto, XML, html, imagem...) Request Type (GET / Post) Parâmetros enviados de campos de formulários ou explícitamente na URL (após o símbolo '?') Exemplo de URL: http://domain.com?login=mauro&name= Mauro Lopes Parâmetros: login/mauro e name/mauro Lopes Métodos Principais: String getparameter (String paramname), Object getattribute (String attribname), void setattribute (String attribname, Object attrib) 22-28
Objetos Implícitos - Session Representa a sessão iniciada pelo usuário; Uma sessão é ativada no instante da primeira requisição de um usuário à aplicação; É terminada explicitamente pela aplicação, ou por timeout; Pode-se colocar objetos na sessão para persistir durante toda a navegação do usuário no site; O objeto não estará acessível se a página JSP não fizer parte da sessão uso da diretiva <%@ page session= false %>. Por default session=true Métodos Principais: Object getattribute (String attribname), void setattribute (String attribname, Object attrib); Esses objetos estarão disponíveis enquanto a sessão estiver ativa. 23-28
Objetos Implícitos - Application Guarda configurações da sua aplicação WEB, tais como: Context path, parâmetros de inicialização. Também pode armazenar atributos, os quais estarão disponíveis enquanto a aplicação estiver no ar. Para destruir estas variáveis devemos por exemplo, desligar o servidor Web; Métodos Principais: ServletContext getservletcontext(); Object getattribute (String attribname); void setattribute (String attribname, Object attrib); 24-28
Escopo dos Objetos A persistência das informações depende do escopo dos objetos onde elas estão disponíveis: Page: Acessível em toda a página JSP; Request: acessível durante toda uma requisição; Session: acessível durante toda uma sessão; Application: acessível enquanto a aplicação estiver rodando. 25-28
Perguntas Página do Professor Mauro: http://www.dai.ifma.edu.br/~mlcsilva 26-28
Próxima Aula... Integração entre JSP e Servlets 27-28
Referências Materiais avulsos da Internet e o Livro Java para a Web com Servlets, JSP e EJB, Budi Kurniawan, Rio de Janeiro - Editora Ciência Moderna, 807 páginas. 28-28