Slide 1 - Wiki LES PUC-Rio

Propaganda
Desenvolvimento WEB I
Camila Nunes
[email protected]
[email protected]
Agenda
• Servlets
• JSP
© LES/PUC-Rio
2
Servlets
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 requestresponse.
• 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).
© LES/PUC-Rio
4
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
© LES/PUC-Rio
5
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
© LES/PUC-Rio
6
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.
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
Arquitetura Básica
Servidor
Web Browser
Servlet
BD
Arquitetura Básica
NewClass7
NewClass3
NewClass
NewClass2
HTTP
browser
NewClass8
NewClass9
NewClass10
Servlet
NewClass5
© LES/PUC-Rio
NewClass6
NewClass4
10
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()
© LES/PUC-Rio
11
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
© LES/PUC-Rio
12
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
© LES/PUC-Rio
13
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
© LES/PUC-Rio
14
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
© LES/PUC-Rio
15
Hello World!
Hello World!
© LES/PUC-Rio
16
Segundo Exemplo
© LES/PUC-Rio
17
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
© LES/PUC-Rio
18
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
© LES/PUC-Rio
19
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()
© LES/PUC-Rio
20
Jakarta Tomcat
• Servidor gratuito baseado em java
• Configurável de maneira simples via XML
• Oferece suporte a Java (Servlets e JSP)
© LES/PUC-Rio
21
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
© LES/PUC-Rio
22
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
© LES/PUC-Rio
23
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
© LES/PUC-Rio
24
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
© LES/PUC-Rio
25
Configurando o Tomcat
• As classes são colocadas no diretório:
– %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEBINF\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
© LES/PUC-Rio
26
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
© LES/PUC-Rio
27
Configurando o Tomcat
• Registrando Servlets (1)
– O arquivo web.xml
• Localizado no diretório:
– %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEB-INF
© LES/PUC-Rio
28
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>
© LES/PUC-Rio
29
Configurando o Tomcat
•
Agora, o servlet poderá ser acessado através da URL:
http://<host>:<porta>/DIRETÓRIO_APLICAÇÃO/exemplo
© LES/PUC-Rio
30
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>
© LES/PUC-Rio
31
Java Server Pages (JSP)
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>
© LES/PUC-Rio
33
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)
© LES/PUC-Rio
34
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
© LES/PUC-Rio
35
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 %>
© LES/PUC-Rio
36
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=nomecharset”
• buffer=“none|tamanho-em-kb”
• auto-flush=“true | false”
• extends=“nome-da-classe-base”
• isThreadSafe=“true | false”
© LES/PUC-Rio
37
Exemplos de Diretivas
• Diretiva Include
• Diretiva Taglib
© LES/PUC-Rio
38
Exemplos de Diretivas
• Diretiva Page
• Ou
© LES/PUC-Rio
39
Tags de Script
• Declarações
– <%! declaração %>
• Scriptlets
– <% comandos %>
• Expressões
– <%= expressão %>
• Comentários
– <!-- comentário html -->
– <%-- comentário jsp -->
© LES/PUC-Rio
40
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.
© LES/PUC-Rio
41
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.
© LES/PUC-Rio
42
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.
© LES/PUC-Rio
43
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.
© LES/PUC-Rio
44
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.
© LES/PUC-Rio
45
Objetos Pré-Definidos
• Disponíveis para scriplets e expressões
– request
– response
– session
– out
– exception (somente em páginas de erro)
– page
© LES/PUC-Rio
46
Exemplo JSP
© LES/PUC-Rio
47
Tags
• jsp:useBean
• jsp:setProperty
• jsp:getProperty
• jsp:include
• jsp:forward
© LES/PUC-Rio
48
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:
© LES/PUC-Rio
49
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.
© LES/PUC-Rio
50
jsp:include
• <jsp:include page="{URLrelativa |<%=expressão%>}"/>
Exemplo:
© LES/PUC-Rio
51
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.
© LES/PUC-Rio
52
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).
© LES/PUC-Rio
53
JSTL EL
© LES/PUC-Rio
54
JSTL – Core Tag Lib
>
© LES/PUC-Rio
55
JSTL - Format tag lib
© LES/PUC-Rio
56
Download