Desenvolvimento WEB I Camila Nunes [email protected] [email protected].

56
Desenvolvimento WEB I Camila Nunes [email protected] [email protected]

Transcript of Desenvolvimento WEB I Camila Nunes [email protected] [email protected].

Page 1: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

Desenvolvimento WEB I

Camila [email protected]

[email protected]

Page 2: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

2 © LES/PUC-Rio

Agenda

• Servlets

• JSP

Page 3: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

Servlets

Page 4: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

4 © LES/PUC-Rio

Fundamentos

• Alternativa Java para os scripts CGI

• Um Servlet é uma classe Java que extende as capacidades de servidores que suportam aplicações através do modelo request-response.

• Embora servlets possam ser utilizados para responder qualquer tipo de request, geralmente são usados em web servers. A tecnologia Java define uma classe para tratar este tipo de requisição (HttpServlet).

Page 5: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

Servlet x CGI Script

• Extensibilidade

– Java é orientada a objetos

– Servlets foram projetados para serem simples

– Arquitetura permite que os Servlets sejam facilmente estendidos

• Independência de plataforma

– São programas escritos em Java

• Performance

– São bem mais rápidos que programas CGI

– São carregados na memória apenas uma vez

– Executam pedidos concorrentemente

5 © LES/PUC-Rio

Page 6: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

6 © LES/PUC-Rio

A API de Servlet

• A API de Servlet é um conjunto de classes Java que define uma interface padrão entre o cliente web e o servidor web.

• java.lang.Object• |• +----javax.servlet.GenericServlet implements javax.servlet.Servlet• |• +----javax.servlet.http.HTTPServlet• |• +----br.com.puc.MeuServlet

Page 7: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

A interface Servlet

• javax.servlet.Servlet– destroy()

• Método chamado pelo container onde o servlet está sendo executado para indicar que o servlet terminou.

– getServletConfig()

• Método que retorna um objeto ServletConfig, que contém os parametros de inicializacao passados no arquivo web.xml 

– getServletInfo()

• Retorna informações sobre a aplicação, como autor, versão e copyright.

– init(ServletConfig config)

• Metodo chamado na inicialização do servlet.

– service(ServletRequest req, ServletResponse res) • Método que trata as requisições feitas a um servlet bem como a criação das respostas.

Page 8: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

A implementação para HTTP

• javax.servlet.http.HttpServlet

– Deve-se estender os 2 métodos abaixo para tratar requisições do tipo POST e GET.

• doGet

• doPost

Page 9: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

ServletWeb Browser

Servidor

BD

Arquitetura Básica

Page 10: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

10 © LES/PUC-Rio

Arquitetura Básica

browserHTTP

Servlet

NewClass5

NewClass

NewClass4NewClass6

NewClass7

NewClass2

NewClass3 NewClass8

NewClass9 NewClass10

Page 11: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

11 © LES/PUC-Rio

HttpServlet

• Tratador de requisições HTTP

• Trata métodos HTTP específicos:

– doGet(HttpServletRequest req, HttpServletResponse resp)

– doPost(HttpServletRequest req, HttpServletResponse resp)

• doGet e doPost são chamados pelo método service() da interface Servlet.

• Subclasses reescrevem os métodos doGet, doPost e podem reescrever os métodos init() e destroy()

Page 12: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

12 © LES/PUC-Rio

HttpServletRequest e HttpServletResponse

• Os métodos doGet(), doPost() recebem dois parâmetros:

– HttpServletRequest

• encapsula os parâmetros da requisição

– HttpServletResponse

• encapsula a resposta ao cliente

Page 13: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

13 © LES/PUC-Rio

HttpServletRequest

• Interface que encapsula a requisição feita pelo cliente através do protocolo HTTP

• Possui métodos que permitem recuperar os dados da requisição:

– cabeçalho

– dados de formulários ou parâmetros enviados

– informações sobre a sessão do cliente

Page 14: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

14 © LES/PUC-Rio

HttpServletRequest

• Alguns métodos definidos em HttpServletRequest

– Manipulação de Parâmetros

• java.util.Enumeration getParameterNames()

– Obtém listagem, contendo nomes de parâmetros da requisição

• java.lang.String[] getParameterValues(java.lang.String name)

– Obtém valores do parâmetro “name” da requisição

• java.lang.String getParameter(java.lang.String name)

– Obtém valor do parâmetro “name” da requisição

– Manipulação de Atributos

• void setAttribute( java.lang.String name, java.lang.Object)

– Coloca ou sobreescreve atributo no request identificado por “name”

• java.util.Enumeration getAttributesNames()

– Obtém listagem, contendo nomes de atributos da requisição

• java.lang.String getAttribute(java.lang.String name)

– Obtém valor do atributo “name” da requisição

Page 15: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

15 © LES/PUC-Rio

HttpServletResponse

• Interface que encapsula a resposta ao cliente

• Possui um método responsável por recuperar o canal de resposta com o cliente

– getWriter()• retorna um PrintWriter • Ex: PrintWriter out = response.getWriter();

out.println( “Escrevendo no cliente” );

• Também é possível configurar qual é o tipo dos dados que estão sendo enviados de volta ao cliente

– setContentType( String type )– Os tipos mais comuns são text/html, text/xml– O método setContentType deve ser chamado antes do método getWriter

Page 16: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

16 © LES/PUC-Rio

Hello World!

Hello World!

Page 17: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

17 © LES/PUC-Rio

Segundo Exemplo

Page 18: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

18 © LES/PUC-Rio

Gerenciamento de sessão (I)

• O protocolo HTTP é um protocolo sem estado

• Não é possível a princípio conhecer o estado do cliente anterior à uma requisição

• O gerenciamento de sessão provê uma maneira de identificar usuários através de várias requisições HTTPs e recuperar suas informações

– Dados do estado do cliente

• Para obter uma sessão:• HttpSession getSession()

– Obtém sessão existente, caso não exista retorna uma nova sessão. • HttpSession getSession(boolean create)

– Obtém sessão existente ou cria uma nova sessão dependendo do valor de o parâmetro create

• Funciona a base de cookie ou reescrita de URL

Page 19: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

19 © LES/PUC-Rio

Gerenciamento de sessão (II)

• Principais métodos

– Métodos para manipulação de objetos em sessão• void removeAttribute(java.lang.String name)

– Retira objeto da sessão

• void setAttribute(java.lang.String name, java.lang.Object value) – Coloca ou sobreescreve objeto na sessão identificado por name

• java.lang.Object getAttribute(java.lang.String name)– Obtém objeto da sessão

• java.util.Enumeration getAttributeNames() – Obtém os nomes de todos os objetos armazenados na sessão

Page 20: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

20 © LES/PUC-Rio

Gerenciamento de sessão (III)

• Tempo de duração da sessão

– As sessões em geral têm intervalo máximo de tempo que podem ficar inativas

– public int getMaxInactiveInterval()

– public void setMaxInactiveInterval(int interval)

• As sessões também podem ser encerradas explicitamente pelo programador:

– public void invalidate()

Page 21: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

21 © LES/PUC-Rio

Jakarta Tomcat

• Servidor gratuito baseado em java

• Configurável de maneira simples via XML

• Oferece suporte a Java (Servlets e JSP)

Page 22: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

22 © LES/PUC-Rio

Jakarta Tomcat

• Você irão precisar do Tomcat

– Pode ser gratuitamente obtido em http://www.apache.org

– Utilizem a versão 5.x ou superior

Page 23: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

23 © LES/PUC-Rio

Publicação de Servlets

• Imagine que você implementou um Servlet, gerou o .java e compilou para ter o .class.

• E agora? Como o Servlet é publicado no servidor?

• Na verdade, existe um local para colocar as classes de sua aplicação

Page 24: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

24 © LES/PUC-Rio

Configurando o Tomcat

• Onde colocar as classes dos Servlets?

– Primeiro, é preciso criar uma aplicação web

• Cria-se um diretório em %TOMCAT_HOME%\webapps\, sem

espaços no nome.

• Dentro desse diretório, cria-se a pasta WEB-INF

• Dentro de WEB-INF, criam-se 2 pastas: lib e classes

• Dentro de WEB-INF, cria-se o arquivo web.xml (deployment descriptor web)

Obs: TOMCAT_HOME é o nome do diretório aonde está sua instalação do TomCat

Page 25: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

25 © LES/PUC-Rio

Configurando o Tomcat

• O arquivo web.xml deverá ter conteúdo similar ao presente em %TOMCAT_HOME%webapps\ROOT\WEB-INF

– Trata-se de um arquivo já pronto, que servirá como base para a criação de nosso arquivo

Page 26: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

26 © LES/PUC-Rio

Configurando o Tomcat

• As classes são colocadas no diretório:

– %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEB-INF\classes

– A partir deste diretório devem ser colocadas em seus próprios pacotes

• As libs (arquivos .jar) devem ser colocadas no diretório:

– %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEB-INF\lib

Page 27: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

27 © LES/PUC-Rio

Configurando o Tomcat

• Registrando os Servlets

– Os servlets devem ser chamados com seu nome completo (pacotes e classe)

– Muitas vezes o nome se torna grande demais

– Pode-se então dar um nome ao servlet através do qual o servidor redirecionará a chamada à classe específica

Page 28: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

28 © LES/PUC-Rio

Configurando o Tomcat

• Registrando Servlets (1)

– O arquivo web.xml

• Localizado no diretório:– %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEB-INF

Page 29: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

29 © LES/PUC-Rio

Configurando o Tomcat

• Registrando Servlets (2)<web-app>

<servlet>

<servlet-name>ServletSes</servlet-name>

<servlet-class>interfPesquisa.ServletSes</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ServletSes</servlet-name>

<url-pattern>/exemplo</url-pattern>

<servlet-mapping>

</web-app>

Page 30: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

30 © LES/PUC-Rio

Configurando o Tomcat

• Agora, o servlet poderá ser acessado através da URL:

http://<host>:<porta>/DIRETÓRIO_APLICAÇÃO/exemplo

Page 31: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

31 © LES/PUC-Rio

Configurando o Tomcat

• Outras configurações

– O arquivo server.xml

• Localizado no diretório:

– %TOMCAT_HOME%\conf

– Configuração da porta do servidor:

<Connector className="org.apache.tomcat.service.SimpleTcpConnector">

<Parameter name="port" value="8081"/>

</Connector>

Page 32: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

Java Server Pages (JSP)

Page 33: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

33 © LES/PUC-Rio

O que é JSP

• JSP é uma tecnologia que permite combinar informações estáticas com informações geradas dinamicamente.

• Script executado no servidor:

– Combinação de sintaxe JSP e tags de marcação

– Tags estáticas

• HTML, XML

– Conteúdo dinâmico gerado pelo código do script

• Java

• Exemplo:

– <HTML><HEAD><TITLE>Primeiro JSP</TITLE></HEAD>

– <BODY><H1>Data e hora:

– <%= new java.util.Date() %></H1>

– </BODY></HTML>

Page 34: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

34 © LES/PUC-Rio

Escopo dos Atributos

• O JSP pode acessar objetos em tempo de execução em quatro escopos diferentes:– Página

• Objeto PageContext corrente (pageContext)

– Requisição• Objeto HttpServletRequest corrente (request)

– Sessão• Objeto HttpSession corrente (session)

– Aplicação• Objeto ServletContext corrente (servletContext)

• Para armazenar informações: setAttribute(String, Object)

• Para recuperar informações: getAttribute(String)

Page 35: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

35 © LES/PUC-Rio

Tags JSP

• Diretivas

– Configuração do processador JSP

– Inclusão estática de conteúdo

– Encaminhamento de requisições para outros servidores

• Comandos de script

– Inserção de código para a programação de conteúdo dinâmico

• Tags

– Tags de alto nível que encapsulam padrões de programação mais corriqueiros

Page 36: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

36 © LES/PUC-Rio

Diretivas

• <%@ nome-da-diretiva

[nome-atributo = “valor-do-atributo”]* %>

• Diretivas disponíveis:

– <%@ include file=“url-relativa” %>

– <%@ taglib uri=“url-relativa-da-biblioteca-de-tags” prefix=“prefixo-das-tags” %>

– <%@ page lista-de-atributos %>

Page 37: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

37 © LES/PUC-Rio

Atributos da Diretiva Page

• language=“nome-da-linguagem-de-script”

• info=“texto-informativo” - getServletInfo()

• session=“true | false”

• import=“lista-de-pacotes”

• errorPage=“url-página-de-erro”

• isErrorPage=“true | false”

• contentType=“mime-type | mime-type; charset=nome-charset”

• buffer=“none|tamanho-em-kb”

• auto-flush=“true | false”

• extends=“nome-da-classe-base”

• isThreadSafe=“true | false”

Page 38: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

38 © LES/PUC-Rio

Exemplos de Diretivas

• Diretiva Include

• Diretiva Taglib

Page 39: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

39 © LES/PUC-Rio

Exemplos de Diretivas

• Diretiva Page

• Ou

Page 40: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

40 © LES/PUC-Rio

Tags de Script

• Declarações

– <%! declaração %>

• Scriptlets

– <% comandos %>

• Expressões

– <%= expressão %>

• Comentários

– <!-- comentário html -->

– <%-- comentário jsp -->

Page 41: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

41 © LES/PUC-Rio

Declarações

• <%! declarações %>

Exemplos:

<%! int i = 0; public void metodo {...} %>

<%! int a, b, c; %>

<%! Circle a = new Circle(2.0); %> 

Declara variáveis ou métodos a serem utilizados no código JSP.

Page 42: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

42 © LES/PUC-Rio

Scriptlets

• <% fragmento_de_código_válido %>

Exemplo:

<% String name = null;if (request.getParameter(“nome") == null)

{ %>

<%@ include file="error.html" %><% }

else {

foo.setName(request.getParameter(“nome"));}

%>  

Um scriptlet pode conter qualquer número de instruções, variáveis, métodos, declarações ou expressões válidos.

Page 43: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

43 © LES/PUC-Rio

Expressão

• <%= expressão %>

Exemplo:

O mapa tem <font color="blue"><%= mapa.getCount() %></font> entradas.

Esta tag contém uma expressão que é avaliada e convertida para string, depois de processada.

Page 44: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

44 © LES/PUC-Rio

Comentários

• <!-- comentário [ <%= expressão %> ] -->

Exemplo:

<!-- Comentário --><!-- Esta página foi carregada em <%= (new java.util.Date()).toLocaleString() %> -->

 

O processador JSP trata um comentário como texto HTML não interpretado, retornando-o ao cliente.

Uma expressão pode ser incluída em um comentário, sendo avaliada e seu resultado é retornado ao usuário juntamente com o HTML de resposta.

Page 45: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

45 © LES/PUC-Rio

Comentários para Desenvolvimento

• <%-- comentário --%>

Exemplo:

<%@ page language="java" %>

<html><head><title>Um teste - comentário</title></head><body> <h2>Um teste - comentário</h2> <%-- Este comentário não estará disponível para o cliente --%></body></html>

O processador JSP simplesmente ignora este tipo de comentário e não processa nenhum código ou expressão contida entre os delimitadores.

Este tipo de comentário não será enviado para o cliente.

Page 46: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

46 © LES/PUC-Rio

Objetos Pré-Definidos

• Disponíveis para scriplets e expressões

– request

– response

– session

– out

– exception (somente em páginas de erro)

– page

Page 47: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

47 © LES/PUC-Rio

Exemplo JSP

Page 48: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

48 © LES/PUC-Rio

Tags

• jsp:useBean

• jsp:setProperty

• jsp:getProperty

• jsp:include

• jsp:forward

Page 49: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

49 © LES/PUC-Rio

jsp:useBean

• Cria ou recupera uma instância de um bean.

• <jsp:useBean lista_de_atributos>

• Principais atributos

– id: “nomeDaInstânciaDoBean”

– scope:”page|request|session|application”

– class: “*{pacotes}.NomeClasse”

• Exemplo:

Page 50: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

50 © LES/PUC-Rio

jsp:include e jsp:forward

• Ações utilizadas para o encadeamento de páginas jsp.

• <jsp:include page=“url-relativa-da-página” />

– suspende o processamento da página chamadora;

– repassa o controle para a página chamada até que o retorne.

• <jsp:forward page=“url-relativa-da-página” />

– o processamento da página chamadora é terminado;

– controle repassado sem espera de retorno para a página chamada.

Page 51: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

51 © LES/PUC-Rio

jsp:include

• <jsp:include page="{URLrelativa |<%=expressão%>}"/>

Exemplo:

Page 52: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

52 © LES/PUC-Rio

jsp:forward

• <jsp:forward page="{URLrelativa|<%=expressão%>}"/>

Exemplo:

A tag <jsp:forward> repassa o objeto request enviado para o arquivo JSP para que seja processado por outra aplicação.

O processador JSP não executa o restante das instruções contidas após a tag.

Page 53: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

53 © LES/PUC-Rio

JSP Standard Tag Library

• A JSTL encapsula tarefas comumente encontradas em aplicações web (iteração, manipulação de xml, etc).

• Versão JSTL (Java 1.4) lançada em meados de 2002 impulsionou o desenvolvimento com JSP.

• Requer servlet container que suporte Servlet 2.4 and JSP 2.0 (tomcat 5.x)

• Provê 4 standard Tag Libs:

– core, internationalization/format, XML, and SQL

• Provê uma Expression Language (EL).

Page 54: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

54 © LES/PUC-Rio

JSTL EL

Page 55: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

55 © LES/PUC-Rio

JSTL – Core Tag Lib

>

Page 56: Desenvolvimento WEB I Camila Nunes camila@les.inf.puc-rio.br camilan@gmail.com.

56 © LES/PUC-Rio

JSTL - Format tag lib