420 likes | 524 Views
Desenvolvimento de Projetos e Aplicações Web. cecafac@gmail.com. JSP. Conteúdo. Introdução Arquitetura e funcionamento Sintaxe Elementos. JavaServer Pages. Tecnologia Java para criação de aplicações Web com conteúdo dinâmico como HTML e XML
E N D
Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com
Conteúdo • Introdução • Arquitetura e funcionamento • Sintaxe • Elementos
JavaServer Pages • Tecnologia Java para criação de aplicações Web com conteúdo dinâmico como HTML e XML • JSP Permite separação de conteúdo dinâmico e estático • JSP Suporta scripting e tags
Arquitetura JavaServer Pages • Atua como a camada Web de acesso a aplicações n-tier • Utiliza o protocolo HTTP para comunicação com browsers • Requisições JSP são atendidas por servlets
Hello World <%@ page info="a hello world example" %> <html><head> <title>Hello, World</title> </head> <body bgcolor="#ffffff“ background="back.gif"> <table><tr><td width=150> </td> <td width=250 align=right> <h1> <%System.out.println(“Hello, World!”); %> </h1> </td></tr> </table></body></html>
Modelo de Requisições JSP Engine <%@ page info="a hello world example" %> <html><head><title>Hello, World</title></head> <body bgcolor="#ffffff“ background="back.gif"> <%@ include file="dukebanner.html" %> <table><tr><td width=150> </td> <td width=250 align=right> <h1>Hello, World!</h1> </td></tr> </table></body></html> Request Response
JSP Engine • O JSPEngine é um software para: • Atender requisições de páginas JSP • Transformar uma página JSP requisitada em um servlet • Executar o servlet para atender as requisições JSP correspondentes • Pode ser acoplado a um servidor web ou a um servidor de aplicações
JSP já traduzido em servlet ? Traduz JSP em Servlet JSP foi modificado ? Compila o Servlet Carrega o Servlet Executar o Servlet Mecanismo (Funcionamento) Servidor Web Não Sim GET, POST Sim Não HTTP RESPONSE
Elementos JSP • Tags especiais • Interpretados no servidor (não chegam ao browser) • Organizados em 4 grupos: • Comentários • Diretivas e Taglibs • Scripting Elements • Expressões, Declarações e Scriptlets • Ações
Comentários • Utilizados para comentar o código • Não são processados pelo container JSP • Sintaxe: <%-- Este é um comentário --%> <%//Este é outro comentário %>
Diretivas • Utilizadas para enviar mensagens para o container JSP, afetando a estrutura do Servlet a ser gerado. • Sintaxe: <%@ directiveTypeattribute= =“valor” %> directiveType: {include, page e taglib} • Include e Page
Diretivas – Include • Utilizado para incluir arquivos estáticos no documento JSP • Sintaxe JSP: • <%@ include file=“URL” %> • Exemplos • <%@ include file=“Reverso.jsp” %> • Topo, base, miolo, etc.
Diretivas – page • Utilizado para descrever inúmeros atributos que serão considerados durante a criação do Servlet, tais como • Importação de pacotes; • Tipo de conteúdo; • Retorno; • Etc. • Sintaxe JSP: • <%@ page attribute=“valor” %>
Diretivas – page • Define características válidas para toda a página JSP e qualquer trecho de página incluída com a diretiva @include • Pode ser usada mais de uma vez na mesma página
Diretivas – page • Cada opção só pode aparecer uma vez na página, exceção feita à opção import • Embora possa ser colocada em qualquer lugar da página, é recomendável colocá-la no início do arquivo JSP
Diretivas – page • Atributos de<%@page attribute=“valor”%>
import • Pacotes/classes que serão utilizados no JSP • Deve aparecer antes de referenciar a classe • Pode-se separar pacotes por vírgula ou utilizar a opção import várias vezes <%@ page import=“java.io.*, java.util.*” %>
session • session = true|false • Quando true, a página utilizará o recurso de sessão HTTP e um objeto implícito session deverá estar disponível para a página JSP • Quando false, a página não utilizará o recurso de sessão HTTP e qualquer referência ao objeto implícito session causará um erro em tempo de tradução
Tag Extensions • Permite criação de tags personalizadas • Cada tag deve possuir uma classe Java que implementa sua funcionalidade • Propósitos diversos: • Manipulação de XML; Acesso a BD; IO;... • Sintaxe: • <%@ taglib uri=“URIForLibrary” prefix=“tagPrefix” %>
Taglibs - Exemplo <%@ taglib uri=“http://www.company.com/tags”prefix=“public” %> ... <public:loop> .... </public:loop>
Elementos de Scripting • São fragmentos de código java inseridos em uma página JSP • Declarações de variáveis, blocos de códigos, etc • Subdividem-se em três categorias: • Expressões • Declarações • Scriptlets
Declarações • Declarar variáveis e métodos usados nos Scriptlets e expressões • Sintaxe: <%! ... %> • Exemplos: • <%! int i = 0; %> • <%! public String title() { return “A”;}; %> • <%! public final static String[] meses = • {"jan","fev","mar","abr","mai","jun"}; %> • <%! public static String getMesAtual() { • Calendar c = new GregorianCalendar(); • return meses[c.get(Calendar.MONTH)]; • } %>
Declarações – Exemplo <html><head><title>Declarações JSP </title></head> <BODY> <H1>Declarações JSP</H1> <%! private int contadorAcessos=0; %> <H2>Número de acessos a essa página desde reboot do server: <%= ++contadorAcessos %> </H2> </body></html>
Scriptlets • Fragmentos de código Java • Sintaxe: <% ... %> • Exemplo: <% for(int i=0; i<100; i++) out.println(i); %>
Scriptlets • Se quisermos que alguma saída apareça na página HTML resultante, devemos usar o out <% String queryData = request.getQueryString(); out.println(“Query String: " + queryData); %>
Scriptlets • O código dentro de um scriptlet é inserido na página exatamente como escrito e qualquer HTML estático antes ou depois de um scriptlet é convertido em comandos print • Por exemplo, o seguinte código contém texto e scriptlets: <% if (Math.random() < 0.5) { %> <B>Bom</B> dia! <% } else { %> <B>Mau</B> dia! <% } %> • Será convertido (no servlet) para: if (Math.random() < 0.5) { out.println("Have a <B>nice</B> day!"); } else { out.println("Have a <B>lousy</B> day!"); }
Expressões • Expressões enviadas diretamente ao output stream corrente • Insere o valor de um atributo ou chamada de método em página JSP • Sintaxe: <%= expressão %>(sem o ;) • Equivale aout.print(expressão), portanto, expressão não pode terminar em; • Exemplo: <%= new Date() %> • Apenas uma expressão Java
Exemplo <HTML> <BODY> <%// Isso é um scriptlet. // Note que a variável “hoje" // é declarada aqui e usada na expressão mais adiante out.println( “Data atual"); java.util.Date hoje = new java.util.Date(); %> <b>Olá, hoje é <%= hoje %></b> </BODY> </HTML>
Objetos implícitos • Objetos disponíveis nas páginas JSP sem a necessidade de declaração • Exceto session que depende de @page para ser ativado/desativado • Cada objeto implícito tem uma classe ou interface definida na API de Java • out, request, response, session,...
Objetos implícitos: request • Representa a requisição que causou a chamada do serviço • Disponibiliza informações sobre os parâmetros passados pela requisição: tipo (GET, POST); headers (cookies) • Objeto da classe HttpServletRequest
Objetos implícitos: request - Exemplos • URL no browser: http://servidor/programa.jsp?nome=Fulano&id=5 • Recuperação dos parâmetros no 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()
Objetos implícitos: response • Representa a resposta enviada à requisição que causou o serviço • Permite a atribuição de valores para o cabeçalho da resposta, criação de cookies, definição de parâmetros, etc.
Objetos implícitos: session • Sessão estabelecida entre o cliente e o servidor • Armazena informações que persistem por tempo determinado, podendo ser acessadas através de diversas páginas e requisições ao servidor
Objetos implícitos: session • A sessão tem uma relação direta com o browser, isto é, duas janelas de um browser compartilham a mesma sessão • A maneira como as sessões são mantidas depende do JSP Engine
Objetos implícitos: out • Output stream para escrita da resposta no cliente • Disponibiliza uma série de métodos para a escrita e controle do buffer de saída da página de resposta
Objetos implícitos:out • Equivalente a response.getWriter(); • Principais métodos • print()e println() • Os trechos de código abaixo são equivalentes <% for (int i = 0; i < 10; i++) { out.print("<p> Linha " + i); } %> OU <% for (int i = 0; i < 10; i++) { %> <p> Linha <%= i %> <% } %>
Referências • Deitel, capítulo 27