Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.

Post on 18-Apr-2015

106 views 1 download

Transcript of Desenvolvimento de Projetos e Aplicações Web cecafac@gmail.com.

Desenvolvimento de Projetos e Aplicações Web

cecafac@gmail.com

JSP

3

Conteúdo• Introdução• Arquitetura e funcionamento• Sintaxe• Elementos

4

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

5

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

6

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> &nbsp; </td>

<td width=250 align=right>

<h1>

<%System.out.println(“Hello, World!”); %>

</h1>

</td></tr>

</table></body></html>

7

Modelo de Requisições

<%@ 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> &nbsp; </td>

<td width=250 align=right> <h1>Hello, World!</h1>

</td></tr>

</table></body></html>

JSP EngineJSP Engine

RequestRequest

ResponseResponse

8

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

9

Mecanismo (Funcionamento)

Servidor Web

JSP foi modificado ?

JSP já traduzido em servlet ?

Executar o Servlet

Traduz JSP em Servlet

Compila o Servlet

Sim

Não

Sim

Não

Carrega o Servlet

GET, POST

HTTP RESPONSE

Sintaxe JSP

11

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

12

Elementos JSP

Elemento Tag

Diretivas <%@ ... %>

Declarações <%! ... %>

Expressões <%= ... %>

Scriptlets <% ... %>

Comentários <%-- ... --%>

Custom Tags <prefixo:elemento ... />

13

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 %>

14

Diretivas

• Utilizadas para enviar mensagens para o container JSP, afetando a estrutura do Servlet a ser gerado.

• Sintaxe:<%@ directiveType attribute= =“valor” %>

directiveType: {include, page e taglib}

• Include e Page

15

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.

16

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” %>

17

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

18

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

19

Diretivas – page• Atributos de <%@page attribute=“valor”%>

20

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.*” %>

21

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

22

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” %>

23

Taglibs - Exemplo

<%@ taglib uri=“http://www.company.com/tags”prefix=“public” %>

...

<public:loop>

....

</public:loop>

Scripting

25

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

26

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)];

} %>

27

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>

28

Scriptlets

• Fragmentos de código Java

• Sintaxe: <% ... %>• Exemplo:<%

for(int i=0; i<100; i++)

out.println(i);

%>

29

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); %>

30

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!"); }

31

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 a out.print(expressão),

portanto, expressão não pode terminar em ;

• Exemplo: <%= new Date() %>• Apenas uma expressão Java

32

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>

33

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,...

34

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

35

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()

36

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.

37

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

38

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

39

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

40

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 %>

<% } %>

41

Referências• Deitel, capítulo 27