Desenvolvimento de Projetos e Aplicações Web [email protected].

41
Desenvolvimento de Projetos e Aplicações Web [email protected]

Transcript of Desenvolvimento de Projetos e Aplicações Web [email protected].

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

Desenvolvimento de Projetos e Aplicações Web

[email protected]

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

JSP

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

3

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

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

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

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

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

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

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>

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

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

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

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

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

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

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

Sintaxe JSP

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

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

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

12

Elementos JSP

Elemento Tag

Diretivas <%@ ... %>

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

Expressões <%= ... %>

Scriptlets <% ... %>

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

Custom Tags <prefixo:elemento ... />

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

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

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

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

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

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.

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

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

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

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

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

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

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

19

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

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

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

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

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

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

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

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

23

Taglibs - Exemplo

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

...

<public:loop>

....

</public:loop>

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

Scripting

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

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

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

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

} %>

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

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>

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

28

Scriptlets

• Fragmentos de código Java

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

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

out.println(i);

%>

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

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

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

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

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

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

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

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>

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

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

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

<% } %>

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

41

Referências• Deitel, capítulo 27