Você está na página 1de 429

Universidade Federal do Rio de

Janeiro IM/DCC
Java para a Web
Prof. Austeclynio Pereira
e-mail: austeclyniop@posgrad.nce.ufrj.br
www.dcc.ufrj.br/~austeclynio
Contedo Programtico
Modelo cliente-servidor
Modelos arquiteturais
Elementos tpicos da Internet
Programando servios Web emJava
Componentes de uma aplicao Web
Pginas estticas e dinmicas
Componentes de uma aplicao Web emJava
Servlets e JSP
Arquiteturas para aplicaes que usam Servlets e JSP
MVC
Tag Form
Contedo Programtico
Desenvolvendo aplicativos comServlets
Gerenciamento de sesses e cookies
Codificando Servlets thread-safe
Como desenvolver uma JSP
Filtros
Listeners
JDBC
Expression Language
JSTL
Bibliografia
Java para Web com Servlets, JSP e EJB Budi Kurniawan
Murachs Java Servlets ans JSP Andrea Steelman
Head First Servlets & JSP Bryan Basham, Kathy Sierra e
Bert Bates
Enterprise Java Developers Guide S. Narayanan, Junhe
Liu
The J2EE Tutorial Sun Microsystems
Core Servlets and JavaServer Pages Vol I Marty Hall
Como o Tomcat Funciona Budi Kurniawan e Paul Deck
Avaliao e regras
Prova Sero aplicadas duas provas e ser considerada, para efeito de
composio da mdia final, apenas aquela de maior grau.
Trabalho Sero desenvolvidos dois trabalhos valendo, cada um deles,
cinco pontos. Os trabalhos sero de confeco obrigatria. Para a
realizao dos trabalhos os alunos podero se organizar em grupos de
at dois componentes.
Aprovao Para obter a aprovao o aluno dever obter o total de dez
pontos, somando-se a maior das notas das provas, com as notas dos
trabalhos.
Composio da nota final - Para a mdia final a nota da prova ter peso
trs e as notas dos trabalhos peso sete.
Obs. As avaliaes dos trabalhos sero comparativas, trabalhos melhores e
mais completos tero notas maiores.
Ferramentas para o desenvolvimento
dos sites
IDE NetBeans ou Eclipse ou JCreator.
MySql a partir da verso 5.1.
TomCat a partir da verso 6.
Modelo cliente-servidor
Principal padro utilizado na Internet.
Os clientes requisitam os servios e o
servidor realiza os servios solicitados pelos
clientes.
Necessidade de uma rede de computadores,
de um protocolo de comunicao e de um
mecanismo de localizao.
Modelos Arquiteturais uma camada
Conexo
Internet
Conexo
Internet
Mquina Cliente
Web Browser
Servidor Web
Apresentao
Regras do negcio
Persistncia
Modelos Arquiteturais duas camadas
Conexo
Internet
Conexo
Internet
Mquina Cliente
Web Browser
Servidor Web
Apresentao
Regras do negcio
Servidor DataBase
Modelos Arquiteturais trs camadas
Conexo
Internet
Conexo
Internet
Mquina Cliente
Web Browser
Servidor Web
Servidor DataBase
Servidor de Aplicaes
Elementos tpicos de uma aplicao
web
Cliente Servidor
Navegador
Componentes
Scripts
Servidor Web
Servidor BD
Servidor de
Transaes
Executveis
Scripts
Componentes
Elementos tpicos de uma aplicao
web - lado cliente
Scripts normalmente utilizados para
validar dados de entrada. Diminui o nmero
de requisies ao servidor. Ex: JavaScript.
Componentes podem conter parte da
lgica do negcio, desonerando o servidor.
Exs: Applets e Active-X.
Elementos tpicos de uma aplicao
web - lado servidor
Common Gateway Interface mdulo executvel que
produz pginas e informaes para o cliente. Cada
invocao gera um outro processo.
Scripts gera uma pgina HTML para o cliente ou transfere
a pgina para outro servidor. Podem misturar lgica do
negcio com apresentao. Exs.: ASP, JSP e PHP.
Componentes mdulos executveis invocados por scripts
ou por outros mdulos executveis. Exs.: COM+ e EJB.
Executveis executados em um mesmo processo,
capacidade de gerenciar sesses, formulrios e cookies.Ex.:
Servlets.
Estilos Arquiteturais
Thin client utilizao mnima dos recursos
da mquina cliente, praticamente tudo
tratado pelo servidor.
Scripted client scripts na mquina cliente
para a verificao de dados.
Thick client distribuio da lgica do
negcio entre a mquina cliente e a mquina
servidora.
Elementos tpicos da Internet
thin client
Cliente Servidor
Browser
Banco de dados
Componentes
Scripts
Executveis
Elementos tpicos da Internet
scripted client
Cliente Servidor
Browser
Banco de dados
Componentes
Scripts
Executveis
Scripts
Elementos tpicos da Internet
thick client
Cliente Servidor
Browser
Banco de dados
Componentes
Scripts
Executveis
Scripts
Componentes
Caractersticas de uma aplicao web
Conexo
Internet
Conexo
Internet
Mquina Cliente
Web Browser
Servidor Web
Servidor Dados
Caractersticas de uma aplicao web
Conexo
Internet
Conexo
Internet
Mquina Cliente
Web Browser
Servidor Web
Servidor Dados
Como as pginas web estticas
trabalham
Browser
Servidor
Web
arquivo
HTML
arquivo
HTML
Cliente
Servidor
HTTP
Request
HTTP
Response
Como as pginas web dinmicas
trabalham
Browser
Aplicao
Web
Cliente
Servidor
HTTP
Request
HTTP
Response
O protocolo HTTP
Protocolo de rede situado em uma camada acima da
TCP/IP.
Possui caractersticas especficas para aplicaes
baseadas na Web.
A estrutura de um dilogo do tipo HTTP uma
simples seqncia de operaes request/response.
O web browser faz o request e o web server
responde.
Elementos chaves de um request
Ao a ser realizada. Representada por um
dos mtodos do HTTP.
Pgina que desejamos obter acesso (URL).
Parmetros do formulrio invocado.
Elementos chaves de um response
Cdigo de retorno do request.
Tipo do contedo retornado(texto, figura,
HTML etc).
Contedo(o texto HTML, a figura etc).
Retornando um HTML
Cabealho HTTP
<html>
<head>

</head>
<body>
<img src=>
</body>
</html>
Gera um outro request.
Contedo
HTTP
Mtodos utilizados pelo request
Um request solicita servios ao web server atravs
de mtodos do protocolo HTTP.
Mtodos do HTTP: GET, POST, HEAD, TRACE,
PUT, DELETE, OPTIONS e CONNECT.
O Web browser envia um HTTP GET para o
servidor solicitando um recurso. Pode ser: uma
pgina HTML, um JPEG, um PDF etc.
O POST pode solicitar um recurso e, ao mesmo
tempo, enviar um formulrio com dados.
O GET envia dados pela URL!
HTTP request GET
O GET pede uma pgina ao
servidor passando os parmetros
Agncia=3080 e Conta=123456
pela URL.
HTTP request
GET
HTTP request POST
HTTP request
POST
O POST pede uma pgina ao
servidor e informa que existem dados
em seu corpo.
HTTP response
Composto de um cabealho e de um corpo.
O cabealho serve para informar ao web
browser :
Se a requisio foi ou no bem sucedida.
O tipo do contedo que est sendo
passado(conhecido como MIME type).
O corpo contm o contedo que ser
renderizado pelo web browser.
Fluxo primrio de uma operao
request response
Usurio seleciona uma URL.
Web browser cria um HTTP GET request.
O HTTP GET enviado para o Web server.
O Web server localiza a pgina solicitada.
Web server gera um HTTP response.
O HTTP response enviado para o Web browser.
O Web browser renderiza o HTML.
Obs.: Caso seja utilizado o mtodo GET
a URL conter os parmetros que sero
passados para o servidor.
Uniform Request Locator (URL)
http://www.nce.ufrj.br:80/concursos/login.html
Protocolo
Nome do Servidor.
Possui um IP address.
Porta da Aplicao.
Default=80
Caminho onde
o servidor vai
localizar o recurso.
Nome do recurso
solicitado.
Default=index.html
Que cdigo Java escrevemos para a
web?
Servlets.
JavaServer Pages(JSP).
Classes de negcio.
Servlets
Introduzidos pela Sun em 1996 com o
propsito de acrescentar contedo dinmico
aos aplicativos web.
Um servlet uma classe Java executada por
um container.
Tem como benefcios: bom desempenho,
portabilidade, rpido ciclo de
desenvolvimento e robustez.
Servlet
JavaServer Page
JavaServer Page
Exemplo 1: HTML puro
<HMTL>
<HEAD>
</HEAD>
<BODY>
Java para web
</BODY>
</HTML>
Exemplo 2: HTML + cdigo Java = JSP
<HMTL>
<HEAD>
</HEAD>
<BODY>
<%
out.println(Java para web);
%>
</BODY>
</HTML>
Container
O web server no sabe tratar pginas dinmicas.
Necessidade de um container para abrigar servlets e
JSPs.
O TomCat um dos mais populares containers do
mercado.
O web server solicita ao container as pginas
dinmicas.
Servlets e JSPs no possuem um mtodo main().
So carregados pelo container.
Container - Propsitos
Suporte comunicao de alto nvel. Isenta os
desnvolvedores de servlets de escreverem sockets.
Administra o ciclo de vida dos servlets.
Suporte mltiplas threads.
Suporte segurana. Transparente para o
desenvolvedor.
Transforma um JSP em um servlet.
Pode atuar tambm como web server.
Container Tratando requests
request
HTTPServletRequest
HTTPServletResponse
servlet servlet
thread
servlet
service()
servlet
doGet()
HTML
response
Web
Server
Web
Server
Web
Server
Web
Server
Cliente
Cliente
Cliente Cliente
Container
Container
Container
Uma aplicao web em Java
Browser
Cliente
Servidor Web
Servidor de Dados
Servidor
Java SDK
Servlet e JSP Container
HTTP Request HTTP Response
As plataformas Java
JME (Micro Edition)
Orientada para o desenvolvimento de aplicativos para
dispositivos mveis: celulares, pagers, smart cards e
pdas.
JSE (Standard Edition)
Orientada para o desenvolvimento de aplicativos do tipo
desktop.
JEE (Enterprise Edition)
Orientada para o desenvolvimento de aplicativos
corporativos de larga escala.
Ferramentas para escrever servlets e
JSPs
Para escrever servlets pode ser utilizado qualquer
programa que trate aplicaes desenvolvidas em
Java. Ex: jCreator, Eclipse, NetBeans etc.
Para escrever JSPs alm do Eclipse e do NetBeans
tambm pode ser usado o Macromedias HomeSite.
IDE para servlets e JSPs. Ex: Lomboz(plugin para o
Eclipse), NetBeans etc.
IDE para HTML e JSPs. Ex: Macromedias
Dreamweaver.
Model View Controller (MVC)
Padro de projeto empregado nas aplicaes web.
Separa a lgica do negcio da apresentao.
A lgica fica em classes Java especficas.
Possibilita o reuso destas classes por outros
aplicativos.
Divide mais claramente as responsabilidades:
A classe o Model.
O servlet o Controller.
A JSP a View.
Model View Controller (MVC)
Container
Controller
servlet
Model
classe Java
View
JSP
DB
HTTP Request
HTTP Response
Model View Controller (MVC)
O Controller recebe os dados do cliente e os
repassa ao Model.
O Model aplica as regras do negcio e
retorna a informao para quem as solicitou.
A View obtm o estado do Model, repassado
pelo Controller, apresentando-o ao cliente.
Criando uma aplicao web
So necessrios 4 passos:
1. Definir as pginas que sero vistas pelo cliente.
2. Criar o ambiente de desenvolvimento.
3. Criar o ambiente de produo/distribuio.
4. Realizar os testes.
Aplicao Sugesto Musical
Viso do cliente
nonononononononononononononononononononn
Selecione o estilo musical preferido:
Rock;
Samba:
pera:
MPB:
x
Enviar
nonononononononononononononononononononn
Recomendao musical :
Led Zeppelin
U2
The Who
Yes
Arquitetura do aplicativo
Web server
Model
index.html
View
sugestao.jsp
Recomendacao
Controller
SelecaoMusical
Web server
Model
View
sugestao.jsp SelecaoMusical
Controller
Recomendacao
request
Ambiente de desenvolvimento
web.xml
Meu
Departamento
Sugesto
Musical
genrico
Outros
pacotes
Fontes Java
Pginas
estticas e
dinmicas
web model
.jsp .html
Ambiente de testes
webapps
lib
Sugesto
Musical
WEB-INF
tomcat
web
model
.jsp
.html
web.xml
Diretrio do TomCat.
Diretrio de todas as aplicaes web.
Diretrio da minha aplicao.
classes
Sugesto
Musical
Caractersticas do sub-diretrio WEB-INF
No fica visvel para o web browser cliente.
Residncia do arquivo descritor web.xml.
Os servlets residiro no sub-diretrio classes.
As classes que refletem as regras do negcio
tambm residiro no sub-diretrio classes.
Ativando um servlet
Browser
Browser
Container
Servlet
Contedo
Esttico
Servidor
HTTP
Servlet Container
Contedo
Esttico
HTTP
HTTP
HTTP
HTTP
A carga de um servlet
Container Recebe
Solicitao
Servlet
Atual
Dispara a thread do Servlet e processa
a solicitao
Responde
Solicitao
Carrega nova verso do Servlet,
instancia e inicia o Servlet
No
A distribuio descritiva
um documento XML que contm informaes que
descrevem os servlets.
Denominado web.xml.
Possui a tag web-app que descreve todos os servlets da
aplicao.
Associados a cada servlet tm as tags <servlet-name> ,
<servlet-class> e <servlet-mapping>.
<servlet-name> o nome que o Tomcat ir referenciar o
servlet.
<servlet-class> o nome efetivo do servlet sem a extenso
.class.
A distribuio descritiva
<servlet-mapping>
Associa um URL a cada servlet.
Evita que o nome do servlet seja apresentado no
web browser.
Utiliza a tag <url-pattern>.
<url-pattern> define um nome que estar associado
ao servlet desejado.
A distribuio descritiva
Como invocar um servlet ?
Invocando um servlet :
http://localhost:8080/minhaapp/loginservlet
http://www.dcc.ufrj.br/minhaapp/minhacompra
Form tags para invocar um servlet:
<form action=../loginservlet method=get>
<form action=../minhacompra method=post>
A pgina index.html
<html><body>
<h1 align="center" >Selecione o estilo musical preferido:</h1>
<form method="POST" action=EscolhaGrupo">
<select name="estilo" size="1">
<option> Rock
<option>Samba
<option> Opera
<option> MPB
</select><br>
<center>
<input type="SUBMIT" value="Enviar" >
</center>
</form>
</body>
</html>
O servlet Recomendacao
package SugestaoMusical.web;
import SugestaoMusical.model.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Recomendacao extends HttpServlet{
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
String estilo = request.getParameter("estilo");
SelecaoMusical selecao = new SelecaoMusical();
ArrayList<String> retorno = selecao.getLista(estilo);
request.setAttribute("listaRecomendada" , retorno);
RequestDispatcher vista = request.getRequestDispatcher("sugestao.jsp");
vista.forward(request, response);
}
}
A classe SelecaoMusical
package SugestaoMusical.model;
import java.util.*;
public class SelecaoMusical{
public ArrayList getLista(String estilo){
ArrayList<String> grupos = new ArrayList<String>();
if (estilo.equals("Rock")){
grupos.add("Led Zeppelin");
grupos.add("The Who");
grupos.add("U2");
grupos.add("Yes");
}
else if (estilo.equals("Samba")){
grupos.add("Zeca Pagodinho");
grupos.add("Fundo de Quintal");
grupos.add("Dona Ivone Lara");
grupos.add("Martinho da Vila");
}
A classe SelecaoMusical
else if (estilo.equals("Opera")){
grupos.add("Placido Domingo");
grupos.add("Luciano Pavarotti");
grupos.add("Jose Carreras");
grupos.add("Enrico Caruso");
}
else {
grupos.add("Chico Buarque");
grupos.add("Milton Nascimento");
grupos.add("Ellis Regina");
grupos.add("Gonzaguinha");
}
return grupos;
}
}
A JSP sugesto
<%@ page import="java.util.*" %>
<html>
<body>
<h1 align =center="center"> Recomendao Musical: JSP</h1>
<% ArrayList<String> estilo =(ArrayList) request.getAttribute("listaRecomendada");
for (String musica:estilo){
out.print("<br>"+ musica);
}
%>
</body>
</html>
O descritor web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>Musicas</servlet-name>
<servlet-class>SugestaoMusical.web.Recomendacao</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Musicas</servlet-name>
<url-pattern>/EscolhaGrupo</url-pattern>
</servlet-mapping>
</web-app>
O resultado
Como codificar um formulrio HTML
Um formulrio contm uma ou mais formas
de entradas de dados tais como: text boxes,
botes, check boxes, e list boxes.
Um formulrio deve conter pelo menos um
controle tal como o boto SUBMIT.
Qualquer dado associado ao controle ser
passado para o servlet ou para a JSP que est
identificada pelo URL do atributo Action.
Como codificar um formulrio HTML
Tag <form> </form> define o incio e o fim do
formulrio.
Possui os seguintes atributos:
Action especifica o URL do servlet ou da JSP que ser
chamada quando o usurio clicar o boto SUBMIT.
Method especifica que mtodo do protocolo HTTP
ser usado na operao de request. Pode ser GET ou
POST.
Uso dos mtodos GET e POST
Quando usar o mtodo GET ?
Se quiser transferir dados mais rapidamente.
Se o formulrio HTML possui menos de 4 KB de
tamanho.
Se no h problemas em os parmetros aparecerem no
URL.
Quando usar o mtodo POST ?
Se estiver transferindo mais do que 4 KB de tamanho.
Se no conveniente os parmetros aparecerem no URL.
Como codificar um formulrio HTML
Tag <input> define o tipo da entrada.
Atributos comuns:
Name o nome do tipo.
Value o valor default do controle.
Como codificar um formulrio HTML
exemplo
Cdigo de um formulrio HTML e seu resultado
Como codificar text boxes, passwords
e campos hiddens
Atributos dos controles de texto:
Type especifica o tipo do controle de entrada para os
text boxes.
Name especifica o nome do controle. Este o nome
que ser utilizado pela aplicao JSP ou servlet.
Value especifica o valor do dado no controle.
Size especifica o tamanho do campo de controle em
caracteres.
Maxlength especifica o nmero mximo de caracteres
que pode estar contido no campo.
Tipos vlidos para os text boxes
Um tipo Text cria um text box padro.
Um tipo Password apresenta um box com
asteriscos.
Um tipo Hidden cria um campo hidden que
armazena textos que no so apresentados
pelo browser.
Exemplos de text boxes, passwords e
campos hiddens
Como codificar botes
Atributos dos botes:
Type especifica o tipo do controle de entrada.
Os tipos aceitveis so Submit, Reset ou Button.
Onclick especifica o mtodo JavaScript que
ser executado quando Button for clicado.
Tipos vlidos para os botes
O tipo Submit ativa o atributo Action do
formulrio.
O tipo Reset inicia todos os controles do
formulrio com seus valores originais.
O tipo Button cria um boto JavaScript que
quando acionado executa um mtodo pr-
estabelecido.
Exemplos do uso de botes
3 tipos de botes:
2 botes Submit na mesma pgina:
Como codificar checkboxes e
radiobuttons
Atributos destes botes:
Type especifica o tipo de controle. Os tipos
aceitveis so Checkbox ou Radio.
Checked seleciona previamente determinado
controle.
Exemplos de radiobuttons e
checkboxes
Como codificar comboboxes e
listboxes
Utiliza dois tipos de tags: Select e Option.
Deve haver pelo menos uma tag Select e duas tags
Option.
Inicia com a tag Select que conter as tags Option.
A tag Option especifica as diferentes opes
disponveis no box.
A tag Select possui o atributo Multiple que converte
um combox em um listbox.
A tag Option possui o atributo Selected que
seleciona previamente uma opo.
Exemplos de comboboxes e listboxes
Cdigo de um combobox:
Alterando para um listbox:
Como codificar uma textarea
Uma textarea difere-se de uma textbox pelo
fato de suportar mltiplas linhas.
Usa a tag <Textarea> </Textarea>
Atributos da textarea:
Rows especifica o nmero de linhas visveis na
textarea. Se exceder utilizado um scroll bar.
Cols especifica a largura da textarea.
Exemplo de textarea
Cdigo de uma textarea:
Combinando tags - resultado final
Combinando tags cdigo HTML
Combinando tags cdigo HTML
Combinando tags cdigo HTML
O ciclo de vida de um servlet
O mtodo init()
Inicia o servlet.
O container chama este mtodo apenas uma vez.
Pode ser utilizado para iniciar variveis, carregar o driver
de um banco de dados etc.
Recebe, atravs do objeto ServletConfig, os valores
especificados no arquivo web.xml.
Assinatura do mtodo:
public void init(ServletConfig config) throws ServletException
Mtodo de uso opcional.
O ciclo de vida de um servlet
O mtodo Service()
acionado pelo container aps o trmino bem
sucedido do mtodo init().
Executado a cada chamada do servlet.
Destroy()
Remove o servlet. Ocorre por falta de uso ou
shutdown do server.
Como desenvolver servlets
Um servlet herda da classe HttpServlet que herda
da classe GenericServlet que implementa a interface
Servlet.
Necessrio importar os pacotes javax.servlet,
javax.servlet.http.
O mtodo init() pode ser sobreposto.
Pelo menos um mtodo de servio precisa ser
sobreposto.
Como desenvolver servlets
O mtodo doGet processa todos os HTTP requests
que usam o mtodo Get.
O mtodo doPost processa todos os HTTP requests
que usam o mtodo Post.
Estes mtodos recebem os objetos request e
response repassados pelo container.
O mtodo setContentType, do objeto response,
indica o tipo de resposta retornada ao browser.
O mtodo getWriter, do objeto response, usado
para enviar o arquivo HTML para o web browser.
Alguns privilgios dos servlets
Capacidade de logar eventos.
Obter referncias para outros recursos.
Passar atributos para outros servlets.
Como o container trata um request
para um servlet ?
Cliente
Http Request
Container
Chamar o mtodo init() Chamar o mtodo service()
Chamar doGet, doPost, ou
outro mtodo HTTP request
Chamar o mtodo destroy()
Se primeiro request
e o servlet ainda no carregado
Se o servlet j est
carregado
Redirecionando as respostas
O servlet pode direcionar uma requisio
para outro servlet ou para uma JSP.
O servlet ou JSP destino pode residir em uma
URL remota ou no mesmo container.
O recurso remoto no tem acesso aos objetos
request e response do servlet original.
Redirecionando para outra URL
Web server
servlet
status code=301
Location com URL
Web server
Model
View
Controller
sendRedirect
Redirecionando para outra URL
O que escrevo para redirecionar?
response.sendRedirect(http://www.nce.ufrj.br);
ou
response.sendRedirect(/OutraAplicacao/Sugestao)
Desvia para http://www.nce.ufrj/ OutraAplicacao/Sugestao;
A / significa conectar-se raiz (outra webapps).
ou
response.sendRedirect(FechaCompra/Sugestao);
Conecta-se webapps original.
Obs.: A URL do novo destino apresentada no web browser.
Redirecionando para o mesmo local
O que escrevo para redirecionar?
RequestDispatcher vista = request.getRequestDispatcher(sugestao.jsp);
vista.forward(request,response);
O web browser desconhece este redirecionamento.
ServletConfig
Objeto criado pelo container e utilizado para passar
parmetros de iniciao para um servlet.
Parmetros so definidos no web-xml.
Evita a insero de valores, passveis de alteraes,
nos servlets.
Para ativar uma nova verso web-xml s fazer um
redeploy no container.
Existe apenas um por cada servlet.
No pode ser alterado.
ServletConfig
Oferece alguns dos seguintes mtodos:
getInitParameter(String)
Retorna o contedo de um parmetro especfico.
Enumeration getInitParameterNames()
Retorna um conjunto com os nomes dos parmetros
especificados.
ServletConfig
Especificando no web-xml:
<servlet>
<servlet-name>Musicas</servlet-name>
<servlet-class>com.exemplo.web.Recomendacao</servlet-class>
<init-param>
<param-name>faleConosco</param-name>
<param-value>centralatendimento@nce.ufrj.br</param-value>
</init-param>
<init-param>
<param-name>areaVendas</param-name>
<param-value>vendasatendimento@nce.ufrj.br</param-value>
</init-param>
</servlet>
Obtendo no servlet ou JSP:
getServletConfig().getInitParameter(faleConosco);
getServletConfig().getInitParameter(areaVendas);
ServletContext
Reflete o ambiente onde o servlet executado.
Criado pelo container para cada aplicativo web
existente.
Utilizado para os servlets compartilharem
informaes.
Independe de sesso.
Suporta atributos que podem ser modificados ou
recuperados pelos servlets ou JSPs.
ServletContext
Permite a declarao de parmetros no web-xml.
Estes parmetros podem ser recuperados, em
qualquer instante, pelos servlets ou JSPs.
Lembrete: Atributos retornam um Object e
parmetros retornam um String.
ServletContext
Oferece alguns dos seguintes mtodos:
getAttributeNames()
Retorna um conjunto com os nomes dos atributos armazenados.
getAttribute(String)
Retorna um atributo especfico do contexto.
setAttribute(String, Object)
Armazena um atributo no contexto
removeAttribute(String)
Remove um atributo do contexto.
ServletContext
getInitParameter(String)
Retorna o contedo de um parmetro especfico.
Enumeration getInitParameterNames()
Retorna um conjunto com os nomes dos parmetros
especificados.
getRequestDispatcher(String)
Desvia para um recurso local.
ServletContext
Especificando no web-xml:
<servlet>
<servlet-name>Musicas</servlet-name>
<servlet-class>com.exemplo.web.Recomendacao</servlet-class>
<init-param>
<param-name>faleConosco</param-name>
<param-value>centralatendimento@nce.ufrj.br</param-value>
</init-param>
<init-param>
<param-name>areaVendas</param-name>
<param-value>vendasatendimento@nce.ufrj.br</param-value>
</init-param>
</servlet>
<context-param>
<param-name>enderecoReal</param-name>
<param-value>Avenida Rio Branco 156</param-value>
</context-param>
ServletContext
Obtendo um parmetro pelo servlet ou JSP:
getServletContext().getInitParameter(endereoReal);
Criando um atributo pelo servlet ou JSP:
getServletContext().setAttribute(endereco, Avenida Rio Branco 156);
Obtendo o atributo pelo servlet ou JSP:
getServletContext().getAttribute(endereco);
ServletConfig e ServletContext
Servlet
Context
servlet servlet
servlet servlet
Servlet
Config
Servlet
Config
Servlet
Config
Servlet
Config
O ServletContextListener
Permite que a aplicao seja notificada quando um
objeto ServletContext criado ou destrudo.
Controla os eventos do ciclo de vida do contexto.
Aplicao pode recuperar os parmetros de
iniciao do ServletContext.
Acesso ao ServletContext feito atravs do objeto
ServletContextEvent.
Inserido no diretrio acima do web e do model.
O ServletContextListener
Possui dois mtodos:
contextInitialized(ServletContextEvent evento)
Acionado quando o contexto criado.
contextDestroyed(ServletContextEvent evento)
Acionado quando o contexto destrudo.
O ServletContextListener
<web-app>
<servlet>
<servlet-name>Musicas</servlet-name>
<servlet-class>com.exemplo.web.Recomendacao</servlet-class>
<init-param>
<param-name>faleConosco</param-name>
<param-value>centralatendimento@nce.ufrj.br</param-value>
</init-param>
</servlet>
<context-param>
<param-name>enderecoReal</param-name>
<param-value>Avenida Rio Branco 156</param-value>
</context-param>
<listener>
<listener-class>
com.exemplo.IniciaMinhaAplicacao
</listener-class>
</listener>
</web-app>
Especificando no web-xml:
O ServletContextListener
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Servlet obtendo acesso ao contexto
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Fluxo de execuo
Container iniciado e l o web-xml.
Container cria o ServletContext da aplicao.
Container cria pares nome-valor dos parmetros de
iniciao do Contexto(se houver).
Container d ao ServtletContext referncias para estes
pares.
Container cria uma instncia do listener da aplicao web.
Mtodo contextInitialized() acionado e obtm a
referncia para o ServletContext.
Cdigo do mtodo contextInitialized() cria os atributos de
interesse.
Outros listeners
ServletContextAttributeListener
ServletRequestListener
ServletRequestAttributeListener
HttpSessionListener
HttpSessionBindingListener
HttpSessionAttributeListener
HttpSessionActivationListener
Exerccio
Criar uma aplicao web que valide um
login e uma senha.
O login dever ser: cursoJavaWeb
E a senha : 123456
Se entrada vlida: apresenta o login e a senha
para o usurio
Se no OK: diz qual foi o erro.
O ServletContextAttributeListener
Permite que a aplicao seja notificada
quando um atributo do ServletContext
criado, modificado ou removido.
O ServletContextAttributeListener
Possui os mtodos:
attributeAdded(ServletContextAttributeEvent evento)
Acionado quando um atributo criado.
attributeRemoved(ServletContextAttributeEvent evento)
Acionado quando um atributo removido.
attributeReplaced(ServletContextAttributeEvent evento)
Acionado quando um atributo substitudo.
ServletContextAttributeListener -
exemplo
Contador de visitas a um site.
Quando o contexto iniciado a classe listener l
o contudo de um arquivo txt, que contm o
nmero de visitas ao site, e cria um atributo com
este valor no ServletContext.
Quando o site visitado um servlet incrementa o
contador modificando este atributo.
A classe listener ouve a modificao do
atributo e atualiza o valor no arquivo txt.
O ServletContextAttributeListener
O ServletContextAttributeListener
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
O ServletContextAttributeListener
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Distribuio descritiva
<web-app>
<listener>
<listener-class> AppAttributeEventDemo </listener-class>
</listener>
<servlet>
<servlet-name> PageCounter </servlet-name>
<servlet-class> PageCounterServlet </servlet-class>
</servlet>
</web-app>
A interface ServletRequest
Oferece alguns dos seguintes mtodos:
getServerPort()
Obtm a porta onde o servidor est ouvindo o meio.
getServerName()
Obtm o nome do servidor.
getProtocol()
Obtm o protocolo utilizado.
getRemoteAddr()
Obtm o endereo do cliente remoto.
getRemoteHost()
Obtm o nome da mquina remota.
A interface ServletRequest
getParameter(String)
Obtm o valor de um parmetro especfico.
getParameterValues(String)
Obtm um array com os valores dos parmetros
passados.
getParameterNames()
Obtm os nomes dos parmetros passados.
A interface ServletRequest
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletRequestTeste extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,
ServletException{
System.out.println("Porta Servidora: " + request.getServerPort());
System.out.println("Servidor: " + request.getServerName());
System.out.println("Protocolo: " + request.getProtocol());
System.out.println("Cliente: " + request.getRemoteHost());
System.out.println("Endereo Cliente: " + request.getRemoteAddr());
}
}
A interface ServletRequest
O ServletRequestListener
Permite que a aplicao seja notificada
quando um request criado ou destrudo.
O ServletRequestListener
Possui os seguintes mtodos:
requestInitialized(ServletRequestEvent evento)
Acionado quando o request criado.
requestDestroyed(ServletRequestEvent evento)
Acionado quando o request destrudo.
A interface HttpServletRequest
Define mtodos para tratar cabealhos:
getHeaderNames()
Retorna um Enumeration contendo os nomes dos
cabealhos.
getHeader(String)
Retorna o valor de um cabealho especfico.
Obs.:Suportado apenas pelo doGet.
A interface HttpServletRequest
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
A interface HttpServletRequest
A interface HttpServletRequest
Mtodos para obter informaes de
parmetros:
getQueryString()
informa os parmetros contidos na URL. Compete ao
desenvolvedor promover a separao. Suportado apenas pelo
doGet().
Obs.: Herda mtodos da interface ServletRequest:
getParameterNames(), getParameter(String),
getParameterValues(), getAttribute(), setAttribute() etc.
A interface HttpServletRequest
import javax.servlet.*;
import javax.servlet.http.*;
public class ValidaUsuarioSenhaMobile extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
String usuario = request.getParameter("usuario");
String senha = request.getParameter("senha");

}
}
A interface HttpServletRequest
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
A interface HttpServletRequest
Os nomes dos campos so case sensitive.
A interface HttpServletRequest
Parmetros com mltiplos valores:
Utilizado quando um parmetro possui diversos valores.
Exs: ListBox e CheckBox.
O mtodo getParameter s fornece o primeiro valor do
parmetro.
O mtodo getParameterValues retorna um array de
strings contendo todos os valores selecionados.
O nome do parmetro o argumento para o mtodo
getParameterValues.
A interface HttpServletRequest
Cdigo extrado e modificado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
A interface HttpServletRequest
A interface HttpServletRequest
A interface HttpServletRequest
Cdigo extrado e modificado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Gerenciando sesses
Gerenciamento de sesso:
o acompanhamento dos movimentos realizados pelos
usurios em um web site.
O HTTP um protocolo que no guarda estados:
1o. HTTP request o browser requisita a pgina.
1o HTTP response o servidor retorna a pgina
requisitada e quebra a conexo (stateless protocol).
HTTP requests seguintes o browser requisita a pgina.
O servidor no tem como associar o browser com um
request prvio.
Tcnicas para o gerenciamento de
sesses
Existem 4 tcnicas para o gerenciamento de
sesses:
Objetos de sesso.
Cookies.
Reescrita de URL.
Campos ocultos.
Como trabalhar com sesses
Quando surge um novo cliente, o container cria um objeto
sesso que fica associado somente a este cliente.
Este objeto fica disponvel enquanto o cliente estiver ativo.
Funciona como uma Hashtable onde pode ser armazenada
qualquer quantidade de pares chave/objeto.
As sesses terminam por tempo de inatividade ou quando o
usurio sai do browser.
Pode ser acessado por qualquer servlet do mesmo aplicativo.
Para recuperar um objeto previamente armazenado basta
informar a sua chave.
Como o Java mantm sesses
No primeiro request do cliente o container gera
uma identificao nica para a sesso.
No response, esta identificao retornada para o
cliente.
Em cada request subseqente o browser envia a
identificao.
O container recepciona e associa a identificao
sesso do cliente.
utilizado um cookie para armazenar a
identificao.
Como o Java mantm sesses
O cookie enviado no cabealho do protocolo
HTTP.
Cabe ao servlet somente informar ao
container que quer criar, ou usar, o recurso
sesso.
Cabe ao container criar o objeto cookie.
Se os cookies so inibidos no web browser, o
gerenciamento de sesso no funcionar.
Como trabalhar com sesses
Obtendo um objeto sesso:
HttpSession minhasessao=request.getSession();
Nos servlets, sempre deve ser especificado
Pode ser obtido no mtodo init().
Pode ser utilizado nos mtodos doGet ou doPost.
Mtodo getSession() definido na interface
HttpServletRequest.
Como trabalhar com sesses
Verificando se a sesso nova:
HttpSession session = request.getSession();
session.isNew()
Retorna true se o cliente ainda no retornou com a sua
identificao.
Outra forma:
HttpSession session = request.getSession(false);
Retorna uma sesso pr-existente ou null.
Mtodos da interface HttpSession
getAttribute(String)
Retorna um atributo especfico da sesso.
setAttribute(String, Object)
Armazena um atributo na sesso.
removeAttribute(String)
Remove um atributo da sesso.
getCreationTime()
Retorna a hora que a sesso foi criada.
getId()
Retorna uma string contendo o identificador da sesso.
Mtodos da interface HttpSession
getLastAccessedTime()
Retorna a hora em que o container atendeu o ltimo
request para uma sesso.
setMaxInactiveInterval()
Especifica o tempo mximo , em segundos, de espera
entre requests de uma sesso.
Default=30 minutos; Se especificar 1 no sofre timed out.
getMaxInactiveInterval()
Retorna o tempo mximo, em segundos, permitido entre
requests.
invalidate()
Encerra a sesso. Todos os atributos so removidos.
Especificando o timeout no web-xml
<session-config>
<session-timeout>20</session-timeout>
</session-config>
Obs.: Este tempo em minutos.
HttpSession - exemplo
HttpSession - exemplo
HttpSession - exemplo
HttpSession - exemplo
HttpSession - exemplo
. Cdigo extrado e modificado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
HttpSession - exemplo
HttpSession - exemplo
Cdigo extrado e modificado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
O HttpSessionListener
A aplicao notificada quando um objeto
HttpSession criado ou invalidado.
Permite verificar quantos usurios esto
correntemente ativos.
O HttpSessionListener
Possui dois mtodos:
sessionCreated(HttpSessionEvent evento)
Acionado quando o objeto HttpSession criado.
sessionDestroyed(HttpSessionEvent evento)
Acionado quando o objeto HttpSession invalidado.
O HttpSessionListener
exemplo
Contador de usurios em sesso:
Conta o nmero de usurios que esto
correntemente em sesso.
Incrementado quando uma sesso estabelecida.
Decrementado quando uma sesso
invalidada/encerrada.
O HttpSessionListener
exemplo
O HttpSessionListener
exemplo
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
O HttpSessionListener
exemplo
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
O HttpSessionBindListener
Permite que o objeto colocado como atributo
seja acionado em sua criao ou em sua
remoo.
No precisa ser informado no web-xml.
O HttpSessionBindListener
Possui os mtodos:
valueBound(HttpSessionBindingEvent evento)
Acionado quando o objeto torna-se um atributo.
valueUnbound(HttpSessionBindingEvent evento)
Acionado quando o objeto removido.
O HttpSessionBindListener
O objeto em questo, quando acionado, pode
obter acesso a uma base de dados e popular
os seus atributos.
Em tempo de remoo o objeto pode
atualizar a base de dados com os seus
atributos atualizados.
HttpSessionBindListener
package com.exemplo;
import javax.servlet.*;
import javax.servlet.http.*;
public class Aluno implements HttpSessionBindingListener{
private int DRE;
private String nome;
private String curso;
public Aluno(int DRE){
this.DRE = DRE;
}
public String getNome(){
return nome;
}
public String getCurso(){
return curso;
}
public void setNome(String nome){
t his.nome = nome;
}
public void setCurso(String curso){
this.curso = curso;
}
HttpSessionBindListener
public void valueBound(HttpSessionBindingEvent evento){
// instrues para obter os dados do banco
}
public void valueUnbound(HttpSessionBindingEvent evento){
// instrues para atualizar os dados do banco
}
}
O HttpSessionAttributeListener
A aplicao notificada quando um atributo
do objeto HttpSession criado, alterado ou
removido.
O HttpSessionAttributeListener
Possui os mtodos:
attributeAdded(HttpSessionBindingEvent evento)
Acionado quando o atributo adicionado.
attributeRemoved(HttpSessionBindingEvent evento)
Acionado quando o atributo removido.
attributeReplaced(HttpSessionBindingEvent evento)
Acionado quando o atributo modificado.
Obs.: Os valores podem ser obtidos com
evento.getName() e evento.getValue().
Resumo dos listeners
Listeners de atributos:
ServletRequestAttributeListener
ServletContextAttributeListener
HttpSessionAttributeListener
Listeners de ciclos-de-vida
ServletRequestListener
ServletContextListener
HttpSessionListener
HttpSessionBindingListener
HttpSessionActivationListener
Resumo dos listeners
Mtodos comuns a todos os listeners(exceo para
BindingListener):
attributeAdded(), attributeRemoved() e
attributeReplaced().
Mtodos do ciclo-de-vida de uma sesso:
sessionCreated() e sessionDestroyed().
Mtodos do ciclo-de-vida de um request:
requestInitialized() e requestDestroyed().
Mtodos do ciclo-de-vida de um servlet context:
contextInitialized() e contextDestroyed().
Propsitos dos atributos
Atributos do servlet context(no thread-safe)
Utilizados para serem compartilhados por toda a
aplicao.
Atributos do HttpSession(no thread-safe)
Utilizados para armazenar informaes ligadas s
sesses dos clientes.
Atributos do request(thread-safe)
Utilizados para passar informaes do servlet para a JSP.
Cookies
So criados pelo container ou pelo servlet.
um par nome-valor utilizado para o servidor e o
cliente estabelecerem uma forma de persistncia de
dados.
No lado cliente o browser salva os cookies e os
envia de volta para o servidor cada vez que solicitar
uma pgina.
So transferidos no cabealho HTTP.
Cookies
Foram especificados pelo NetScape e fazem
parte do padro Internet.
Cookies podem permanecer em um browser
por at 3 anos.
Normalmente um browser aceita at 20
cookies por site e 300 cookies no total,
podendo possuir, cada cookie, at 4KB de
tamanho.
Cookies
Criado pela classe Cookie que faz parte do
pacote javax.servlet.http.
Construtor:
Cookie(String cookieName, String cookieValue)
Enviado para o browser atravs do objeto
response.
Recuperado pelo objeto request.
Cookies
Alguns dos mtodos
addCookie(nome-do-objeto)
Adiciona um cookie ao response.
Cookie[] getCookies()
Obtm um string de cookies enviados pelo browser.
String getName()
Obtm o nome do cookie.
String getValue()
Obtm o valor do cookie.
Cookies
setMaxAge(int expira)
Indica o tempo mximo, em segundos, de vida do cookie.
Para criar um cookie persistente basta especificar um nmero >0.
Para criar um cookie vlido para uma nica sesso deve ser
especificado o valor 1 (valor default).
setSecure(boolean flag)
Indica ao browser que o cookie deve somente ser
enviado usando um protocolo seguro tal como HTTPS
ou SSL.
Cookies - exemplos
Cookies - exemplos
Cookies - exemplos
Cookies - exemplos
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Como apagar cookies
Para apagar cookies basta atribuir o valor 0 para a idade do cookie.
Reescrita de URL
Consiste em anexar a identificao do cliente na
URL.
Utilizada quando o cliente no permite cookies.
Feita automaticamente pelo container.
Sintaxes:
response.encodeURL(/Recurso)
response.encodeRedirectURL(/Recurso)
Campos ocultos
Consiste em passar um identificador como
um valor de um campo oculto.
Valor no aparece na URL mas pode ser
visto no cdigo HTML.
Utilizados quando o cliente no permite
cookies.
Campos ocultos - exemplos
web browser
invoca Pgina 1
Pgina 1 Pgina 2
Apresenta tela
action
Captura dados,
oculta
e apresenta o
resultado
Pgina 3
action
Apresenta a
tela final
Campos ocultos - exemplos
Campos ocultos - exemplos
Campos ocultos - exemplos
Campos ocultos - exemplos
Campos ocultos - exemplos
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Campos ocultos - exemplos
Campos ocultos - exemplos
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Campos ocultos - exemplos
Campos ocultos - exemplos
Cdigo extrado do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Como depurar problemas em servlets
O servlet no compila:
Certifique-se que o compilador tem acesso aos arquivos
JAR para todas as APIs necessrias.
Certifique-se que o classpath est apontando para o
diretrio que contm o pacote correto.
O servlet no executa:
Certifique-se que o web server est executando (Tomcat).
As mudanas feitas no esto sendo apresentadas:
Certifique-se que a opo de reloading(no Tomcat) est
ativada.
Como depurar problemas em servlets
Impresso feita na console do container
(Tomcat).
Podem ser utilizados os mtodos println,
print ou printf dos objetos System.out ou
System.err.
Recomenda-se incluir, na mensagem, o nome
da classe e do mtodo que esto sendo
depurados.
Como depurar problemas em servlets
A console do TomCat:
Cdigo para realizar a impresso:
Como depurar problemas em servlets
arquivo log
Para tal, existem dois mtodos da classe
HttpServlet:
log(String mensagem)
Escreve uma mensagem no log do container.
log(String mensagem, Throwable t)
Escreve uma mensagem no log do container
registrando, tambm, os mtodos chamados para
executar determinado comando.
Como depurar problemas em servlets
arquivo log
Um arquivo log do TomCat:
Cdigo para escrever em um arquivo log:
Codificando variveis de instncia
Uma varivel de instncia pertence a uma instncia
de um servlet.
compartilhada por qualquer thread do servlet.
Duas threads podem conflitar quando tentarem
modificar a mesma varivel de instncia ao mesmo
tempo.
Para sincronizar o acesso ao bloco de cdigo deve
ser usada a palavra-chave synchronized.
Protegendo variveis de instncia
package com.exemplo.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class ContaAcessos extends HttpServlet{
private int contadorGeral;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
synchronized(this){
contadorGeral++;
}
out.println("<br> Esta pgina foi acessada " + contadorGeral + " vezes </br>");
}
}
Codificando servlets thread-safe
Um servlet thread-safe aquele que trabalha
confiavelmente mesmo quando mais de uma cpia
da thread est ativa.
Para sincronizar o acesso ao mtodo ou ao bloco de
cdigo deve ser utilizada a palavra-chave
synchronized.
Implementando a interface SingleThreadModel o
cdigo inteiro do servlet torna-se serializvel.
Codificando servlets thread-safe
Um bloco de cdigo synchronized
Um mtodo synchronized
Um servlet que no permite mltiplos acessos de threads
Codificando servlets thread-safe
Protegendo o servlet context:
synchronized(getServletContext()){
}
Protegendo o HttpSession:
synchronized(session){
}
Invocando Classes regulares Java nos
servlets
Utilizadas para implementar a funcionalidade
Model do MVC.
Deve haver uma preocupao com o
sincronismo devido aos mltiplos acessos
dos servlets.
Servlets invocam estas classes de forma
convencional.
Invocando Classes regulares Java nos
servlets
Problema:
Capturar as informaes de nome, sobrenome,
login e senha, fornecidos pelo usurio. Devem
ser criticados e persistidos em um arquivo txt.
Invocando Classes regulares Java nos
servlets
Sero utilizados os 3 servlets do exerccio sobre
sesses. Modificando-se o ltimo servlet.
Ser criada uma classe denominada GravaDados,
que ser invocada por este ltimo servlet.
A classe GravaDados implementa o mtodo
adicionaRegistro que gravar a informao no
arquivo txt.
Invocando Classes regulares Java nos
servlets
Classe GravaDados gravada no mesmo diretrio do servlet.
Invocando Classes regulares Java nos
servlets
MySQL
Introduo ao MySQL.
Interagindo com o MySQL.
Iniciando e parando o servidor MySQL.
Trabalhando com o programa MySQL.
Como criar, selecionar e apagar um database.
Como criar e apagar uma tabela.
Como inserir ou carregar dados em uma tabela.
JDBC.
MySQL
Open source database que pode ser baixado
gratuitamente de www.mysql.com.
um dos mais rpidos databases relacionais do
mercado.
Comparado a outros databases, fcil de instalar e
utilizar.
Roda nos sistemas operacionais Windows, Unix,
Solaris e OS/2.
Suporte integridade referencial, subqueries e
transaes.
MySQL
Suporta SQL que a linguagem padro para
trabalhar com databases relacionais.
Suporta acessos de mltiplos clientes e inmeras
linguagens tais como Java, Perl, PHP, Python e C.
Pode fornecer acesso aos seus dados via intranet ou
internet.
Pode restringir o acesso a seus dados somente para
usurios autorizados.
Iniciando e parando o MySQL
O MySQL database server iniciado aps a
entrada do sistema operacional.
O MySQL fornece uma GUI que permite ver
algumas informaes sobre o database
server.
Para parar o database server basta ir ao cone
do MySQL e parar o servio.
O programa MySQL
Utilizado para realizar operaes sobre o
database MySQL.
Pode ser conectado, local ou remotamente,
ao database server.
Executa operaes MySQL e emite
comandos SQL.
O programa MySQL
Parando o programa MySQL
Como criar, selecionar e apagar um
database
Criando um database:
mysql> create database dbteste;
Como listar os nomes de todos os databases:
mysql> show databases;
Como selecionar um database para uso:
mysql> use dbteste;
Como apagar um database:
mysql>drop database dbteste;
Como criar e apagar uma tabela
Criando uma tabela:
mysql> create table Funcionario(
-> ident int not null auto_increment,
-> nome varchar(50),
-> endereco varchar(50),
-> sexo char(1),
-> primary key(ident));
Como criar e apagar uma tabela
Como listar todas as tabelas em um database:
mysql> show tables;
Como apagar uma tabela:
mysql> drop table Funcionario;
Apresentando a descrio dos campos de uma
tabela;
mysql> describe Funcionario;
Como inserir ou carregar dados em
uma tabela
Inserindo dados:
Carregando dados:
mysql> load data local infile "c:/cursoweb/Users.txt into table User;
A tabela Users.txt deve estar formatada.
mysql> insert into funcionario(nome, endereco,sexo)
-> values
-> (Jose, Rua abc 210, M),
-> (Maria, Rua def 220,F);
Alguns comandos SQL
Selecionando todas colunas de uma tabela:
Exemplos:
SELECT * FROMFuncionario;
SELECT * FROMFuncionario WHERE ident<3;
Alguns comandos SQL
Selecionando algumas colunas de uma tabela:
Exemplo:
SELECT nome, sexo FROMFuncionario
WHERE ident>2
ORDER BY nome ASC;
Selecionando dados de mltiplas
tabelas
Operao conhecida como join.
Existem 2 tipos de join:
INNER somente so selecionadas as linhas daquelas
colunas cujos contudos so idnticos.
OUTER todas as linhas de uma tabela so selecionadas
mesmo se no existir correspondente na outra tabela.
LEFT OUTER so includos todos os registros da primeira
tabela.
RIGTH OUTER so includos todos os registros da segunda
tabela.
Selecionando dados de mltiplas
tabelas
Sintaxe:
Exemplo:
Tabela_Empregados Tabela_Vendas
Selecionando dados de mltiplas
tabelas
SELECT Tabela_Empregados.Nome, Tabela_Vendas.Produto
FROM Tabela_Empregados
INNER JOIN Tabela_Vendas
ON Tabela_Empregados.Codigo_Empregado=Tabela_Vendas.Codigo_Empregado
Selecionando dados de mltiplas
tabelas
SELECT Tabela_Empregados.Nome, Tabela_Vendas.Produto
FROM Tabela_Empregados
LEFT JOIN Tabela_Vendas
ON Tabela_Empregados.Codigo_Empregado= Tabela_ Vendas.Codigo_Empregado
Selecionando dados de mltiplas
tabelas
SELECT Tabela_Empregados.Nome, Tabela_Vendas.Produto
FROM Tabela_Empregados
RIGHT JOIN Tabela_Vendas
ON Tabela_Empregados.Codigo_Empregado= Tabela_Vendas.Codigo_Empregado
Como inserir, atualizar e apagar dados
Inserindo dados:
INSERT INTO tabela [(lista-de-campos)]
VALUES (lista-de-valores)
Exemplo:
INSERT INTO Vendas (UserID,
CodigoProduto) VALUES (1, Mic01)
Como inserir, atualizar e apagar dados
Atualizando dados:
UPDATE tabela
SET expresso-1 [, expresso-2]
WHERE critrio-de-seleo
Exemplos:
UPDATE Usuario
SET Nome = Rafael,
WHERE EmailAddress=rcardozo@globo.com
UPDATE Produtos
SET PrecoProduto=40.95
WHERE PrecoProduto=36.50
Como inserir, atualizar e apagar dados
Apagando dados:
DELETE FROMtabela
WHERE critrio-de-seleo
DELETE FROMtabela (apaga tudo)
DELETE * FROMtabela (apaga tudo)
Exemplos:
DELETE FROMUsuario WHERE
EmailAddress=rcardozo@globo.com
DELETE FROM Download WHERE DataDownload
< 2005-08-02
Java Database Connectivity (JDBC)
Tecnologia que permite o acesso e a manipulao
de um banco de dados em Java.
Faz parte do pacote java.sql.
Existem vrios tipos de drivers.
Para aplicaes web utiliza-se os drivers
tipos 3 e 4.
O MySQL driver do tipo 4 e gratuito.
Java Database Connectivity (JDBC)
Onde obter database drivers ?
www.java.sun.com/products/jdbc
No TomCat o database driver instalado
colocando-se o arquivo .jar no diretrio
common/lib.
O Java e os databases
Carregando o database driver.
Conectando-se a um database.
Escrevendo uma declarao.
Trabalhando com um result set.
Recuperando dados de um result set.
Inserindo, atualizando e apagando dados.
Carregando o database driver do
MYSQL
try {
Class.forName(com.mysql.jdbc.Driver);
}
catch (ClassNotFoundException e) {
System.out.println(e); /* Driver no encontrado */
}
Pode ser includo no mtodo init() do servlet.
Conectando-se a um database
Utiliza-se o mtodo getConnection, da classe DriverManager.
Para fechar a conexo utiliza-se o mtodo close. Ex: con.close().
Outros mtodos do DriverManager
isClosed() utilizado para verificar se a
conexo est fechada.
createStatement() usado para criar um
objeto Statement que enviar declaraes
SQL ao banco de dados.
preparedStatement() usado para enviar
mltiplas declaraes para o banco de dados.
Criando uma declarao
Utilizada para enviar declaraes SQL para o database.
Ex.: Statement stmt =con.createStatement();
Para fazer consultas ao database utiliza-se o mtodo
executeQuery().
Para fazer atualizaes (update, delete ou insert) utiliza-se o
mtodo executeUpdate().
Esta declarao tambm deve ser fechada.
Ex: stmt.close().
Recuperando informaes
gerado um objeto result set contendo as colunas
e as linhas com o resultado solicitado.
Existem mtodos especficos para navegar pelo
result set e para recuperar os campos da tabela
produzida.
Ex.: ResultSet produtos = stmt.executeQuery(SELECT
* FROM tabela_produtos);
Navegando pelo result set
Alguns Mtodos
next() move o cursor para a prxima linha do
result set.
last() move o cursor para a ltima linha do result
set.
first() move o cursor para a primeira linha do
result set.
close() fecha o result set.
getRow() retorna um inteiro que identifica a linha
corrente do result set.
Recuperando campos do result set
getXXX(intColumnIndex) retorna dados de
uma coluna identificada pelo seu nmero.
Ex.: produtos.getString(1)
getXXX(StringColumnName) retorna
dados de uma coluna identificada pelo seu
nome.
Ex.: produtos.getString(nomedoproduto)
Recuperando campos do result set
O mtodo getXXXpode ser usado para
retornar todos os 8 tipos primitivos dados.
O XXX indica o tipo primitivo do dado.
Tambm pode ser usado para retornar strings
(getString), datas (getDate) e hora (getTime).
Prepared statements
Quando a aplicao envia uma declarao, o
database server realiza as seguintes tarefas:
Checa se h erros de sintaxe.
Prepara um plano para executar a declarao.
Executa a declarao.
Se a mesma declarao enviada novamente o
database server no checa a sintaxe e nem prepara
outro plano. Com isto aumenta-se o desempenho
das operaes no database.
Prepared statements
consultando
PreparedStatement ps;
ResultSet rs;
String consulta = "SELECT * from agregadoanimal where id=? " ;
ps = con.prepareStatement(consulta);
ps.setInt(1, animal.getId());
rs = ps.executeQuery();
while(rs.next()){
animal.setEspecie(rs.getString("especie"));
animal.setRaca(rs.getString("raca"));
animal.setNome(rs.getString("nome"));
animal.setCaracteristica(rs.getString("caracteristica"));
animal.setHabilitado(rs.getBoolean("habilitado"));
}
Prepared statements
atualizando
String altera = "UPDATE agregadoanimal SET "
+ " especie = ?, "
+ " raca = ?, "
+ " nome = ?, "
+ " caracteristica = ?, "
+ " idcolaborador = ?, "
+ " habilitado= ? "
+ " WHERE id = ? ";
ps = con.prepareStatement(altera);
ps.setString(1,animal.getEspecie());
ps.setString(2,animal.getRaca());
ps.setString(3,animal.getNome());
ps.setString(4,animal.getCaracteristica());
ps.setString(5,animal.getIdColaborador());
ps.setBoolean(6,animal.getHabilitado());
ps.setInt(7,animal.getId());
ps.executeUpdate();
Prepared statements
inserindo
String insere = "Insert into agregadoanimal(especie, raca, nome, caracteristica, idcolaborador,habilitado) " +
"Values (?,?,?,?,?,?,)";
ps = con.prepareStatement(insere);
ps.setString(1,animal.getEspecie());
ps.setString(2,animal.getRaca());
ps.setString(3,animal.getNome());
ps.setString(4,animal.getCaracteristica());
ps.setString(5,animal.getIdColaborador());
ps.setBoolean(6,animal.getHabilitado());
ps.executeUpdate();
Prepared statements
excluindo
String exclui = "DELETE from agregadoanimal WHERE id = ? ";
ps = con.prepareStatement(exclui);
ps.setInt(1,animal.getId());
ps.executeUpdate();
Tratando Conexes
Abrir e fechar conexes a todo instante custoso.
Existe forte recomendao para sempre fechar uma
conexo aberta.
Uma conexo aberta utilizada, exclusivamente,
por uma nica thread do servlet.
Os modernos bancos de dados suportam conexes
simultneas.
Soluo conciliatria: criao de um pool de
conexes abertas.
Homologando uma transao
Para evitar perda de informaes necessrio
que algumas operaes no database sejam
realizadas em conjunto.
So disponibilizados trs mtodos da classe
DriverManager: setAutoCommit(), commit(),
rollback().
Homologando uma transao
setAutoCommit() indica se a homologao se
dar por declarao individual(true) ou por um
conjunto de declaraes(false).
O valor default true.
commit() utilizado para homologar a transao,
caso o setAutoCommit seja false.
rollback() utilizado para retornar a transao a
posio anterior.
Java Server Page
uma extenso da tecnologia servlet.
Criada para suportar a criao de pginas
HTML e XML.
Combina contedo esttico com dinmico.
Desonera o programador de se preocupar
com os elementos de arte da pgina.
Java Server Page
Consiste de tags HTML e cdigo Java.
O cdigo Java fica embutido no cdigo HTML
como um scriptlet ou uma expresso.
Um scriptlet usado para executar um ou mais
comandos Java.
Uma expresso usada para apresentar um texto.
Para identificar scriptlets e expresses so
utilizadas tags especficas.
Java Server Page
Atos do container para processar uma JSP:
Quando acionada, a JSP traduzida para um arquivo
.java.
Este arquivo .java compilado tornando-se um arquivo
.class.
O arquivo .class carregado e transforma-se, finalmente,
em um servlet.
Obs.: Consultar TomCat/work/Catalina/localhost/aplicacao/org/apache/jsp
Onde salvar uma JSP ?
Precisa ser salva em um diretrio visto pelo
web server.
No Tomcat 5.0 pode ser usado qualquer
diretrio sob o diretrio webapps.
Pgina deve ter o nome com o sufixo jsp.
Scriptlets e expresses
Scriptlet
<% java statements%> no esquecer o ;
Expresso
<% = expresso %>
Atua como um argumento de out.print().
Scriptlets e expresses
<% String nome=request.getParameter(nome); %>
O nome <%= nome %> //ASSIM ou
O nome <%= request.getParameter(nome)%>
Como codificar scriptlets e expresses
Como codificar scriptlets e expresses
Como codificar scriptlets e expresses
Pgina HTML
Pgina HTML
A pgina confirma_cadastro.jsp
JSP Ciclo de Vida
O cliente aciona uma JSP.
O container tenta traduzir o JSP para um
arquivo .java.
Se OK, o .java compilado gerando um
arquivo .class.
O container carrega o .class passando a trat-
lo como um servlet.
JSP Ciclo de Vida
So criados os mtodos:
jspInit().
Pode ser sobreposto.
jspService().
No pode ser sobreposto.
jspDestroy().
Pode ser sobreposto.
JSP Ciclo de Vida
O container instancia o servlet acionando o
mtodo jspInit().
O container cria uma nova thread e aciona o
mtodo jspService().
A thread disparada.
O container aciona o mtodo jspDestroy().
Obs.: A traduo e a compilao s acontecem uma nica vez.
JSP Parmetros de iniciao
<web-app>
.
<servlet>
<servlet-name>Musicas</servlet-name>
<jsp-file>/Recomendacao.jsp</jsp-file>
<init-param>
<param-name>faleConosco</param-name>
<param-value>centralatendimento@nce.ufrj.br</param-value>
</init-param>
<init-param>
<param-name>areaVendas</param-name>
<param-value>vendasatendimento@nce.ufrj.br</param-value>
</init-param>
</servlet>

</web-app>
JSP Sobrepondo o jspInit()
<%!
public void jspInit() {
ServletConfig meuconfig = getServletConfig();
String emailFale = meuconfig.getInitParameter(faleConosco);
String emailVendas = meuconfig.getInitParameter(areaVendas);
ServletContext ctx = getServletContext();
ctx.setAttribute(e-mailFale, emailFale);
ctx.setAttribute(e-mailVendas, emailVendas);
}
%>
. Exemplo: Obtendo o parmetro de iniciao:
As diretivas de uma JSP
So instrues passadas para o container em
tempo de traduo de uma JSP.
Existem 3 tipos de diretivas:
page.
include.
taglib.
Diretiva page
Sintaxe:
<%@ page atributo1=valor1... atributon=valorn %>
Alguns atributos:
import
Define os comandos imports que devem ser adicionados classe gerada.
isThreadSafe
Define se a JSP deve ser SingleThreadModel (false).
contentType
Define o tipo do MIME.
isErrorPage
Define se a pgina corrente representa uma pgina de erro.
errorPage
Define a URL da pgina que tratar o erro.
Diretiva page
Alguns atributos:
language
Define a liguagem de script. Por enquanto Java.
extends
Define a superclasse de quem a JSP pode herdar.
session
Indica se a pgina ter um objeto session implcito (default =true).
buffer
Define a buferizao para o objeto out.
isELIgnored
Define se expresses EL devem ser ignoradas quando a pgina for traduzida.
Diretivas de pgina
<%@ page contentType=text/html;charset=GB2312 %>
<%@ page language=java %>
<%@ page import=java.io.* %> nico replicvel
<%@ page buffer=16kb %>
<%@ page session=false %>
<%@ page errorPage=PaginadeErro.jsp %>
<%@ page session=false buffer=16kb %>
Declarao JSP
Utilizada para definir mtodos, variveis
estticas e variveis de instncias.
Declarada fora do mtodo jspService().
Sintaxe:
<%! mtodo %>
<%! varivel; %>
Declarao JSP
<%!
String obtemHoraCorrente() {
return Calendar.getInstance().getTime().toString();
}
%>
<%! int numero=0; %>
Pode ser inserida em qualquer lugar da JSP.
Declarao JSP - exemplo
Como invocar classes em uma JSP
Como invocar classes em uma JSP
Estas classes devem ser salvas no diretrio WEB-INF/classes, sob
o diretrio da aplicao web.
Como invocar classes em uma JSP
JSP Objetos Implcitos
Uma JSP utiliza objetos que no precisam ser
explcitamente obtidos ou declarados.
API Objeto Implcito
JspWriter out
HttpServletRequest request
HttpServletResponse response
HttpSession session
ServletContext application
ServletConfig config
pageContext
JSP Objetos Implcitos
No servlet:
getServletContext().setAttribute(email,suporte);
Na JSP:
application. setAttribute(email,suporte);
No servlet:
request.setAttribute(email,suporte);
No JSP:
request.setAttribute(email,suporte);
No servlet:
request.getSession().setAttribute(email,suporte);
No JSP:
session.setAttribute(email,suporte);
JSP pageContext
Utilizado para obter, ou atribuir, valores ou
objetos de uma JSP.
Escopos:
Page (default)
Request
Session
Application
JSP pageContext
Atribuindo um valor page-scoped:
<% pageContext.setAttribute(email,suporte) %>
Atribuindo um valor session-scoped:
<% pageContext.setAttribute(email,suporte,PageContext.SESSION_SCOPE) %>
Obtendo um valor session-scoped:
<% =pageContext.getAttribute(email,PageContext.SESSION_SCOPE) %>
Atribuindo um valor application-scoped:
<% pageContext.setAttribute(email,suporte,PageContext.APPLICATION_SCOPE) %>
Obtendo um valor application-scoped:
<%=pageContext.getAttribute(email,PageContext.APPLICATION_SCOPE) %>
Achando um atributo quando se desconhece o escopo:
<% =pageContext.findAttribute(email) %>
Diretivas de incluso
Permite incluir o contedo de outros arquivos na
pgina JSP atual. Feito em tempo de traduo.
A pgina includa pode ser uma pgina esttica
(HTML) ou dinmica (JSP).
A pgina inserida tem acesso s variveis de
instncia da JSP principal.
Sintaxe:
<%@ include file=URLrelativa %>
Exemplo:
<%@ include file=POO/cabecalho.html %>
Diretivas de incluso - exemplo
Arquivo Cabecalho.htm
<HTML>
<HEAD>
<TITLE> Bem-Vindo </TITLE>
</HEAD>
<BODY>
Arquivo Rodape.htm
</BODY>
</HTML>
Diretivas de incluso - exemplo
Diretivas de incluso - exemplo
Actions
Existem dois tipos:
<jsp:action />
Incluso feita em tempo de execuo. o padro.
<x:action />
x identifica a tag.
Resumo dos elementos em uma JSP
<% %> scriptlet JSP.
Para inserir comandos em Java.
<%= %> expresso JSP.
Para apresentar o resultado de uma expresso.
<%@ %> diretiva JSP.
Para atribuir condies aplicveis a toda JSP.
<%! %> declarao JSP.
Para declarar variveis de instncia e mtodos na JSP.
<jsp: /> ou <x: />
Para realizar uma ao.
JSP Melhorando a carga inicial
<servlet>
<servlet-name>RecepcaoJspServlet</servlet-name>
<jsp-file>/Recepcao.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
JSP Tornando a JSP a pgina inicial
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Filtros
Possibilita interceptar um request antes de ele
chegar ao servlet.
Possibilita interceptar um response antes de ele
chegar ao cliente.
Tem acesso aos objetos ServletRequest e
ServletResponse.
Pode ser usado como dispositivo de criptografia,
compresso de dados, validao de entrada de
dados etc.
Filtros
Invocados pelo container .
Declarados no web-xml so desconhecidos pelo
desenvolvedor.
O web-xml associa o filtro ao servlet.
Um filtro pode estar associado a mais de um servlet.
possvel colocar um conjunto de filtros em
cadeia. Um filtro apontar para o outro, refinando a
filtragem.
Filtros
Cliente
Container
Filtro
Servlets
Os filtros podem:
checar segurana;
reformatar requests e corpos;
comprimir/descomprimir dados;
auditar requets e responses;
colocar anexos no response;
Filtros - encadeamento
Cliente
Container
Filtro1
Servlet
Filtron Filtro2
Os filtros so interindependentes, um desconhece a existncia do outro;
Filtros interfaces
So utilizadas 3 interfaces do pacote
javax.servlet:
Filter.
FilterConfig.
FilterChain.
A interface Filter
Precisa ser implementada para se escrever um filtro.
Cada invocao de um filtro dispara uma thread.
O ciclo de vida de um filtro representado pelos
mtodos:
init(FilterConfig filterConfig).
doFilter(ServletRequest request,
ServletResponse response,
FilterChain cadeia)
destroy().
A interface Filter
O filtro adquire vida quando o mtodo init()
invocado pelo container. Este mtodo executado
apenas na primeira chamada do filtro.
No mtodo doFilter() onde as operaes do filtro
so executadas.
O container chama este mtodo sempre que
solicitado o servlet associado ao filtro.
Os objetos request e response podem ser obtidos e
modificados pelo mtodo doFilter().
A interface FilterConfig
Passa valores de iniciao para o filtro
atravs dos parmetros obtidos no web-xml.
Possui 4 mtodos:
getFilterName()
getInitParameter(String parameterName)
getInitParameterName()
getServletContext()
Filtros web-xml
<filter>
<filter-name>GravaLog</filter-name>
<filter-class>web.GravaLogFiltro</filter-class>
<init-param>
<param-name>ArquivoLog</param-name>
<param-value>arquivolog.txt</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>GravaLog</filter-name>
<servlet-name>MelhoresBandas</servlet-name>
</filter-mapping>
Filtros web-xml
Os filtros podem capturar include, forward e error:
<filter-mapping>
<filter-name>GravaLog</filter-name>
<servlet-name>MelhoresBandas</servlet-name>
<dispatcher>REQUEST</disptacher> // default
<dispatcher>INCLUDE</disptacher>
<dispatcher>FORWARD</disptacher>
<dispatcher>ERROR</disptacher>
</filter-mapping>
Filtros exemplo
1. Um filtro apresentando os seus ciclos de
vida:
Nome do filtro Ciclo Vida
Nome da classe do filtro CicloVida.class
Nome do servlet filtrado FilteredFilter
Nome da classe do servlet FilteredFilter.class
A distribuio descritiva
O filtro CicloVida
Cdigo extrado, e modificado, do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Filtros -
console TomCat
A distribuio descritiva
um filtro para dois servlets
Filtros - exemplo
2. Um filtro suprimindo espaos em branco de
campos de uma entrada de dados via web:
Nome do filtro Trim Filtro
Nome da classe TrimFiltro.class
Nome do servlet TrimFilteredServlet
Nome da classe TrimFilteredServlet.class
Filtros - exemplo
Filtros - exemplo
A distribuio descritiva
O filtro TrimFiltro
Cdigo extrado, e modificado, do livro: Java para Web com Servlets, JSP e EJB, de Budi Kurniawan.
Filtrando a resposta - exemplo
3. Filtro de resposta para anexar um cabealho e um
rodap a um servlet.
Nome do filtro Response Filter
Nome da classe ResponseFilter.class
Nome do servlet ResponseFilterServlet
Nome da classe ResponseFilterServlet.class
Filtrando a resposta
Deve ser adicionado um cdigo aps a
chamada do mtodo doFilter.
Aps a execuo do servlet o controle
retorna para o filtro.
doFilter()
cdigo
Servlet
A distribuio descritiva
O filtro ResponseFilter
O servlet ResponseFilteredServlet
Filtrando a resposta - exemplo
Fazendo download de um arquivo
Passos necessrios:
Atribuir ao setContentType, do objeto response,
o valor application/octet-stream.
Atribuir ao setHeader, do response, o valor
content-disposition especificando o nome do
arquivo para download.
Escrever o cdigo Java para ler o arquivo,
importando o pacote java.io.FileInputStream.
Fazendo download de um arquivo
Servlet
Fazendo download de um arquivo
Servlet
Fazendo download de um arquivo
JSP
Fazendo refresh automtico de uma
pgina
Atravs do objeto response:
response.setIntHeader(refresh,tempo em segundos)
Atravs de um META comando (na JSP):
<META HTTP-EQUIV=REFRESH
CONTENT=tempo-em-segundos>
Fazendo refresh automtico de uma
pgina - exemplo
Distribuindo a aplicao
Utiliza-se o Web Archive.
No TomCat o nome da arquivo WAR torna-se o
nome da aplicao.
Sob o diretrio da aplicao emitir o comando:
jar -cvf nome-da-aplicao.war *
Enviar o arquivo war gerado para o diretrio
webapps do TomCat de destino.
O TomCat alvo descomprime o arquivo e cria o
diretrio da aplicao.
JavaBeans
Abordagem centrada em componentes.
Quando utilizados em uma aplicao web
incorpora parte da lgica do negcio.
Estimula a reutilizao.
Designer utiliza action tags para chamar os
beans em uma pgina JSP.
Como codificar um JavaBean
Regras para uma classe ser um JavaBean:
Precisa ter um construtor sem argumentos.
No pode declarar uma varivel de instncia como
sendo pblica. Podem ser privates ou protecteds.
Precisa conter mtodos get e set para obter acesso as
suas variveis de instncia.
Mtodos que acessam variveis de instncia do tipo
boolean so prefixados com is.
Servlet passando parmetros
O Servlet:
public void doPost(.){
String nome = request.getParameter(login);
request.setAttribute(login,login);
RequestDispatcher vista=request.getRequestDispatcher(apresenta.jsp);
vista.forward(request,response);
A JSP:
<html><body>
<%= request.getAttribute(login) %> <br>Obrigado pela sua visita</br>
</body></html>
Ser apresentado, por exemplo:
Raquel
Obrigado pela sua visita
Servlet passando parmetros
O Servlet:
public void doPost(.){
Aluno aluno = new Aluno();
aluno.setNome(Raquel);
request.setAttribute(aluno,aluno);
RequestDispatcher vista=request.getRequestDispatcher(apresenta.jsp);
vista.forward(request,response);
A JSP:
<html><body>
<%= request.getAttribute(aluno) %> <br>Obrigado pela sua visita</br>
</body></html>
Ser apresentado, por exemplo:
Aluno@289d34
Obrigado pela sua visita
Servlet passando parmetros
O Servlet:
public void doPost(.){
Aluno aluno = new Aluno();
aluno.setNome(Raquel);
request.setAttribute(aluno,aluno);
RequestDispatcher vista=request.getRequestDispatcher(apresenta.jsp);
vista.forward(request,response);
A JSP:
<html><body>
<% Aluno aluno = (Aluno) request.getAttribute(aluno); %>
<%= aluno.getNome() %>
<br>Obrigado pela sua visita</br></body></html>
Ser apresentado:
Raquel
Obrigado pela sua visita
O JavaBean Aluno
package estudante;
public class Aluno{
private String nome;
public String getNome(){
return this.nome;
}
public void setNome(String nome){
this.nome = nome;
}
}
Utilizando action com JavaBeans
<html><body>
<%@ page import=estudante.*" %>
<jsp:useBean id=aluno class=estudante.Aluno scope=request/>
<jsp:getProperty name=aluno property=nome />
<br>Obrigado pela sua visita</br></body></html>
O que significa?
useBean identifica o action;
id identifica o objeto, mesmo efeito que request.setAttribute(aluno, aluno);
class identifica a classe JavaBean;
scope identifica o escopo do atributo;
getProperty identifica a ao;
name identifica o objeto alvo;
property identifica o nome da propriedade que se deseja recuperar;
A action tag useBean
Sintaxe:
<jsp:useBean id=Name class=package.class scope=value />
Valores possveis do escopo:
Page o valor vlido somente nesta pgina. o default.
Request o valor deve ser capturado de um objeto request.
Session o valor deve ser capturado de um objeto session.
Application o valor deve ser capturado de um objeto context.
A tags getProperty e setProperty
getProperty obtm o valor de um atributo de
um JavaBean:
<jsp:getProperty name=aluno property=nota />
setProperty atribui uma valor para um
atributo de um JavaBean:
<jsp:setProperty name=aluno property=nota value=8.5 />
O atributo param
Utilizado para alterar propriedades de um
JavaBean a partir de um objeto request.
Sintaxe:
<jsp:setProperty name=bean property=propertyName param=paramName />
Exemplo:
<jsp:setProperty name=aluno property=Nome param=PrimeiroNome />
Scriptlet correspondente:
<% aluno.setNome(request.getParameter(PrimeiroNome));%>
O atributo param
A pgina inicial:
O atributo param
A pgina que acionar o JavaBean:
A classe JavaBean:
package POO;
public class VerNome{
private String nome;
public String getNome(){
return this.nome;
}
public void setNome(String nome){
this.nome = nome;
}
}
O atributo param
Passando todos os parmetros obtidos
<html>
<body>
<%@ page import=estudante.*" %>
<jsp:useBean id=aluno class=estudante.Aluno />
<jsp:setProperty name=aluno property=* />
</body>
</html>
Vlido para todos aqueles valores que possuem nomes iguais aos atributos.
Funciona como um param genrico.
Capturando um atributo de um atributo
<%= (Pedido) request.getAttribute(pedido).getPizza().getPreco() %>
O elemento action padro no atende!
A soluo Expression Language!
<%@ page import="model.*" %>
<%@ page isELIgnored="false" %>
<html>
<body>
<h1 align =center="center"> Testa BeanEL JSP</h1>
<br>Pizza muito barata ${pedido.pizza.preco}
</br>
</body>
</html>
Expression Language - EL
Possibilita aos designers desconhecerem Java.
Oferece uma maneira mais simples para invocar
cdigo Java em uma JSP.
O cdigo fica em algum lugar e invocado pela
EL.
Algum lugar pode ser um JavaBean, uma classe
com mtodos estticos ou um Tag Handler.
Expression Language - EL
Sintaxe:
${expresso}
Exemplo:
Nosso telefone: <%= (String)application.getAttribute(fone) %>
Nosso telefone: ${applicationScope.fone}
Expression Language - EL
O primeiro campo varivel da expresso um objeto implcito ou um
atributo do escopo.
Se o primeiro campo um atributo ele pode ser qualquer um armazenado
em um dos quatro escopos.
Objetos implcitos vlidos:
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
cookie
initParam
pageContext ( uma referncia para um objeto pageContext)
Obs.: Com exceo do pageContext todos os outros objetos implcitos guardam um mapa com
um par chave/valor .
Expression Language - EL
O segundo campo pode ser separado do primeiro campo por um ponto.
O segundo campo representa um atributo de um bean ou um valor de um
Map.
A alternativa ao ponto o operador [].
${aluno[nome] } ou
${aluno.nome}
Utilizando o [] o primeiro campo pode ser um Map, um bean, um List ou
um array.
Um valor colocado entre [] pode ser uma chave de um Map, um atributo
de um bean ou ndice de um List ou de um array.
Expression Language - EL
O Servlet:
String[] grupoRock = {Led Zeppelin, Baro Vermelho, The Who,The Police};
request.setAttribute(bandas, grupoRock);
O JSP:
<%@ page import="model.*" %>
<%@ page isELIgnored="false" %>
<html>
<body>
<h1 align =center="center"> Testa BeanEL JSP</h1>
<br> A melhor banda: ${bandas[0]} </br>
</body>
</html>
Expression Language - EL
O Servlet:
Map testaMap = new HashMap();
testaMap.put(Terror, Drcula );
testaMap.put(Acao, Exterminador do Futuro );
testaMap.put(Humor, Convidado Bem Trapalho );
request.setAttribute(filmes, testaMap);
O JSP:
<%@ page import="model.*" %>
<%@ page isELIgnored="false" %>
<html>
<body>
<h1 align =center="center"> Testa BeanEL JSP</h1>
<br>Voc selecionou: ${filmes.Humor}</br>
</body>
</html>
Expression Language - EL
Scriplets podem ser inibidos no web-xml.
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>
true
</scripting-invalid>
</jsp-property-group>
</jsp-config>
Expression Language - EL
Els podem ser inibidos no web-xml.
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>
true
</el-ignored>
</jsp-property-group>
</jsp-config>
Ou
<%@ page isELIgnored =true %>
EL Objetos Implcitos
Capturando um request parameter:
${param.nome-do-request-parameter}
Capturando um request parameter de mltiplos
valores:
${paramValues.nome-do-request-parameter[ndice]}
Capturando um valor do header:
${header.nome-do-header}
Capturando o valor de um cookie:
${cookie.nome-do-cookie.value}
Expression Language - EL
EL pode invocar mtodos estticos de uma classe.
Passos necessrios:
Codificar a classe com um mtodo esttico pblico;
Codificar um arquivo Tag Library Descriptor(TLD);
Colocar a diretiva taglib na JSP;
Acionar o mtodo atravs da EL;
Expression Language - EL
package model;
public class JogaDado{
public static int jogarDado(){
return (int)(Math.random() * 6) +1;
}
}
A classe JogaDado com o mtodo esttico jogarDado:
Expression Language - EL
A TLD (filename=nome.tld, pode ficar no mesmo diretrio da web-xml):
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.2</tlib-version>
<uri>TestaTagDados</uri>
<function>
<name>jogando</name>
<function-class>model.JogaDado</function-class>
<function-signature>
int jogarDado()
</function-signature>
</function>
</taglib>
Expression Language - EL
Colocando a taglib na JSP acionando o mtodo na EL:
<%@ page import="model.*" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="joga" uri="TestaTagDados" %>
<html>
<body>
<br>A jogada : ${joga:jogando()}</br>
</body>
</html>
A action include
Sintaxe:
<jsp:include page=nome-da-pgina />
A pgina includa em tempo de execuo.
No tem acesso s variveis de instncia de
outras pginas participantes.
A pgina includa trabalha isoladamente.
A action forward
Sintaxe:
<jsp:forward page=nome-da-pgina />
Utilizada para direcionar o controle para
outra JSP, servlet ou pgina HTML.
Tudo que foi escrito antes do forward no
ser apresentado.
Para apresentar utilizar: out.flush().
JSP Standard Tag Library - JSTL
Permite realizar tarefas no suportadas pelas Els e
pela action padro.
Necessrio instalar o JSTL 1.1.
No padro na especificao do JSP 2.0.
Possui as bibliotecas jstl.jar e standard.jar.
Podem ser copiadas de Tomcat/webapps/jsp-
examples/WEB-INF/lib/.
Devem ir para Tomcat/webapps/sua-
aplicacao/WEB-INF/lib.
JSTL <c:forEach>
<c:forEach></c:forEach>
Utilizado para iteragir sobre arrays ou colees.
Sintaxe:
<c:forEach var=varivel-de-iterao items=${nome-do-atributo}
${varivel-de-iterao}
</c:forEach>
JSTL exemplo <c:forEach>
Vector<String> vetor = new Vector<String>();
vetor.add("Flamengo" );
vetor.add("Vasco" );
vetor.add("Botafogo" );
vetor.add("Fluminense" );
request.setAttribute("times", vetor);
RequestDispatcher vista =
request.getRequestDispatcher("TestaBeanEL.jsp");
vista.forward(request, response);
<%@ page import="model.*" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<c:forEach var="vetortimes" items="${times}">
<br>O clube : ${vetortimes}
</c:forEach>
</body>
</html>
JSTL <c:if >
<c:if></c:if>
Permite realizar operaes condicionais.
Sintaxe:
<c:if test=${nome-do-atributo op-relacional valorComparado}>

</c:if>
JSTL exemplo <c:if>
List<String> vetor = new ArrayList<String>();
vetor.add("Flamengo" );
vetor.add("Vasco" );
vetor.add("Botafogo" );
vetor.add("Fluminense" );
request.setAttribute("times", vetor);
String login="admin";
request.setAttribute("login", login);
<%@ page import="model.*" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<hr>${times} </hr>
<c:if test="${login eq 'admin'}">
<jsp:include page="Administrador.jsp"/>
</c:if>
</body>
</html>
JSTL - Operadores
Aritmticos:
+
-
*
/ ou div
% ou mod
Lgicos:
&& ou and
|| ou or
! ou not
Relacionais:
== ou eq
!= ou ne
< ou lt
> ou gt
<= ou le
>= ou ge
JSTL
<c:choose> <c:when><c:otherwise>
<c:choose>
<c:when ><c:/when>

<c:when.><c:/when>
< c:otherwise> >< /c:otherwise>
</c:choose>
Utilizado para suprir a ausncia do <c:else>.
Sintaxe:
<c:when test=${nome-do-atributo op-relacional valorComparado} >
Operaes
</c:when>
JSTL exemplo
<c:choose> <c:when> <c:otherwise>
List<String> vetor = new ArrayList<String>();
vetor.add("Flamengo" );
vetor.add("Vasco" );
vetor.add("Botafogo" );
vetor.add("Fluminense" );
request.setAttribute("times", vetor);
String login=usuario";
request.setAttribute("login", login);
<%@ page import="model.*" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<hr>${times} </hr>
<c:choose>
<c:when test="${login eq 'admin'}">
<jsp:include page="Administrador.jsp"/>
</c:when>
<c:otherwise>
<jsp:include page="UsuarioNormal.jsp"/>
</c:otherwise>
</c:choose>
</body>
</html>
JSTL <c:set>
<c:set></c:set>
Utilizado para atribuir valores para variveis de
escopo ou para beans.
Pode ou no possuir um corpo.
JSTL <c:set>
Com variveis de escopo
Sintaxe (sem corpo)
<c:set var=nome-da-varivel scope=escopo value=valor/>
Sintaxe (com corpo)
<c:set var=nome-da-varivel scope=escopo>
valor
</c:set>
JSTL <c:set>
Com bean
Sintaxe (sem corpo)
<c:set target=${Bean} property=nome-do-atributo value=valor />
Sintaxe (com corpo)
<c:set target=${Bean} property=nome-do-atributo>
valor
</c:set>
JSTL <c:remove>
<c:remove>
Utilizado para remover atributos de escopo.
Sintaxe:
<c:remove var=nome-do-atributo scope=escopo />
JSTL <c:import>
<c:import>
Utilizado para incluir uma pgina localizada fora do
ambiente da aplicao web.
Outras formas de incluso:
<%@ include file=pgina %> (esttica)
<jsp:include page=pgina /> (dinmica)
Sintaxe:
<c:import url=url /> (dinmica)
JSTL <c:param>
<c:param>
Utilizado para personalizar pginas que esto
sendo includas.
Aplicvel com <jsp:include> ou <c:import>.
Sintaxe:
<c:param name=nome-do-parametro" value=valor-parametro" />
Na pgina a ser incluida:
${param.nome-do-parametro}
JSTL <c:param>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<c:import url="Cabecalho.jsp">
<c:param name="mensagem" value="A melhor Pizza do Fundo" />
</c:import>
<br></br>
<br> Preos Promocionais!!! </br>
</body>
</html>
<%@ page isELIgnored="false" %>
<html>
<head>
<TITLE> Nova Pizzaria </TITLE>
</head>
<body>
<h1 align =center="center"> Nova Pizzaria</h1>
${param.mensagem}
</body>
</html>
JSTL Pgina de erro
Evita que sejam expostos erros para os clientes.
<%@ page isErrorPage=true %>
Indica que esta uma pgina de erro.
<%@ page errorPage=PaginaDeErro.jsp %>
Indica que caso ocorra um erro o Container deve desviar para
PaginaDeErro.jsp.
Inconvenientes:
Todas as pginas precisam conter a diretiva.
Todos os erros sero apresentados da mesma forma.
JSTL Pgina de erro na web-xml
Define-se na web-xml o tipo da exceo e
para qual pgina ser feito o desvio.
Pode ser sobreposto pela diretiva errorPage.
Vlido para toda a aplicao.
JSTL Pgina de erro na web-xml
Tratando uma exceo lanada:
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/PaginaAritmetica.jsp</location>
</error-page>
Tratando uma pgina no existente:
<error-page>
<error-code>404</error-code>
<location>/PaginaNaoEncontrada.jsp</location>
</error-page>
JSTL Pgina de erro na web-xml
<html>
<body>
<br><h3> Voc solicitou uma pgina que no existe!!!</h3></br>
</body>
</html>
JSTL Pgina de erro na web-xml
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
int i=10;
i/=0;
}
<html>
<body>
<br> Voc executou um operao aritmtica invlida!!! </br>
</body>
</html>
JSTL <c:catch >
<c:catch></c:catch>
Permite capturar o erro na prpria JSP.
Ao ser capturado desviado para a pgina de
erro.
Sintaxe:
<c:catch>
instrues sob risco
</c:catch>
JSTL exemplo <c:catch >
<%@ page isErrorPage="true" %>
<html>
<body>
<br> Voc executou um operao aritmtica invlida!!! </br>
</body>
</html>
<%@ page errorPage="PaginaAritmetica.jsp" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<c:catch>
<% int i=10/0; %>
</c:catch> <br></br>
</body>
</html>
Personalizando as tags
Elementos que descrevem uma tag esto contidos
na TLD.
Uma tag possui um prefixo e um nome.
Sintaxe:
<prefixotag:nomedatag />
Diretiva taglib:
<%@ taglib uri=nomedaTLD prefix=prefixotag %>
Personalizando as tags
TLD
A estrutura da TLD:
Igual para todas as TLDs:
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
Identifica a verso da TLD:
<tlib-version>1.0</tlib-version>
Identifica a TLD:
<uri>MinhasTags</uri>
Personalizando as tags
TLD
A estrutura da TLD:
Interior da tag:
< tag>
<description> Informa a data corrente </description> // propsito da tag
<name>datadehoje</name> // nome da tag
<tag-class>model.ObtemDataHoje</tag-class> // nome da classe que ser ativada pelo Container
<body-content>empty</body-content> informa se a tag tem ou no corpo
</tag>
< tag>
<description> Informa a hora atual </description> // propsito da tag
<name>horaagora</name> // nome da tag
<tag-class>model.ObtemHoraAgora</tag-class> // nome da classe que ser ativada pelo Container
<body-content>empty</body-content> informa se a tag tem ou no corpo
</tag>
</taglib>
Personalizando as tags
<body-content>
Valores possveis para a tag <body-content>:
empty
A tag no possui corpo.
scriptless
A tag suporta apenas EL e actions.
tagdependent
A tag somente suporta plain text.
JSP
A tag suporta qualquer coisa permitida em uma JSP.
Personalizando as tags
JSP
Como fica a JSP:
<html>
<body>
<%@taglib prefix="estaeminha" uri="MinhasTags" %>
<h3> A data : <estaeminha:datadehoje/> </h3>
<h3> A hora : <estaeminha:horaagora/> </h3>
</body>
</html>
Personalizando as tags
as classes de apoio
Devem ser importados os pacotes
javax.servlet.jsp.JspException e
javax.servlet.jsp.tagext.SimpleTagSupport.
Esto em Tomcat/common/lib/JSP-API.jar.
Deve herdar da classe SimpleTagSupport.
Deve ser sobreescrito o mtodo doTag().
Personalizando as tags
as classes
package model;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.text.DateFormat;
import java.util.*;
public class ObtemDataHoje extends SimpleTagSupport{
public void doTag() throws JspException, IOException {
Calendar data = new GregorianCalendar();
Date now = data.getTime();
DateFormat shortDate = DateFormat.getDateInstance(DateFormat.SHORT);
String hoje = shortDate.format(now);
getJspContext().getOut().write(hoje);
}
}
Personalizando as tags
as classes
package model;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.text.DateFormat;
import java.util.*;
public class ObtemHoraAgora extends SimpleTagSupport{
public void doTag() throws JspException, IOException {
Calendar data = new GregorianCalendar();
Date now = data.getTime();
DateFormat shortTime = DateFormat.getTimeInstance(DateFormat.SHORT);
String horaatual = shortTime.format(now);
getJspContext().getOut().write(horaatual);
}
}
Personalizando as tags
o resultado
Personalizando as tags
tag com atributo
< tag>
<description> Informa a data corrente </description> // propsito da tag
<name>datadehojecliente</name> // nome da tag
<tag-class>model.ObtemDataHojeCliente</tag-class> // nome da classe que ser ativada pelo Container
<body-content>empty</body-content> informa se a tag tem ou no corpo
<attribute>
<name> cliente </name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
Personalizando as tags
tag com atributo
Como fica agora a JSP:
<html>
<body>
<%@ page isELIgnored="false" %>
<%@taglib prefix="estaeminha" uri="MinhasTags" %>
<h3> <estaeminha:datadehojecliente cliente="${nomeCliente}"/> </h3>
</body>
</html>
Personalizando as tags
o servlet
package web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class DataHojeClienteServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String nome="Joo Silva";
request.setAttribute("nomeCliente",nome);
RequestDispatcher vista = request.getRequestDispatcher("InformaDataCliente.jsp");
vista.forward(request, response);
}
}
Personalizando as tags
a classe
package model;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.text.DateFormat;
import java.util.*;
public class ObtemDataHojeCliente extends SimpleTagSupport{
private String cliente;
public void doTag() throws JspException, IOException {
Calendar data = new GregorianCalendar();
Date now = data.getTime();
DateFormat shortDate = DateFormat.getDateInstance(DateFormat.SHORT);
String hoje = shortDate.format(now);
getJspContext().getOut().write("Sr.: " + cliente + " hoje " + hoje);
}
public void setCliente(String cliente) {
this.cliente = cliente;
}
}
Personalizando as tags
o resultado
Prefixos reservados para JSTLs
jsp:
jspx:
java:
javax:
servlet:
sun:
sunw:
Personalizando as tags
tag com um corpo
< tag>
<description> Informa as bandas </description> // propsito da tag
<name>bandas</name> // nome da tag
<tag-class>model.ObtemBandas</tag-class> // nome da classe que ser ativada pelo Container
<body-content>scriptless</body-content> informa se a tag tem ou no corpo
<attribute>
<name> cliente </name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
Personalizando as tags
JSP
Como fica a JSP:
<html>
<body>
<%@ page isELIgnored="false" %>
<%@taglib prefix="estaeminha" uri="MinhasTags" %>
<h3> <estaeminha:bandas cliente="${nomeCliente}"> </h3>
<tr><td> <p>${bandas}</p></td></tr>
</estaeminha:bandas>
</body>
</html>
Personalizando as tags
a classe
package model;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.util.*;
public class ObtemBandas extends SimpleTagSupport{
private String cliente;
private Vector<String> bandas;
public void doTag() throws JspException, IOException {
bandas = new Vector<String>();
bandas.add("Led Zeppelin");
bandas.add("Baro Vermelho");
bandas.add("Deep Purple");
bandas.add("Black Sabbath");
bandas.add("Yes");
getJspContext().getOut().write("Sr. " + cliente + " as bandas so:");
for (String nome:bandas){
getJspContext().setAttribute("bandas", nome);
getJspBody().invoke(null);
}
}
public void setCliente(String cliente) {
this.cliente = cliente;
}
}
Personalizando as tags
o servlet
package web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class BandasClienteServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String nome="Joo Silva";
request.setAttribute("nomeCliente",nome);
RequestDispatcher vista = request.getRequestDispatcher("InformaBandas.jsp");
vista.forward(request, response);
}
}
Personalizando as tags
o resultado
Usando a API JavaMail para enviar
email
A API JavaMail uma interface que facilita
os desenvolvedores escreverem cdigo Java
que enviam, automaticamente, e-mails.
Interage com a API JavaBeans Activation
Framework.
Enviando email - funcionamento
Mail Client
Software
Mail Client
Software
Mail Server
Software
Mail Server
Software
Cliente Enviando
Cliente Recebendo
SMTP
Servidor Enviando
POP/IMAP
Servidor Recebendo
Ex.: software de email : OutLook Express, Eudora etc.
Email server: fornecido pelo provedor de acesso internet.
Usando a API JavaMail para enviar
email - protocolos
SMTP (Simple Mail Transfer Protocol)
Utilizado para enviar uma mensagem de um servidor de email para
outro.
POP (Post Office Protocol)
Utilizado para recuperar mensagens de um servidor de email.
Transfere todas as mensagens de um servidor de email para o cliente.
Est em sua verso 3 e chamado de POP3.
IMAP (Internet Message Access Protocol)
Utilizado por servios de email baseados na web tais como Yahoo e
Hotmail. Permite ao web browser ler mensagens armazenadas em
um diretrio de um servidor de email. Est em sua verso 4 e
chamado de IMAP4.
MIME (Multipurpose Internet Message Extension)
Especifica o tipo de contedo que pode ser enviado como mensagem
ou como arquivo anexado.
Usando a API JavaMail para enviar
email
Para utilizarmos as APIs so necessrios os
seguintes arquivos:
mail.jar
Contm as classes Java da API JavaMail.
activation.jar
Contm as classes Java da API JavaBean Activation FrameWork.
Devem residir no diretrio jre/lib/ext do Java SDK.
No J2EE estes arquivos j esto disponveis.
Os 4 passos para enviar um email
Criar um sesso de email.
Criar uma mensagem.
Enderear a mensagem (identificar
remetente e destinatrio).
Enviar a mensagem.
Criando uma sesso de email
Atividades necessrias:
Identificar o host onde reside o servidor de email. Usar
localhost se estiver na mesma mquina da aplicao.
Criar um objeto Properties que conter as propriedades
necessrias para enviar um email.
Especificar uma propriedade para a sesso utilizando-se
o mtodo put de Properties.
Criar um objeto Session, que define a sesso de mail,
chamando o mtodo getDefaultInstance.
Criando uma sesso de email
A classe Session integra o pacote javax.mail.
A classe Properties integra o pacote
javax.util.
Criando uma mensagem
Atividades necessrias:
Utilizar a classe MimeMessage para criar uma mensagem. Fica
armazenada no pacote javax.mail.internet.
Criar um objeto MimeMessage fornecendo uma objeto Session.
Utilizar um Authenticator para validar o usurio e a senha.
Utilizar os mtodos setSubject e setText para especificar o propsito
do email e seu texto. O texto enviado assume o tipo text/plain para o
MIME.
Utilizar o mtodo setContent se desejar anexar um documento.
Endereando a mensagem
Atividades necessrias:
Definir um endereo de email atravs da classe
InternetAddress, integrante do pacote javax.mail.internet.
Utilizar o mtodo setFrom do objeto MimeMessage para
atribuir o endereo From.
Utilizar o mtodo setRecipient para atribuir o endereo
To.
Enviando uma mensagem
Atividades necessrias:
Utilizar o mtodo send da classe Transport para
enviar a mensagem para o email server.
Cdigo que envia um e-mail e anexa
um arquivo
Cdigo que envia um e-mail e anexa
um arquivo
Cdigo que envia um e-mail e anexa
um arquivo
Enviando e-mail Outra Soluo
import java.io.IOException;
import java.io.PrintStream;
import sun.net.smtp.SmtpClient;
public class EnviaEmail {
public void sendEmail() {
String from = mariaeduarda@dominio.com.br";
String to = joao@gmail.com";
try {
SmtpClient client = new SmtpClient(nome-servidor -smtp");
client.from(from);
client.to(to);
PrintStream msg = client.startMessage();
msg.println("Subject: Assunto");
msg.print("\r\n");
msg.println(frase conteudo");
msg.println(frase conteudo");
client.closeServer();
} catch (IOException e) {
System.out.println("error" + e);
}
}
}
AJAX
Termo cunhado por Jesse James Garrett.
No um acrnimo de Asynchronous
JavaScript and XML.
No uma soluo proprietria ou um
produto.
Recurso utilizado para construir aplicaes
para a Web que processam requisies do
usurio imediatamente.
AJAX
Combina recursos das seguintes ferramentas:
JavaScript
DHTML
XML
CSS
DOM
AJAX
Permite que o contedo da pgina Web seja
atualizado assim que o usurio realiza alguma
ao.
Exemplos de ao:
Digitar alguma coisa em algum campo.
Clicar em algum boto.
Focar algum campo.
Apenas pores especficas da pgina Web
so atualizadas.
AJAX
Passos para criar um requisio assncrona:
Associar uma funo javaScript para o evento alvo;
Criar um objeto request(especfico para cada
browser);
Enviar a requisio para o servidor web informando
ao browser que uma operao assncrona;
Tratar o response enviado pelo servidor Web;
Atualizar a poro da pgina.
AJAX
Eventos suportados pelo JavaScript:
Carga inicial de um documento ou imagem;
Descarga de um documento;
Foco ou perda do foco de elementos especficos;
Click em elementos especficos;
Duplo click em um documento ou em um link.
Pressionamento de uma tecla;
Movimento do mouse sobre certo elemento;
AJAX - Exemplo
AJAX - Exemplo
Criao do objeto request:
var request = null;
function criaRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
if (request == null)
alert("Erro na criao do objeto request!");
}
AJAX - Exemplo
Envio da requisio para o servidor web informando ao
browser que uma operao assncrona:
function getCep() {
var cep = document.getElementById("cep").value;
var url = "ServletCep?cep=" + escape(cep);
request.open("GET", url, true);
request.onreadystatechange = atualizaPagina;
request.send(null);
}
AJAX - Exemplo
Todo o controle no cliente feito pelo browser e no pelo
javaScript.
Cdigos que representam os estados do andamento de um
request:
0
Conexo ainda no iniciada;
1
Conexo iniciada;
2
Response em andamento;
3
Obtendo o contedo do response;
4
Response totalmente recebido;
AJAX - Exemplo
Tambm deve ser verificado o que veio de
resposta pois o request pode ter sido mal
sucedido.
O cdigo do status de um request bem
sucedido 200.
AJAX - Exemplo
Tratar o response enviado pelo servidor Web;
Atualizar a poro da pgina.
AJAX - Exemplo
AJAX - Exemplo
Parte HTML atualizada:
AJAX - Exemplo
Agora, utilizando POST:
O restante no muda!
AJAX - XML
Utilizando XML para a transmisso/recepo
dos dados.
Mudanas no servlet:
Incluir as instrues:
response.setHeader("Content-Type:"," text/xml");
out.println("<?xml version='1.0' encoding='utf-8'?>");
AJAX Servlet XML
boolean retorno=CadastroCep.consultar(cep, "ceps");
response.setHeader("Content-Type:"," text/xml");
out.println("<?xml version='1.0' encoding='utf-8'?>");
if (retorno){
out.println("<retornocep>");
out.println("<Logradouro>" + cep.getLogradouro() + "</Logradouro>");
out.println("<Endereco>" + cep.getEndereco() + "</Endereco>");
out.println("<Bairro>" + cep.getBairro() + "</Bairro>");
out.println("<Cidade>" + cep.getCidade() + "</Cidade>");
out.println("<Estado>" + cep.getEstado() + "</Estado>");
out.println("</retornocep>");
}
else{
out.println("<retornocep>");
out.println("<Logradouro></Logradouro>");
out.println("<Endereco></Endereco>");
out.println("<Bairro></Bairro>");
out.println("<Cidade></Cidade>");
out.println("<Estado></Estado>");
out.println("</retornocep>");
}
AJAX
Mudanas na recepo:
Alterar a propriedade do request para:
request.responseXML;
AJAX
AJAX - JSON
o acrnimo de JavaScript Object Notation.
JavaScript puro!
Utilizado para realizar a troca de dados entre
aplicativos.
Dados podem estar em:
Um objeto(par nome-valor)
Um array(valor)
Um string
Um nmero
AJAX - JSON
Site oficial: www.JSON.org.
Para escrever JSON em um programa Java deve ser
baixado o pacote json_simple.jar localizado em
www.JSON.org/java/json_simple.zip.
Pacote deve ser copiado para java/jdk/jre/lib/ext e
para tomcat/lib.
Incluir no cdigo do servlet:
import org.json.simple.*;
AJAX - JSON
Servlet transferindo dados atravs de um objeto JSON:
boolean retorno=CadastroCep.consultar(cep, "ceps");
JSONObject obj = new JSONObject();
if (retorno){
obj.put("logradouro",cep.getLogradouro());
obj.put("endereco",cep.getEndereco());
obj.put("bairro",cep.getBairro());
obj.put("cidade",cep.getCidade());
obj.put("estado",cep.getEstado());
out.print(obj);
out.flush(); }
else{ obj.put("logradouro","");
obj.put("endereco","");
obj.put("bairro","");
obj.put("cidade","");
obj.put("estado","");
out.print(obj);
out.flush(); }
AJAX - JSON
FIM
Na luta pela vida somente os mais fortes
e os mais aptos conseguem sobreviver, e a
prpria natureza se incumbe de proceder a
essa seleo natural.
Charles Darwin

Você também pode gostar