SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008
Java Web
Ricardo Terra
rterrabh [at] gmail.com
Java Web 1
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008
CV
Java Web 2
Nome: Ricardo Terra
Email: rterrabh [at] gmail.com
www: ricardoterra.com.br
Twitter: rterrabh
Lattes: lattes.cnpq.br/ 0162081093970868
Ph.D. (UFMG/UWaterloo),
Post-Ph.D. (INRIA/Université Lille 1)
Background
Acadêmico: UFLA (desde 2014), UFSJ (1 ano), FUMEC (3 anos), UNIPAC (1 ano), FAMINAS (3 anos)
Profissional: DBA Eng. (1 ano), Synos (2 anos), Stefanini (1 ano)
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 3
Por que utilizar Servlets e JSP?
n  Muitos têm adotado esta estratégia de desenvolvimento (estão na
moda)
n  Existem diversas aplicações GUI que são utilizadas por milhões de
pessoas, porém essas aplicações possuem diversos problemas de
distribuição
q  Em uma aplicação web, você não precisará se prender aos problemas
de distribuição, pois sua aplicação funcionará em qualquer computador
que possua um browser, independente do S.O., memória, processador,
etc
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 4
Por que utilizar Servlets e JSP?
n  Nesta disciplina, vamos substituir as aplicações GUI por aplicações
Web
n  Uma aplicação web é composta de tecnologia:
q  No lado do cliente: HTML, XML, CSS, JS, etc
q  No lado do servidor: CGI, ASP, PHP, servlets, etc
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 5
Cliente e Servidor / HTTP e HTML
n  Quando um servidor responde a uma solicitação, ele geralmente
envia algum tipo de conteúdo para o browser, para que esse possa
exibí-lo
q  O formato HTML é o formato mais comum enviado como resposta para
um cliente pelo Servidor, pois esse é facilmente lido pelo browser no
cliente
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 6
Cliente e Servidor / HTTP e HTML
n  A maioria das conversas que ocorre na web entre clientes e
servidores são mantidas através do protocolo HTTP, que possibilita
conversas de requisição e resposta
n  O cliente envia uma requisição HTTP e o servidor retorna uma
resposta HTTP
q  Enfim, se você é um servidor web você fala HTTP
n  Portanto, uma conversação HTTP é uma sequência de requisição/
resposta
q  Isto é, o cliente pede uma coisa, o servidor responde, o cliente pede
outra coisa, o servidor responde...
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 7
Cliente e Servidor / HTTP e HTML
n  Requisição e resposta:
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 8
Cliente e Servidor / HTTP e HTML
n  O HTTP roda no topo da arquitetura TCP/IP
n  O HTTP é um protocolo da camada de aplicação que tem
características específicas para a web, mas ele depende de toda a
arquitetura TCP/IP para garantir que tanto a solicitação e quanto a
resposta sejam transmitidas entre o cliente e o servidor
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 9
Cliente e Servidor / HTTP e HTML
n  HTTP na camada de aplicação da arquitetura TCP/IP
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 10
Requisição e resposta
n  Principais elementos do fluxo de requisição:
q  método HTTP
q  endereço da página (URL) que está sendo acessada
q  parâmetros do formulário
n  Principais elementos do fluxo de resposta:
q  cabeçalho
n  código de status
n  Método HTTP
n  tipo do conteúdo (texto, imagem, HTML...)
q  conteúdo (o texto, a imagem, o HTML...)
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 11
Requisição e resposta
n  Requisição HTTP
q  A primeira coisa que você encontrará é o nome do método HTTP
n  O nome do método informa ao servidor o tipo de solicitação que está sendo
feita e como o resto da mensagem será formatada.
q  O protocolo HTTP possui diversos métodos, mas usaremos e
aprenderemos os mais comuns: GET e POST
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 12
Requisição e resposta
n  Método GET
q  É o método mais simples do HTTP e seu principal trabalho é pedir um
recurso
n  Pode ser qualquer tipo de recurso: uma página, uma imagem, um PDF, etc
q  O caminho até o recurso e quaisquer parâmetros adicionados à URL
serão incluídos na própria barra de endereços
q  Podemos usar o GET para formulários, porém com desvantagens:
n  O total de caracteres do GET é limitado
n  Os dados que você envia utilizando HTTP GET são anexados à URL,
portanto, seja o que for que você estiver transmitindo, ficará exposto
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 13
Requisição e resposta
n  Método POST
q  É um método mais poderoso. É um GET++. Com o POST, você pode
solicitar algo e, ao mesmo tempo, enviar os dados de um formulário
para o servidor
q  Os dados a serem enviados ao servidor estão localizados na carga útil
(payload) da mensagem e podem ser bem extensos
Pacote IPv4
q  Por isto, o POST é considerado mais seguro que o GET
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 14
Requisição e resposta
n  Enfim, para acesso a recursos utiliza-se GET e aplicações que utilizam
formulários utiliza-se POST
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 15
Requisição e resposta
n  Resposta HTTP
q  uma resposta HTTP é composta de um cabeçalho (header) e o corpo
n  o cabeçalho informa ao browser o método que está sendo utilizado, se a
solicitação obteve êxito (código) e o tipo de conteúdo está incluído no corpo
n  corpo possui o conteúdo (por exemplo, HTML) que o browser exibirá
q  o código pode ser:
n  1xx: Informativa: requisição recebida, processo em continuidade…
n  2xx: Sucesso: a ação foi recebida, entendida e aceita com sucesso
n  3xx: Redirecionamento: ação futura ainda deve ser tomada para completar
a requisição
n  4xx: Erro no cliente: requisição contém sintaxe incorreta ou não pode ser
resolvida
n  5xx: Erro no servidor: O servidor falhou ao responder uma aparente
requisição válida
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 16
Páginas estáticas x Páginas dinâmicas
n  Servidores "amam" servir páginas estáticas
q  Uma página estática é apenas um HTML que está armazenado no
servidor. Quando o usuário pede a página, o servidor simplesmente
busca a página e a envia do mesmo modo que está lá. Não processa ou
dispende recursos para entregá-la ao cliente
n  Porém, às vezes você precisa mais do que uma página estática
q  Se você precisa de páginas dinâmicas (páginas criadas no momento da
requisição, isto é, não existiam antes da solicitação) e da capacidade de
escrever/salvar dados no servidor (seja em arquivos ou em SGBDs),
você precisa de uma aplicação rodando no servidor
q  Para isso, começaremos a ver aplicações web usando Java EE
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 17
Primeiro Projeto Web
n  Para entendermos melhor como criar uma aplicação web, observe o
material "Primeiro Projeto Web" que demostra como criar uma
aplicação web completa
n  Algumas considerações:
q  O principal arquivo de uma aplicação web é o Deployment Descriptor
(DD)
n  Deployment Descriptor (descritor de implantação) é um documento XML
único por aplicação chamado web.xml que fica abaixo do diretório WEB-INF
e que contém as informações de como sua aplicação deve ser implantada
q  O Tomcat geralmente utiliza a porta 8080 para executar as aplicações
n  Geralmente, quando a aplicação entra em produção é executada na porta 80,
que é a porta do protocolo HTTP (o protocolo da Internet)
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 18
Métodos Importantes Web
n  Uma aplicação web é basicamente um servlet
q  Um servlet é uma classe que estende HttpServlet
n  Os métodos importantes de um servlet são:
q  doGet à responsável por tratar requisições GET
q  doPost à responsável por tratar requisições POST
n  Quando criamos pelo wizard do Eclipse, a aplicação já é registrada
automaticamente no DD
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 19
Métodos Importantes Web
n  Primeiramente devemos setar o tipo de conteúdo da resposta:
q  response.setContentType("text/html");
n  Para escrever no cliente devemos escrever na resposta:
q  PrintWriter out = response.getWriter();
n  Geralmente escrevemos todo o HTML:
q  out.print("<html><body>");
out.print("Agora: " + new Date());
out.print("</body></html>");
n  Mas sempre fechamos após escrever:
q  out.close();
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 20
Métodos Importantes Web
n  Existem alguns métodos que são indispensáveis para o
desenvolvimento de servlets, pois são aqueles que manipulam os
parâmetros enviados por uma requisição:
q  public String getParameter(String nomeParam)
n  Retorna o valor string de um parâmetro específico
q  Exemplo:
§  Pegando um nome, uma idade, um peso, uma profissão, uma cidade...
q  public String[] getParameterValues(String nomeParam)
n  Retorna o vetor de string de um parâmetro específico
q  Exemplo:
§  Pegando nomes de um time de futebol, notas de uma turma...
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 21
Métodos Importantes Web
n  A utilização trivial seria, logo após setar o tipo do conteúdo da
resposta, pegar todos os parâmetros da requisição e colocá-los
dentro de variáveis locais. Por exemplo:
q  String nome = request.getParameter("nome");
int idade = Integer.parseInt(
request.getParameter("idade"));
String nomes[] = request.getParameterValues("nomes");
String numeros[] = request.getParameterValues("n");
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 22
Uma metodologia simples
1.  Setar o tipo de conteúdo da resposta (setContentType)
2.  Colocar os parâmetros em variáveis locais (veja slide anterior)
3.  Obter a escrita na resposta (out = response.getWriter())
4.  Utilizar Java SE para gerar o HTML de resposta (out.print(...))
5.  Fechar a escrita na resposta (out.close())
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 23
Exemplo 01 – Exibir nome
n  Vamos submeter a seguinte URL, isso seria via o método GET:
q  /ExibirNome?nome=Carlos
n  Para iniciarmos a passagem de parâmetros, é inserido um ? e depois os
parâmetros são separados por &.
n  Ou talvez submeter via formulário, usando o método POST:
<form action="${pageContext.request.contextPath}/ExibirNome"
method="POST">
Nome: <input type="text" name="nome" /> <br />
<input type="submit" value="Enviar" />
<input type="reset" value="Limpar" />
</form>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 24
Exemplo 01 – Exibir nome
n  Como seria o código interno do método doGet (caso seja via URL)
ou do método doPost (caso seja via formulário)?
public [doPost|doGet](...) throws ... {
response.setContentType("text/html");
String nome = request.getParameter("nome");
PrintWriter out = response.getWriter();
...
out.printf("Olá %s! Seja bem vindo!", nome);
...
out.close();
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 25
Exemplo 02 – Somar
n  Vamos submeter a seguinte URL, isso seria via o método GET:
q  /Somar?x=3&y=7
n  Para iniciarmos a passagem de parâmetros, é inserido um ? e depois os
parâmetros são separados por &.
n  Ou talvez submeter via formulário, usando o método POST:
<form action="${pageContext.request.contextPath}/Somar"
method="POST">
X: <input type="text" name="x" size="6" /> <br />
Y: <input type="text" name="y" size="6" /> <br />
<input type="submit" name="evento" value="Enviar" />
<input type="reset" value="Limpar" />
</form>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 26
Exemplo 02 – Somar
n  Como seria o código interno do método doGet (caso seja via URL)
ou do método doPost (caso seja via formulário)?
public [doPost|doGet](...) throws ... {
response.setContentType("text/html");
int x = Integer.parseInt(request.getParameter("x"));
int y = Integer.parseInt(request.getParameter("y"));
PrintWriter out = response.getWriter();
...
out.printf("%d + %d = %d", x, y, (x+y));
...
out.close();
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 27
Exemplo 03a – Somar vários
n  Um único parâmetro pode receber diversos valores
n  Vamos submeter a seguinte URL, isso seria via o método GET:
q  /SomarVarios?n=3.2&n=7.1&n=3.7&n=2.7&n=5.1&n=4.7
q  A requisição acima envia vários valores no parâmetro n e o Servlet deve
ser capaz de recuperar todos eles usando não mais o método
getParameter(), mas sim, getParameterValues()
n  Recordando:
q  o método getParameter() retorna uma string
n  usado para recuperar parâmetros simples com apenas um valor
q  o método getParameterValues() retornar um vetor de string
n  usado para recuperar parâmetros com múltiplos valores
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 28
Exemplo 03a – Somar vários
n  Ou talvez submeter via formulário, usando o método POST:
<form action="${pageContext.request.contextPath}/SomarVarios"
method="POST">
Números:<br />
<input type="text" name="n" size="6" />,
<input type="text" name="n" size="6" />,
<input type="text" name="n" size="6" />,
<input type="text" name="n" size="6" />,
<input type="text" name="n" size="6" />,
<input type="text" name="n" size="6" /> <br />
<input type="submit" name="evento" value="Enviar" />
<input type="reset" value="Limpar" />
</form>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 29
Exemplo 03a – Somar vários
n  Como seria o código interno do método doGet (caso seja via URL)
ou do método doPost (caso seja via formulário)?
public [doPost|doGet](...) throws ... {
...
String[] strNumeros = request.getParameterValues("n");
double soma = 0;
for (String s : strNumeros){
soma += Double.parseDouble(s);
}
...
out.printf("SOMA: %f, soma);
...
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 30
Exemplo 03b – Exibir maior/menor
n  Com base na idéia da URL ou do formulário do Exemplo 3a é
possível fazer a exibição do maior e do menor número. Observe:
public [doPost|doGet](...) throws ... {
...
String[] strNumeros = request.getParameterValues("n");
double min, max;
min = max = Double.parseDouble(strNumeros[0]);
for (int i = 1; i < strNumeros.length; i++) {
double n = Double.parseDouble(strNumeros[i]);
if (n > max) {
max = n;
} else if (n < min) {
min = n;
}
}
...
out.printf("O menor valor é %f e o maior valor é %f", min, max);
...
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 31
Exemplo 03c – Exibir maior/menor
n  Uma observação bem importante é que o botão de submissão do
formulário também pode passar um parâmetro (como o evento a ser
realizado) e pode ser utilizado para indicar o que deve ser realizado
com os outros parâmetros passados
n  Por exemplo, vamos alterar o exemplo 03b para ter dois botões de
submissão:
n  Exibir Maior
n  Exibir Menor
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 32
Exemplo 03c – Exibir maior/menor
n  Formulário do Exemplo 03a com alterações destacadas
q  o action do formulário
q  os botões de submissão
<form action="${pageContext.request.contextPath}/ExibirMM"
method="POST">
...
<input type="submit" name="evento" value="Exibir Maior" />
<input type="submit" name="evento" value="Exibir Menor" />
...
</form>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 33
Exemplo 03c – Exibir maior/menor
n  Como ficaria o Servlet:
public [doPost|doGet](...) throws ... {
...
String[] strNumeros = request.getParameterValues("n");
String evento = request.getParameter("evento");
if (evento.equals("Exibir Maior")){
this.exibirMaior(strNumeros,out); //Chama um método local
}else if (evento.equals("Exibir Menor")){
this.exibirMenor(strNumeros,out); //Chama um método local
}
...
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 34
Exemplo 03c – Exibir maior/menor
n  E assim ficariam os métodos exibirMaior e exibirMenor
private void exibirMenor(String[] strNumeros, PrintWriter out) {
double min = Double.parseDouble(strNumeros[0]);
for (int i=1; i<strNumeros.length; i++){
double n = Double.parseDouble(strNumeros[i]);
if (n < min){
min = n;
}
}
out.printf("O menor elemento é %f", min);
}
private void exibirMaior(String[] strNumeros, PrintWriter out) {
double max = Double.parseDouble(strNumeros[0]);
for (int i=1; i<strNumeros.length; i++){
double n = Double.parseDouble(strNumeros[i]);
if (n > max){
max = n;
}
}
out.printf("O maior elemento é %f", max);
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 35
Exemplo 03c – Exibir maior/menor
n  Como se pôde observar, dependendo do botão de submissão do
formulário acionado, a ação realizada será diferente
n  Isto é bem utilizado quando tivermos um único servlet e várias
ações a serem realizadas
n  Por exemplo, uma tela que salva, atualiza, exclui e lista os
funcionários será vinculada a um mesmo servlet e dependendo do
botão de submissão acionado direcionará a ação desejada
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 36
Só Servlets?
n  Até agora estamos desenvolvendo aplicações somente utilizando
servlets
n  Qual o maior problema ou dificuldade encontrada em se
desenvolver um servlet?
q  Escrever todo o código HTML no próprio servlet
n  Imagina ainda se fosse um servlet cuja resposta seria uma enorme
página HTML?
n  Como resolver esse problema?
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 37
Utilizando JSP
n  A solução para não ficar escrevendo todo o código HTML dentro do
servlet é utilizar páginas JSP (Java Server Pages)
n  Muitos utilizam o servlet para fazer a lógica de negócio (query no
banco de dados, inserir um registro, registrar um empréstimo) e,
então, encaminham a solicitação para um JSP que apresentará o
HTML de resposta
n  Trabalhando da maneira acima, observa-se uma separação entre a
lógica de negócio que está sendo realizada pelos servlets e a
apresentação que está sendo realizada pelas páginas JSP
q  Isso pode parecer o MVC, mas ainda não é
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 38
Utilizando JSP
n  Uma página JSP é muito mais ágil para a geração de um
documento HTML como saída do que um servlet
q  Podemos pensar em uma página JSP como um documento HTML com
algumas tags especiais
n  Porém, na verdade, uma página JSP é um servlet
q  É interpretada em seu primeiro acesso é traduzida em um servlet
hello.jsp hello_jsp.java hello_jsp.class
Servlet
Carregado
pelo
container
Traduzido Compilado
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 39
Utilizando JSP
n  Uma página JSP facilita o desenvolvimento da camada de
apresentação uma vez que permite que os templates em HTML
possam ser reaproveitados pelo desenvolvedor
n  Já que é uma página JSP é um servlet e já que um servlet é uma
classe Java, então uma página JSP pode conter códigos Java
n  Uma página JSP é composta basicamente por elementos HTML e
tags que delimitam códigos Java (chamados scripts)
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 40
Utilizando JSP
n  São as tags JSP:
q  <%@ %> Diretiva JSP: define parâmetros para o container (no caso
para o Tomcat
q  <% %> Scriptlet: tudo o que tiver dentro desta região é considerado
código Java. Uso não recomendado, preferir EL ou JSTL
q  <%! %> Declaração: utilizada para definir métodos e declarar
variáveis. Uso não recomendado, preferir EL ou JSTL
q  <%= %> Expressão: o mesmo que chamar <% out.print(…) %>. Não
tem ponto-e-vírgula (;) no final. Uso não recomendado,
preferir EL ou JSTL
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 41
Tags JSP – Exemplo 01
n  O exemplo abaixo utiliza diretiva JSP para passar diversas
informações sobre aquela página, faz declaração de um vetor de
strings com diversos nomes, faz um scriplet para iterar o vetor e
utiliza expressão para exibir os nomes em caixa alta:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" %>
<%!String[] nomes = {"Adriana","Carlos","Evandro","Gabriel", "Marcos"};%>
<html>
<body>
<ul>
<%for(String nome : nomes){%>
<li><%=nome.toUpperCase()%></li>
<%}%>
</ul>
</body>
</html>
Resultado:
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 42
Tags JSP – Exemplo 02
n  O exemplo abaixo faz a declaração de uma função, faz um scriplet
para buscar o valor de um parâmetro da requisição e depois invoca
a função declarada passando o parâmetro:
q  Neste exemplo foi realizada a chamada ao JSP passando o parâmetro
diretamente via GET: /calcularPagamento.jsp?valor=1000.00
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" %>
<%!
double incluiTaxas(double valor){
return valor*1.1;
}
%>
<html>
<body>
<%double valor = Double.parseDouble(request.getParameter("valor"));%>
O valor do pagamento é <%=this.incluiTaxas(valor)%>
</body>
</html>
Resultado:
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 43
Encaminhar ou redirecionar
n  Como já vimos que o JSP será responsável pela apresentação,
devemos saber como encaminhar uma requisição ou redicionar um
cliente
n  Portanto:
q  Você pode encaminhar (forward) a requisição para ser completada
n  Um exemplo é depois de realizar todos os processamentos no servlet
devemos encaminhar a requisição à uma página JSP para que ela apresente
os dados dessa requisição
q  Você pode redirecionar a requisição para outro lugar
n  Um exemplo é quando a requisição está sem autenticação e você não quer
tratá-la, mas sim, redirecionar o usuário para tela de login do sistema
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 44
Encaminhar (forward)
n  Ao encaminhar, o controle permanece dentro do container.
n  Um servlet envia a requisição para o próximo servlet ou JSP e os
objetos HttpServletRequest e HttpServletResponse são
encaminhados juntamente
n  Para o usuário, ele não conhece os servlets pelo qual ele foi
encaminhado, e sim, somente o que ele acessou
q  A URL do navegador não é alterada
n  Encaminhamentos (forwardings) podem ocorrer apenas dentro do
contexto web da aplicação, isto é, somente entre servlets e páginas
JSP
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 45
Encaminhar (forward)
public [doPost|doGet](...) throws ... {
...
request.getRequestDispatcher("/resultListagem.jsp")
.forward(request, response);
...
}
Response
Servlet
ou JSP
Servlet
ou JSP
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 46
Redirecionar (redirect)
n  O servlet envia um código HTTP 303 como resposta informando
uma nova URL deve ser acessada
n  Redirecionamento é usado quando precisa-se sair do contexto
(acessar um recurso externo como o site do google, por exemplo)
q  Com redirect, perde-se todas as variáveis que existiam dentro do
request, sendo necessário repassá-las à nova URL
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 47
Redirecionar (redirect)
public [doPost|doGet](...) throws ... {
...
response.sendRedirect("http://www.google.com.br");
return;
}
Request
Request
Redirect
Servlet
ou JSP
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 48
Exemplo encaminhamento
n  JSP com formulário de submissão (formSoma.jsp)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" %>
<html>
<body>
<font type="red">${requestScope.msgErro}</font> <br />
<form action="${pageContext.request.contextPath}/Somar"
method="POST">
X: <input type="text" name="x" value="${param.x}" size="6"/>
Y: <input type="text" name="y" value="${param.y}" size="6"/>
<input type="submit" name="evento" value="Somar"/>
<input type="reset" value="Limpar"/>
</form>
</body>
</html>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 49
Exemplo encaminhamento
n  Servlet com a lógica de negócio
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int x = 0, y = 0;
if (this.isNumber(request.getParameter("x"))) {
x = Integer.valueOf(request.getParameter("x"));
} else {
request.setAttribute("msgErro", "O atributo X é inválido");
request.getRequestDispatcher("/formSoma.jsp").forward(request,response);
return;
}
if (this.isNumber(request.getParameter("y"))) {
y = Integer.valueOf(request.getParameter("y"));
} else {
request.setAttribute("msgErro", "O atributo Y é inválido");
request.getRequestDispatcher("/formSoma.jsp").forward(request,response);
return;
}
request.setAttribute("z", x + y);
// Encaminho para a JSP de resposta
request.getRequestDispatcher("/resultSoma.jsp").forward(request,response);
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 50
Exemplo encaminhamento
n  Além do método doPost, a classe do servlet também terá o método
isNumber que verificará se é uma certa string é um número inteiro:
private boolean isNumber(String str) {
return str.matches("^-{0,1}[0-9]+");
}
n  JSP com a resposta a ser apresentada (resultSoma.jsp)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" %>
<html>
<body>
O resultado da soma de ${param.x} + ${param.y} = ${requestScope.z}
</body>
</html>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 51
Escopos
n  No último exemplo vimos códigos como:
q  No servlet:
n  request.setAttribute(“z”,x+y)
q  Na JSP:
n  ${requestScope.z}
q  Porém, não sabemos exatamente o que era. Isso trata-se da utilização
de escopo para armazenamento de informações
n  Os escopos são áreas de armazenamento com propriedades
específicas e podem ser de:
q  Página (pageScope) à somente existe em páginas JSP
q  Requisição (requestScope)
q  Sessão (sessionScope)
q  Aplicação (applicationScope)
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 52
Escopo de página
n  Escopo de página (pageScope)
q  Esse escopo é o mais curto e só existe durante a renderização da
página JSP
q  Colocando variáveis neste escopo (somente dentro da página JSP):
n  <%pageContext.setAttribute("nomeAtributo",valor);%>
q  Buscando o valor de uma variável nesse escopo:
n  Usando EL:
q  ${pageScope.nomeAtributo}
n  Usando expressão JSP (preferir EL):
q  <%=pageContext.getAttribute("nomeAtributo")%>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 53
Escopo de página
Escopo de página
pageScope
Cliente 1 JSP A
n  Uso comum:
q  Uso de variáveis temporárias usadas somente para a renderização da
página JSP
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 54
Escopo de requisição
n  Escopo de requisição (requestScope)
q  Este escopo só existe durante a requisição, isto é, seu armazenamento
inicia-se no momento em que uma requisição é realizada e termina junto
com o término requisição
q  Colocando variáveis neste escopo:
n  request.setAttribute("nomeAtributo",valor);
q  Buscando o valor de uma variável nesse escopo:
n  Usando EL:
q  ${requestScope.nomeAtributo}
n  Usando expressão JSP (preferir EL):
q  <%=request.getAttribute("nomeAtributo")%>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 55
Escopo de requisição
set get
Escopo de requisição
requestScope
Cliente 1 Servlet/JSP A Servlet/JSP B
n  Uso comum:
q  Passagem de informações adquiridas em um servlet para a página JSP
de resposta
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 56
Escopo de sessão
n  Escopo de sessão (sessionScope)
q  Este escopo é único por sessão (vínculo de um usuário utilizando a
aplicação), isto é, o escopo existe enquanto a sessão do usuário estiver
aberta
q  Colocando variáveis neste escopo:
n  request.getSession().setAttribute("nomeAtributo",valor);
q  Buscando o valor de uma variável nesse escopo:
n  Usando EL:
q  ${sessionScope.nomeAtributo}
n  Usando expressão JSP (preferir EL):
q  <%=request.getSession().getAttribute("nomeAtributo")%>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 57
Escopo de sessão
Escopo de sessão
sessionScope
set
setCliente 1
Servlet/JSP A
Servlet/JSP B
n  Uso comum:
q  Armazenamento das informações do usuário. Por exemplo, nome,
histórico de páginas visitadas, permissões de acesso, disciplinas do
aluno...
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 58
Escopo de aplicação
n  Escopo de aplicação (applicationScope)
q  Este escopo é o mais abrangente. É o escopo comum às todos os
servlets/JSP independente de qual página, requisição ou sessão.
q  Pode-se realmente dizer que é o escopo da aplicação
q  Colocando variáveis neste escopo:
n  this.getServletContext().setAttribute("nomeAtributo",valor);
q  Buscando o valor de uma variável nesse escopo:
n  Usando EL:
q  ${applicationScope.nomeAtributo}
n  Usando expressão JSP (preferir EL):
q  <%=application.getAttribute("nomeAtributo")%>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 59
Escopo de aplicação
Escopo de aplicação
applicationScope
get
get
Cliente 1
Cliente 2
Servlet/JSP A
Servlet/JSP B
n  Uso comum:
q  Armazenamento das informações que devem ser acessadas por
qualquer requisição de qualquer usuário. Por exemplo, lista de UF, lista
de cidades, lista do nome dos professores...
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 60
Escopos
n  Observação:
q  Usando EL (Expression Language), você pode não dizer qual o
escopo que está procurando o atributo, por exemplo:
n  ${x}
q  Caso seja feito assim, o container irá procurar o atributo com o nome x
a partir do escopo mais restrito até o mais amplo:
1.  pageScope
2.  requestScope
3.  sessionScope
4.  applicationScope
q  Por exemplo, se existir a variável x no escopo de requisição com o
valor 4 e no escopo de aplicação com valor 6, será exibido 4, pois o
escopo de requisição é mais restrito que o de aplicação
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 61
MVC
n  O modelo MVC oferece uma forma de separar as três camadas
principais de uma aplicação web:
q  Visão (responsável pela apresentação ao usuário)
q  Controle (responsável por gerenciar os eventos que notificam o
modelo)
q  Modelo (responsável pelas entidades e regras de negócio)
n  Para desenvolver uma aplicação Java Web no padrão arquitetural
MVC (Model View Controller), basta utilizar:
q  JSPs para o HTML (visão)
q  Servlets para controlar o comportamento da aplicação (controle)
n  Geralmente possuem o sufixo Servlet
q  Classes específicas para realizar acesso a um SGBD (modelo)
n  Geralmente possuem o sufixo DAO (Data Access Object)
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 62
MVC
Responsável pela apresentação da
resposta
Para exibir a resposta, acessa os
diversos dados disponibilizados pelo
Controle
Responsável por interpretar a
solicitação do usuário
Manipula os parâmetros, faz o
pedido de dados ao Modelo e,
então, os coloca acessível à
Visão
Responsável pelo acesso ao SGBD
Busca os dados conforme
solicitação
indireta da
Visão e os
entrega ao
Controle
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 63
MVC
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 64
MVC
n  Algumas são as vantagens da utilização do MVC:
q  Independência entre a camada de Visão e a camada de Modelo
n  O que permite a troca de um sem impacto ao outro
q  Manutenibilidade
n  Ocorre um erro na apresentação dos dados, portanto é em uma JSP
n  Ocorre um erro de fluxo ou comportamento, portanto é em um servlet
n  Ocorre um erro ao acesso ao SGBD, portanto é em uma classe de modelo
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 65
Aplicação usando MVC
n  De acordo com o diagrama de classes explicando o MVC, vamos
fazer uma pequena aplicação de exemplo usando o padrão
arquitetural MVC
q  Só será implementada a função de inserção de funcionários
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 66
Aplicação usando MVC
n  Será composta de:
q  /web/menuFuncionario.jsp
n  Exibição das ações em funcionários
q  /web/inserirFuncionario.jsp
n  Formulário de inserção do funcionário
q  com.terra.modelo.pojo.Funcionario
n  Armazenará as informações do funcionário
q  com.terra.controle.ManterFuncionarioServlet
n  Lógica de negócio
q  com.terra.modelo.FuncionarioDAO
n  Acesso ao modelo
q  /web/resultInsercao.jsp
n  Resultado da inserção do funcionário
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 67
/web/menuFuncionario.jsp
<html>
<body>
<h1>MENU</h1>
<a href="${pageContext.request.contextPath}/inserirFuncionario.jsp">
Inserir
</a> <br />
<a href="${pageContext.request.contextPath}/atualizarFuncionario.jsp">
Atualizar
</a> <br />
<a href="${pageContext.request.contextPath}/excluirFuncionario.jsp">
Excluir
</a> <br />
<a href="${pageContext.request.contextPath}/pesquisarFuncionario.jsp">
Pesquisar
</a> <br />
</body>
</html>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 68
/web/inserirFuncionario.jsp
<html>
<body>
<h1>Inserir Funcionário</h1>
<font color="red"><b>${requestScope.msgErro}</b></font><br />
<form action="${pageContext.request.contextPath}/ManterFuncionario"
method="POST">
Nome: <input type="text" name="nome" size="60" maxlength="60"
value="${param.nome}" /> <br />
Cargo: <input type="text" name="cargo" size="60" maxlength="60"
value="${param.cargo}" /> <br />
<input type="submit" name="evento" value="Inserir" />
<input type="reset" value="Limpar" />
</form>
</body>
</html>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 69
com.terra.modelo.pojo.Funcionario
public class Funcionario {
private String nome;
private String cargo;
public Funcionario(){}
public Funcionario(String nome, String cargo) {
this.nome = nome;
this.cargo = cargo;
}
public String getNome(){ return this.nome; }
public void setNome(String nome){ this.nome = nome; }
public String getCargo(){ return this.cargo; }
public void setCargo(String cargo){ this.cargo = cargo; }
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 70
com.terra.controle.ManterFuncionarioServlet
public class ManterFuncionarioServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String evento = request.getParameter("evento");
if (evento.equals("Inserir")){
this.inserir(request,response);
}else if (evento.equals("Atualizar")){
this.atualizar(request,response);
}else if (evento.equals("Excluir")){
this.excluir(request,response);
}else if (evento.equals("Pesquisar")){
this.pesquisar(request,response);
}
} //Fim do doPost
//Continua no próximo slide
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 71
com.terra.controle.ManterFuncionarioServlet
private void inserir(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String nome = request.getParameter("nome");
String cargo = request.getParameter("cargo");
if (nome==null || nome.equals("")){
request.setAttribute("msgErro", "O campo 'nome' é obrigatório.");
request.getRequestDispatcher("/inserirFuncionario.jsp").forward(request, response);
return;
}else if (cargo==null || cargo.equals("")){
request.setAttribute("msgErro", "O campo 'cargo' é obrigatório.");
request.getRequestDispatcher("/inserirFuncionario.jsp").forward(request, response);
return;
}
Funcionario f = new Funcionario(nome,cargo);
FuncionarioDAO.insert(f);
request.setAttribute("f", f);
request.getRequestDispatcher("/resultInsercao.jsp").forward(request, response);
} //Fim do inserir
...
} //Fim da classe servlet
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 72
com.terra.modelo.FuncionarioDAO
public class FuncionarioDAO {
public static void insert(Funcionario f){
//Código de inserção do funcionário no SGBD
}
...
}
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 73
/web/resultInsercao.jsp
<html>
<body>
<h1>Inserção de Funcionário</h1>
O funcionário <b>${requestScope.f.nome}</b> foi inserido com sucesso
no cargo de <b>${requestScope.f.cargo}</b>.
<br /><br />
<a href="${pageContext.request.contextPath}/menuFuncionario.jsp">
Voltar ao menu
</a> <br />
</body>
</html>
Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 74
Referência Bibliográfica
n  BASHAM, Brian; SIERRA, Kathy; BATES, Bert. Head First Servlets
and JSP. Sebastopol: O'Reilly, 2008.
n  BASHAM, Brian; SIERRA, Kathy; BATES, Bert. Use a Cabeça.
Servlets & JSP. Rio de Janeiro: Alta Books, 2005.

Mais conteúdo relacionado

Mais procurados

Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Leinylson Fontinele
 
Modelo Conceitual MER
Modelo Conceitual MERModelo Conceitual MER
Modelo Conceitual MERJoel Santos
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha casoEder Samaniego
 
3 - Modelo Entidade Relacionamento
3 - Modelo Entidade Relacionamento3 - Modelo Entidade Relacionamento
3 - Modelo Entidade RelacionamentoCris Fidelix
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraNatanael Simões
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de SoftwareRalph Rassweiler
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoLeinylson Fontinele
 
Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...
Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...
Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...Leinylson Fontinele
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a InternetLeonardo Soares
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScriptCarlos Eduardo Kadu
 
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais) [Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais) Loiane Groner
 
Árvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programaçãoÁrvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programaçãoEverson Wolf
 

Mais procurados (20)

Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
 
Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 
Modelo Conceitual MER
Modelo Conceitual MERModelo Conceitual MER
Modelo Conceitual MER
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha caso
 
3 - Modelo Entidade Relacionamento
3 - Modelo Entidade Relacionamento3 - Modelo Entidade Relacionamento
3 - Modelo Entidade Relacionamento
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de Software
 
Aula 6 - Qualidade de Software
Aula 6 - Qualidade de SoftwareAula 6 - Qualidade de Software
Aula 6 - Qualidade de Software
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e Especialização
 
Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...
Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...
Introdução à Computação - Aula Prática 3 - Banco de Dados (Conversão do model...
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Introdução a programação para a Internet
Introdução a programação para a InternetIntrodução a programação para a Internet
Introdução a programação para a Internet
 
Analise de Requisitos Software
Analise de Requisitos SoftwareAnalise de Requisitos Software
Analise de Requisitos Software
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais) [Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
 
Árvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programaçãoÁrvore B estruturas de dados e técnicas de programação
Árvore B estruturas de dados e técnicas de programação
 
Diagrama de Classes
Diagrama de ClassesDiagrama de Classes
Diagrama de Classes
 

Semelhante a Apostila Java Web (Servlets e JSPs)

Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a InternetRicardo Terra
 
Servlet jsp tomcat 8
Servlet jsp tomcat 8Servlet jsp tomcat 8
Servlet jsp tomcat 8maxrosan
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de ServletsMarcio Marinho
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Introdução de web
Introdução de webIntrodução de web
Introdução de webSedu
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPMetodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPLeonel Morgado
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Rogério Moraes de Carvalho
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 

Semelhante a Apostila Java Web (Servlets e JSPs) (20)

Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a Internet
 
Servlet jsp tomcat 8
Servlet jsp tomcat 8Servlet jsp tomcat 8
Servlet jsp tomcat 8
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de Servlets
 
REST and JEE
REST and JEEREST and JEE
REST and JEE
 
Te servelts
Te serveltsTe servelts
Te servelts
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Introdução de web
Introdução de webIntrodução de web
Introdução de web
 
O get and post para etico hacker
O get and post para etico hackerO get and post para etico hacker
O get and post para etico hacker
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Protocolo Http
Protocolo HttpProtocolo Http
Protocolo Http
 
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPMetodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Cap 02.pdf
Cap 02.pdfCap 02.pdf
Cap 02.pdf
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Apostila XHTML
Apostila XHTMLApostila XHTML
Apostila XHTML
 
Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 

Mais de Ricardo Terra

Microsserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMMicrosserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMRicardo Terra
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Ricardo Terra
 
Análise Estática de Código: Aplicações
Análise Estática de Código: AplicaçõesAnálise Estática de Código: Aplicações
Análise Estática de Código: AplicaçõesRicardo Terra
 
Engenharia de Software: POC
Engenharia de Software: POCEngenharia de Software: POC
Engenharia de Software: POCRicardo Terra
 
Which Programming Language is the best one?
Which Programming Language is the best one?Which Programming Language is the best one?
Which Programming Language is the best one?Ricardo Terra
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática ComputacionalRicardo Terra
 
English---and LaTeX---Writing Tips
English---and LaTeX---Writing TipsEnglish---and LaTeX---Writing Tips
English---and LaTeX---Writing TipsRicardo Terra
 
Casamento de Padrões
Casamento de PadrõesCasamento de Padrões
Casamento de PadrõesRicardo Terra
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Ricardo Terra
 
Segurança da Internet
Segurança da InternetSegurança da Internet
Segurança da InternetRicardo Terra
 
Software Architecture
Software ArchitectureSoftware Architecture
Software ArchitectureRicardo Terra
 
Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)Ricardo Terra
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de ProgramaçãoRicardo Terra
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTRicardo Terra
 
Java JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDBJava JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDBRicardo Terra
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Ricardo Terra
 

Mais de Ricardo Terra (20)

Microsserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMMicrosserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORM
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)
 
Análise Estática de Código: Aplicações
Análise Estática de Código: AplicaçõesAnálise Estática de Código: Aplicações
Análise Estática de Código: Aplicações
 
Engenharia de Software: POC
Engenharia de Software: POCEngenharia de Software: POC
Engenharia de Software: POC
 
Which Programming Language is the best one?
Which Programming Language is the best one?Which Programming Language is the best one?
Which Programming Language is the best one?
 
Refactoring
RefactoringRefactoring
Refactoring
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática Computacional
 
English---and LaTeX---Writing Tips
English---and LaTeX---Writing TipsEnglish---and LaTeX---Writing Tips
English---and LaTeX---Writing Tips
 
Casamento de Padrões
Casamento de PadrõesCasamento de Padrões
Casamento de Padrões
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)
 
Segurança da Internet
Segurança da InternetSegurança da Internet
Segurança da Internet
 
Software Architecture
Software ArchitectureSoftware Architecture
Software Architecture
 
Aula Zero
Aula ZeroAula Zero
Aula Zero
 
Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de Programação
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
Java JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDBJava JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDB
 
Apostila UML
Apostila UMLApostila UML
Apostila UML
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)
 

Último

HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
ÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptx
ÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptxÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptx
ÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptxDeyvidBriel
 
geografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundogeografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundonialb
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPanandatss1
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxLuizHenriquedeAlmeid6
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNASQUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNASEdinardo Aguiar
 
A galinha ruiva sequencia didatica 3 ano
A  galinha ruiva sequencia didatica 3 anoA  galinha ruiva sequencia didatica 3 ano
A galinha ruiva sequencia didatica 3 anoandrealeitetorres
 
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdfcartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdfIedaGoethe
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISVitor Vieira Vasconcelos
 
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptxSlides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptxLuizHenriquedeAlmeid6
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
Atividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu AbrigoAtividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu AbrigoMary Alvarenga
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfIedaGoethe
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirIedaGoethe
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 

Último (20)

Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
HORA DO CONTO5_BECRE D. CARLOS I_2023_2024
 
ÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptx
ÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptxÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptx
ÁREA DE FIGURAS PLANAS - DESCRITOR DE MATEMATICA D12 ENSINO MEDIO.pptx
 
geografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundogeografia 7 ano - relevo, altitude, topos do mundo
geografia 7 ano - relevo, altitude, topos do mundo
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SP
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNASQUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
 
A galinha ruiva sequencia didatica 3 ano
A  galinha ruiva sequencia didatica 3 anoA  galinha ruiva sequencia didatica 3 ano
A galinha ruiva sequencia didatica 3 ano
 
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdfcartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGIS
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptxSlides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
Slides Lição 2, Central Gospel, A Volta Do Senhor Jesus , 1Tr24.pptx
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
Atividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu AbrigoAtividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu Abrigo
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimir
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 

Apostila Java Web (Servlets e JSPs)

  • 1. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008 Java Web Ricardo Terra rterrabh [at] gmail.com Java Web 1
  • 2. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008 CV Java Web 2 Nome: Ricardo Terra Email: rterrabh [at] gmail.com www: ricardoterra.com.br Twitter: rterrabh Lattes: lattes.cnpq.br/ 0162081093970868 Ph.D. (UFMG/UWaterloo), Post-Ph.D. (INRIA/Université Lille 1) Background Acadêmico: UFLA (desde 2014), UFSJ (1 ano), FUMEC (3 anos), UNIPAC (1 ano), FAMINAS (3 anos) Profissional: DBA Eng. (1 ano), Synos (2 anos), Stefanini (1 ano)
  • 3. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 3 Por que utilizar Servlets e JSP? n  Muitos têm adotado esta estratégia de desenvolvimento (estão na moda) n  Existem diversas aplicações GUI que são utilizadas por milhões de pessoas, porém essas aplicações possuem diversos problemas de distribuição q  Em uma aplicação web, você não precisará se prender aos problemas de distribuição, pois sua aplicação funcionará em qualquer computador que possua um browser, independente do S.O., memória, processador, etc
  • 4. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 4 Por que utilizar Servlets e JSP? n  Nesta disciplina, vamos substituir as aplicações GUI por aplicações Web n  Uma aplicação web é composta de tecnologia: q  No lado do cliente: HTML, XML, CSS, JS, etc q  No lado do servidor: CGI, ASP, PHP, servlets, etc
  • 5. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 5 Cliente e Servidor / HTTP e HTML n  Quando um servidor responde a uma solicitação, ele geralmente envia algum tipo de conteúdo para o browser, para que esse possa exibí-lo q  O formato HTML é o formato mais comum enviado como resposta para um cliente pelo Servidor, pois esse é facilmente lido pelo browser no cliente
  • 6. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 6 Cliente e Servidor / HTTP e HTML n  A maioria das conversas que ocorre na web entre clientes e servidores são mantidas através do protocolo HTTP, que possibilita conversas de requisição e resposta n  O cliente envia uma requisição HTTP e o servidor retorna uma resposta HTTP q  Enfim, se você é um servidor web você fala HTTP n  Portanto, uma conversação HTTP é uma sequência de requisição/ resposta q  Isto é, o cliente pede uma coisa, o servidor responde, o cliente pede outra coisa, o servidor responde...
  • 7. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 7 Cliente e Servidor / HTTP e HTML n  Requisição e resposta:
  • 8. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 8 Cliente e Servidor / HTTP e HTML n  O HTTP roda no topo da arquitetura TCP/IP n  O HTTP é um protocolo da camada de aplicação que tem características específicas para a web, mas ele depende de toda a arquitetura TCP/IP para garantir que tanto a solicitação e quanto a resposta sejam transmitidas entre o cliente e o servidor
  • 9. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 9 Cliente e Servidor / HTTP e HTML n  HTTP na camada de aplicação da arquitetura TCP/IP
  • 10. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 10 Requisição e resposta n  Principais elementos do fluxo de requisição: q  método HTTP q  endereço da página (URL) que está sendo acessada q  parâmetros do formulário n  Principais elementos do fluxo de resposta: q  cabeçalho n  código de status n  Método HTTP n  tipo do conteúdo (texto, imagem, HTML...) q  conteúdo (o texto, a imagem, o HTML...)
  • 11. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 11 Requisição e resposta n  Requisição HTTP q  A primeira coisa que você encontrará é o nome do método HTTP n  O nome do método informa ao servidor o tipo de solicitação que está sendo feita e como o resto da mensagem será formatada. q  O protocolo HTTP possui diversos métodos, mas usaremos e aprenderemos os mais comuns: GET e POST
  • 12. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 12 Requisição e resposta n  Método GET q  É o método mais simples do HTTP e seu principal trabalho é pedir um recurso n  Pode ser qualquer tipo de recurso: uma página, uma imagem, um PDF, etc q  O caminho até o recurso e quaisquer parâmetros adicionados à URL serão incluídos na própria barra de endereços q  Podemos usar o GET para formulários, porém com desvantagens: n  O total de caracteres do GET é limitado n  Os dados que você envia utilizando HTTP GET são anexados à URL, portanto, seja o que for que você estiver transmitindo, ficará exposto
  • 13. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 13 Requisição e resposta n  Método POST q  É um método mais poderoso. É um GET++. Com o POST, você pode solicitar algo e, ao mesmo tempo, enviar os dados de um formulário para o servidor q  Os dados a serem enviados ao servidor estão localizados na carga útil (payload) da mensagem e podem ser bem extensos Pacote IPv4 q  Por isto, o POST é considerado mais seguro que o GET
  • 14. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 14 Requisição e resposta n  Enfim, para acesso a recursos utiliza-se GET e aplicações que utilizam formulários utiliza-se POST
  • 15. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 15 Requisição e resposta n  Resposta HTTP q  uma resposta HTTP é composta de um cabeçalho (header) e o corpo n  o cabeçalho informa ao browser o método que está sendo utilizado, se a solicitação obteve êxito (código) e o tipo de conteúdo está incluído no corpo n  corpo possui o conteúdo (por exemplo, HTML) que o browser exibirá q  o código pode ser: n  1xx: Informativa: requisição recebida, processo em continuidade… n  2xx: Sucesso: a ação foi recebida, entendida e aceita com sucesso n  3xx: Redirecionamento: ação futura ainda deve ser tomada para completar a requisição n  4xx: Erro no cliente: requisição contém sintaxe incorreta ou não pode ser resolvida n  5xx: Erro no servidor: O servidor falhou ao responder uma aparente requisição válida
  • 16. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 16 Páginas estáticas x Páginas dinâmicas n  Servidores "amam" servir páginas estáticas q  Uma página estática é apenas um HTML que está armazenado no servidor. Quando o usuário pede a página, o servidor simplesmente busca a página e a envia do mesmo modo que está lá. Não processa ou dispende recursos para entregá-la ao cliente n  Porém, às vezes você precisa mais do que uma página estática q  Se você precisa de páginas dinâmicas (páginas criadas no momento da requisição, isto é, não existiam antes da solicitação) e da capacidade de escrever/salvar dados no servidor (seja em arquivos ou em SGBDs), você precisa de uma aplicação rodando no servidor q  Para isso, começaremos a ver aplicações web usando Java EE
  • 17. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 17 Primeiro Projeto Web n  Para entendermos melhor como criar uma aplicação web, observe o material "Primeiro Projeto Web" que demostra como criar uma aplicação web completa n  Algumas considerações: q  O principal arquivo de uma aplicação web é o Deployment Descriptor (DD) n  Deployment Descriptor (descritor de implantação) é um documento XML único por aplicação chamado web.xml que fica abaixo do diretório WEB-INF e que contém as informações de como sua aplicação deve ser implantada q  O Tomcat geralmente utiliza a porta 8080 para executar as aplicações n  Geralmente, quando a aplicação entra em produção é executada na porta 80, que é a porta do protocolo HTTP (o protocolo da Internet)
  • 18. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 18 Métodos Importantes Web n  Uma aplicação web é basicamente um servlet q  Um servlet é uma classe que estende HttpServlet n  Os métodos importantes de um servlet são: q  doGet à responsável por tratar requisições GET q  doPost à responsável por tratar requisições POST n  Quando criamos pelo wizard do Eclipse, a aplicação já é registrada automaticamente no DD
  • 19. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 19 Métodos Importantes Web n  Primeiramente devemos setar o tipo de conteúdo da resposta: q  response.setContentType("text/html"); n  Para escrever no cliente devemos escrever na resposta: q  PrintWriter out = response.getWriter(); n  Geralmente escrevemos todo o HTML: q  out.print("<html><body>"); out.print("Agora: " + new Date()); out.print("</body></html>"); n  Mas sempre fechamos após escrever: q  out.close();
  • 20. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 20 Métodos Importantes Web n  Existem alguns métodos que são indispensáveis para o desenvolvimento de servlets, pois são aqueles que manipulam os parâmetros enviados por uma requisição: q  public String getParameter(String nomeParam) n  Retorna o valor string de um parâmetro específico q  Exemplo: §  Pegando um nome, uma idade, um peso, uma profissão, uma cidade... q  public String[] getParameterValues(String nomeParam) n  Retorna o vetor de string de um parâmetro específico q  Exemplo: §  Pegando nomes de um time de futebol, notas de uma turma...
  • 21. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 21 Métodos Importantes Web n  A utilização trivial seria, logo após setar o tipo do conteúdo da resposta, pegar todos os parâmetros da requisição e colocá-los dentro de variáveis locais. Por exemplo: q  String nome = request.getParameter("nome"); int idade = Integer.parseInt( request.getParameter("idade")); String nomes[] = request.getParameterValues("nomes"); String numeros[] = request.getParameterValues("n");
  • 22. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 22 Uma metodologia simples 1.  Setar o tipo de conteúdo da resposta (setContentType) 2.  Colocar os parâmetros em variáveis locais (veja slide anterior) 3.  Obter a escrita na resposta (out = response.getWriter()) 4.  Utilizar Java SE para gerar o HTML de resposta (out.print(...)) 5.  Fechar a escrita na resposta (out.close())
  • 23. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 23 Exemplo 01 – Exibir nome n  Vamos submeter a seguinte URL, isso seria via o método GET: q  /ExibirNome?nome=Carlos n  Para iniciarmos a passagem de parâmetros, é inserido um ? e depois os parâmetros são separados por &. n  Ou talvez submeter via formulário, usando o método POST: <form action="${pageContext.request.contextPath}/ExibirNome" method="POST"> Nome: <input type="text" name="nome" /> <br /> <input type="submit" value="Enviar" /> <input type="reset" value="Limpar" /> </form>
  • 24. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 24 Exemplo 01 – Exibir nome n  Como seria o código interno do método doGet (caso seja via URL) ou do método doPost (caso seja via formulário)? public [doPost|doGet](...) throws ... { response.setContentType("text/html"); String nome = request.getParameter("nome"); PrintWriter out = response.getWriter(); ... out.printf("Olá %s! Seja bem vindo!", nome); ... out.close(); }
  • 25. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 25 Exemplo 02 – Somar n  Vamos submeter a seguinte URL, isso seria via o método GET: q  /Somar?x=3&y=7 n  Para iniciarmos a passagem de parâmetros, é inserido um ? e depois os parâmetros são separados por &. n  Ou talvez submeter via formulário, usando o método POST: <form action="${pageContext.request.contextPath}/Somar" method="POST"> X: <input type="text" name="x" size="6" /> <br /> Y: <input type="text" name="y" size="6" /> <br /> <input type="submit" name="evento" value="Enviar" /> <input type="reset" value="Limpar" /> </form>
  • 26. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 26 Exemplo 02 – Somar n  Como seria o código interno do método doGet (caso seja via URL) ou do método doPost (caso seja via formulário)? public [doPost|doGet](...) throws ... { response.setContentType("text/html"); int x = Integer.parseInt(request.getParameter("x")); int y = Integer.parseInt(request.getParameter("y")); PrintWriter out = response.getWriter(); ... out.printf("%d + %d = %d", x, y, (x+y)); ... out.close(); }
  • 27. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 27 Exemplo 03a – Somar vários n  Um único parâmetro pode receber diversos valores n  Vamos submeter a seguinte URL, isso seria via o método GET: q  /SomarVarios?n=3.2&n=7.1&n=3.7&n=2.7&n=5.1&n=4.7 q  A requisição acima envia vários valores no parâmetro n e o Servlet deve ser capaz de recuperar todos eles usando não mais o método getParameter(), mas sim, getParameterValues() n  Recordando: q  o método getParameter() retorna uma string n  usado para recuperar parâmetros simples com apenas um valor q  o método getParameterValues() retornar um vetor de string n  usado para recuperar parâmetros com múltiplos valores
  • 28. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 28 Exemplo 03a – Somar vários n  Ou talvez submeter via formulário, usando o método POST: <form action="${pageContext.request.contextPath}/SomarVarios" method="POST"> Números:<br /> <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" /> <br /> <input type="submit" name="evento" value="Enviar" /> <input type="reset" value="Limpar" /> </form>
  • 29. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 29 Exemplo 03a – Somar vários n  Como seria o código interno do método doGet (caso seja via URL) ou do método doPost (caso seja via formulário)? public [doPost|doGet](...) throws ... { ... String[] strNumeros = request.getParameterValues("n"); double soma = 0; for (String s : strNumeros){ soma += Double.parseDouble(s); } ... out.printf("SOMA: %f, soma); ... }
  • 30. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 30 Exemplo 03b – Exibir maior/menor n  Com base na idéia da URL ou do formulário do Exemplo 3a é possível fazer a exibição do maior e do menor número. Observe: public [doPost|doGet](...) throws ... { ... String[] strNumeros = request.getParameterValues("n"); double min, max; min = max = Double.parseDouble(strNumeros[0]); for (int i = 1; i < strNumeros.length; i++) { double n = Double.parseDouble(strNumeros[i]); if (n > max) { max = n; } else if (n < min) { min = n; } } ... out.printf("O menor valor é %f e o maior valor é %f", min, max); ... }
  • 31. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 31 Exemplo 03c – Exibir maior/menor n  Uma observação bem importante é que o botão de submissão do formulário também pode passar um parâmetro (como o evento a ser realizado) e pode ser utilizado para indicar o que deve ser realizado com os outros parâmetros passados n  Por exemplo, vamos alterar o exemplo 03b para ter dois botões de submissão: n  Exibir Maior n  Exibir Menor
  • 32. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 32 Exemplo 03c – Exibir maior/menor n  Formulário do Exemplo 03a com alterações destacadas q  o action do formulário q  os botões de submissão <form action="${pageContext.request.contextPath}/ExibirMM" method="POST"> ... <input type="submit" name="evento" value="Exibir Maior" /> <input type="submit" name="evento" value="Exibir Menor" /> ... </form>
  • 33. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 33 Exemplo 03c – Exibir maior/menor n  Como ficaria o Servlet: public [doPost|doGet](...) throws ... { ... String[] strNumeros = request.getParameterValues("n"); String evento = request.getParameter("evento"); if (evento.equals("Exibir Maior")){ this.exibirMaior(strNumeros,out); //Chama um método local }else if (evento.equals("Exibir Menor")){ this.exibirMenor(strNumeros,out); //Chama um método local } ... }
  • 34. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 34 Exemplo 03c – Exibir maior/menor n  E assim ficariam os métodos exibirMaior e exibirMenor private void exibirMenor(String[] strNumeros, PrintWriter out) { double min = Double.parseDouble(strNumeros[0]); for (int i=1; i<strNumeros.length; i++){ double n = Double.parseDouble(strNumeros[i]); if (n < min){ min = n; } } out.printf("O menor elemento é %f", min); } private void exibirMaior(String[] strNumeros, PrintWriter out) { double max = Double.parseDouble(strNumeros[0]); for (int i=1; i<strNumeros.length; i++){ double n = Double.parseDouble(strNumeros[i]); if (n > max){ max = n; } } out.printf("O maior elemento é %f", max); }
  • 35. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 35 Exemplo 03c – Exibir maior/menor n  Como se pôde observar, dependendo do botão de submissão do formulário acionado, a ação realizada será diferente n  Isto é bem utilizado quando tivermos um único servlet e várias ações a serem realizadas n  Por exemplo, uma tela que salva, atualiza, exclui e lista os funcionários será vinculada a um mesmo servlet e dependendo do botão de submissão acionado direcionará a ação desejada
  • 36. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 36 Só Servlets? n  Até agora estamos desenvolvendo aplicações somente utilizando servlets n  Qual o maior problema ou dificuldade encontrada em se desenvolver um servlet? q  Escrever todo o código HTML no próprio servlet n  Imagina ainda se fosse um servlet cuja resposta seria uma enorme página HTML? n  Como resolver esse problema?
  • 37. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 37 Utilizando JSP n  A solução para não ficar escrevendo todo o código HTML dentro do servlet é utilizar páginas JSP (Java Server Pages) n  Muitos utilizam o servlet para fazer a lógica de negócio (query no banco de dados, inserir um registro, registrar um empréstimo) e, então, encaminham a solicitação para um JSP que apresentará o HTML de resposta n  Trabalhando da maneira acima, observa-se uma separação entre a lógica de negócio que está sendo realizada pelos servlets e a apresentação que está sendo realizada pelas páginas JSP q  Isso pode parecer o MVC, mas ainda não é
  • 38. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 38 Utilizando JSP n  Uma página JSP é muito mais ágil para a geração de um documento HTML como saída do que um servlet q  Podemos pensar em uma página JSP como um documento HTML com algumas tags especiais n  Porém, na verdade, uma página JSP é um servlet q  É interpretada em seu primeiro acesso é traduzida em um servlet hello.jsp hello_jsp.java hello_jsp.class Servlet Carregado pelo container Traduzido Compilado
  • 39. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 39 Utilizando JSP n  Uma página JSP facilita o desenvolvimento da camada de apresentação uma vez que permite que os templates em HTML possam ser reaproveitados pelo desenvolvedor n  Já que é uma página JSP é um servlet e já que um servlet é uma classe Java, então uma página JSP pode conter códigos Java n  Uma página JSP é composta basicamente por elementos HTML e tags que delimitam códigos Java (chamados scripts)
  • 40. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 40 Utilizando JSP n  São as tags JSP: q  <%@ %> Diretiva JSP: define parâmetros para o container (no caso para o Tomcat q  <% %> Scriptlet: tudo o que tiver dentro desta região é considerado código Java. Uso não recomendado, preferir EL ou JSTL q  <%! %> Declaração: utilizada para definir métodos e declarar variáveis. Uso não recomendado, preferir EL ou JSTL q  <%= %> Expressão: o mesmo que chamar <% out.print(…) %>. Não tem ponto-e-vírgula (;) no final. Uso não recomendado, preferir EL ou JSTL
  • 41. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 41 Tags JSP – Exemplo 01 n  O exemplo abaixo utiliza diretiva JSP para passar diversas informações sobre aquela página, faz declaração de um vetor de strings com diversos nomes, faz um scriplet para iterar o vetor e utiliza expressão para exibir os nomes em caixa alta: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <%!String[] nomes = {"Adriana","Carlos","Evandro","Gabriel", "Marcos"};%> <html> <body> <ul> <%for(String nome : nomes){%> <li><%=nome.toUpperCase()%></li> <%}%> </ul> </body> </html> Resultado:
  • 42. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 42 Tags JSP – Exemplo 02 n  O exemplo abaixo faz a declaração de uma função, faz um scriplet para buscar o valor de um parâmetro da requisição e depois invoca a função declarada passando o parâmetro: q  Neste exemplo foi realizada a chamada ao JSP passando o parâmetro diretamente via GET: /calcularPagamento.jsp?valor=1000.00 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <%! double incluiTaxas(double valor){ return valor*1.1; } %> <html> <body> <%double valor = Double.parseDouble(request.getParameter("valor"));%> O valor do pagamento é <%=this.incluiTaxas(valor)%> </body> </html> Resultado:
  • 43. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 43 Encaminhar ou redirecionar n  Como já vimos que o JSP será responsável pela apresentação, devemos saber como encaminhar uma requisição ou redicionar um cliente n  Portanto: q  Você pode encaminhar (forward) a requisição para ser completada n  Um exemplo é depois de realizar todos os processamentos no servlet devemos encaminhar a requisição à uma página JSP para que ela apresente os dados dessa requisição q  Você pode redirecionar a requisição para outro lugar n  Um exemplo é quando a requisição está sem autenticação e você não quer tratá-la, mas sim, redirecionar o usuário para tela de login do sistema
  • 44. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 44 Encaminhar (forward) n  Ao encaminhar, o controle permanece dentro do container. n  Um servlet envia a requisição para o próximo servlet ou JSP e os objetos HttpServletRequest e HttpServletResponse são encaminhados juntamente n  Para o usuário, ele não conhece os servlets pelo qual ele foi encaminhado, e sim, somente o que ele acessou q  A URL do navegador não é alterada n  Encaminhamentos (forwardings) podem ocorrer apenas dentro do contexto web da aplicação, isto é, somente entre servlets e páginas JSP
  • 45. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 45 Encaminhar (forward) public [doPost|doGet](...) throws ... { ... request.getRequestDispatcher("/resultListagem.jsp") .forward(request, response); ... } Response Servlet ou JSP Servlet ou JSP
  • 46. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 46 Redirecionar (redirect) n  O servlet envia um código HTTP 303 como resposta informando uma nova URL deve ser acessada n  Redirecionamento é usado quando precisa-se sair do contexto (acessar um recurso externo como o site do google, por exemplo) q  Com redirect, perde-se todas as variáveis que existiam dentro do request, sendo necessário repassá-las à nova URL
  • 47. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 47 Redirecionar (redirect) public [doPost|doGet](...) throws ... { ... response.sendRedirect("http://www.google.com.br"); return; } Request Request Redirect Servlet ou JSP
  • 48. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 48 Exemplo encaminhamento n  JSP com formulário de submissão (formSoma.jsp) <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <html> <body> <font type="red">${requestScope.msgErro}</font> <br /> <form action="${pageContext.request.contextPath}/Somar" method="POST"> X: <input type="text" name="x" value="${param.x}" size="6"/> Y: <input type="text" name="y" value="${param.y}" size="6"/> <input type="submit" name="evento" value="Somar"/> <input type="reset" value="Limpar"/> </form> </body> </html>
  • 49. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 49 Exemplo encaminhamento n  Servlet com a lógica de negócio protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int x = 0, y = 0; if (this.isNumber(request.getParameter("x"))) { x = Integer.valueOf(request.getParameter("x")); } else { request.setAttribute("msgErro", "O atributo X é inválido"); request.getRequestDispatcher("/formSoma.jsp").forward(request,response); return; } if (this.isNumber(request.getParameter("y"))) { y = Integer.valueOf(request.getParameter("y")); } else { request.setAttribute("msgErro", "O atributo Y é inválido"); request.getRequestDispatcher("/formSoma.jsp").forward(request,response); return; } request.setAttribute("z", x + y); // Encaminho para a JSP de resposta request.getRequestDispatcher("/resultSoma.jsp").forward(request,response); }
  • 50. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 50 Exemplo encaminhamento n  Além do método doPost, a classe do servlet também terá o método isNumber que verificará se é uma certa string é um número inteiro: private boolean isNumber(String str) { return str.matches("^-{0,1}[0-9]+"); } n  JSP com a resposta a ser apresentada (resultSoma.jsp) <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <html> <body> O resultado da soma de ${param.x} + ${param.y} = ${requestScope.z} </body> </html>
  • 51. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 51 Escopos n  No último exemplo vimos códigos como: q  No servlet: n  request.setAttribute(“z”,x+y) q  Na JSP: n  ${requestScope.z} q  Porém, não sabemos exatamente o que era. Isso trata-se da utilização de escopo para armazenamento de informações n  Os escopos são áreas de armazenamento com propriedades específicas e podem ser de: q  Página (pageScope) à somente existe em páginas JSP q  Requisição (requestScope) q  Sessão (sessionScope) q  Aplicação (applicationScope)
  • 52. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 52 Escopo de página n  Escopo de página (pageScope) q  Esse escopo é o mais curto e só existe durante a renderização da página JSP q  Colocando variáveis neste escopo (somente dentro da página JSP): n  <%pageContext.setAttribute("nomeAtributo",valor);%> q  Buscando o valor de uma variável nesse escopo: n  Usando EL: q  ${pageScope.nomeAtributo} n  Usando expressão JSP (preferir EL): q  <%=pageContext.getAttribute("nomeAtributo")%>
  • 53. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 53 Escopo de página Escopo de página pageScope Cliente 1 JSP A n  Uso comum: q  Uso de variáveis temporárias usadas somente para a renderização da página JSP
  • 54. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 54 Escopo de requisição n  Escopo de requisição (requestScope) q  Este escopo só existe durante a requisição, isto é, seu armazenamento inicia-se no momento em que uma requisição é realizada e termina junto com o término requisição q  Colocando variáveis neste escopo: n  request.setAttribute("nomeAtributo",valor); q  Buscando o valor de uma variável nesse escopo: n  Usando EL: q  ${requestScope.nomeAtributo} n  Usando expressão JSP (preferir EL): q  <%=request.getAttribute("nomeAtributo")%>
  • 55. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 55 Escopo de requisição set get Escopo de requisição requestScope Cliente 1 Servlet/JSP A Servlet/JSP B n  Uso comum: q  Passagem de informações adquiridas em um servlet para a página JSP de resposta
  • 56. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 56 Escopo de sessão n  Escopo de sessão (sessionScope) q  Este escopo é único por sessão (vínculo de um usuário utilizando a aplicação), isto é, o escopo existe enquanto a sessão do usuário estiver aberta q  Colocando variáveis neste escopo: n  request.getSession().setAttribute("nomeAtributo",valor); q  Buscando o valor de uma variável nesse escopo: n  Usando EL: q  ${sessionScope.nomeAtributo} n  Usando expressão JSP (preferir EL): q  <%=request.getSession().getAttribute("nomeAtributo")%>
  • 57. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 57 Escopo de sessão Escopo de sessão sessionScope set setCliente 1 Servlet/JSP A Servlet/JSP B n  Uso comum: q  Armazenamento das informações do usuário. Por exemplo, nome, histórico de páginas visitadas, permissões de acesso, disciplinas do aluno...
  • 58. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 58 Escopo de aplicação n  Escopo de aplicação (applicationScope) q  Este escopo é o mais abrangente. É o escopo comum às todos os servlets/JSP independente de qual página, requisição ou sessão. q  Pode-se realmente dizer que é o escopo da aplicação q  Colocando variáveis neste escopo: n  this.getServletContext().setAttribute("nomeAtributo",valor); q  Buscando o valor de uma variável nesse escopo: n  Usando EL: q  ${applicationScope.nomeAtributo} n  Usando expressão JSP (preferir EL): q  <%=application.getAttribute("nomeAtributo")%>
  • 59. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 59 Escopo de aplicação Escopo de aplicação applicationScope get get Cliente 1 Cliente 2 Servlet/JSP A Servlet/JSP B n  Uso comum: q  Armazenamento das informações que devem ser acessadas por qualquer requisição de qualquer usuário. Por exemplo, lista de UF, lista de cidades, lista do nome dos professores...
  • 60. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 60 Escopos n  Observação: q  Usando EL (Expression Language), você pode não dizer qual o escopo que está procurando o atributo, por exemplo: n  ${x} q  Caso seja feito assim, o container irá procurar o atributo com o nome x a partir do escopo mais restrito até o mais amplo: 1.  pageScope 2.  requestScope 3.  sessionScope 4.  applicationScope q  Por exemplo, se existir a variável x no escopo de requisição com o valor 4 e no escopo de aplicação com valor 6, será exibido 4, pois o escopo de requisição é mais restrito que o de aplicação
  • 61. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 61 MVC n  O modelo MVC oferece uma forma de separar as três camadas principais de uma aplicação web: q  Visão (responsável pela apresentação ao usuário) q  Controle (responsável por gerenciar os eventos que notificam o modelo) q  Modelo (responsável pelas entidades e regras de negócio) n  Para desenvolver uma aplicação Java Web no padrão arquitetural MVC (Model View Controller), basta utilizar: q  JSPs para o HTML (visão) q  Servlets para controlar o comportamento da aplicação (controle) n  Geralmente possuem o sufixo Servlet q  Classes específicas para realizar acesso a um SGBD (modelo) n  Geralmente possuem o sufixo DAO (Data Access Object)
  • 62. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 62 MVC Responsável pela apresentação da resposta Para exibir a resposta, acessa os diversos dados disponibilizados pelo Controle Responsável por interpretar a solicitação do usuário Manipula os parâmetros, faz o pedido de dados ao Modelo e, então, os coloca acessível à Visão Responsável pelo acesso ao SGBD Busca os dados conforme solicitação indireta da Visão e os entrega ao Controle
  • 63. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 63 MVC
  • 64. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 64 MVC n  Algumas são as vantagens da utilização do MVC: q  Independência entre a camada de Visão e a camada de Modelo n  O que permite a troca de um sem impacto ao outro q  Manutenibilidade n  Ocorre um erro na apresentação dos dados, portanto é em uma JSP n  Ocorre um erro de fluxo ou comportamento, portanto é em um servlet n  Ocorre um erro ao acesso ao SGBD, portanto é em uma classe de modelo
  • 65. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 65 Aplicação usando MVC n  De acordo com o diagrama de classes explicando o MVC, vamos fazer uma pequena aplicação de exemplo usando o padrão arquitetural MVC q  Só será implementada a função de inserção de funcionários
  • 66. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 66 Aplicação usando MVC n  Será composta de: q  /web/menuFuncionario.jsp n  Exibição das ações em funcionários q  /web/inserirFuncionario.jsp n  Formulário de inserção do funcionário q  com.terra.modelo.pojo.Funcionario n  Armazenará as informações do funcionário q  com.terra.controle.ManterFuncionarioServlet n  Lógica de negócio q  com.terra.modelo.FuncionarioDAO n  Acesso ao modelo q  /web/resultInsercao.jsp n  Resultado da inserção do funcionário
  • 67. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 67 /web/menuFuncionario.jsp <html> <body> <h1>MENU</h1> <a href="${pageContext.request.contextPath}/inserirFuncionario.jsp"> Inserir </a> <br /> <a href="${pageContext.request.contextPath}/atualizarFuncionario.jsp"> Atualizar </a> <br /> <a href="${pageContext.request.contextPath}/excluirFuncionario.jsp"> Excluir </a> <br /> <a href="${pageContext.request.contextPath}/pesquisarFuncionario.jsp"> Pesquisar </a> <br /> </body> </html>
  • 68. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 68 /web/inserirFuncionario.jsp <html> <body> <h1>Inserir Funcionário</h1> <font color="red"><b>${requestScope.msgErro}</b></font><br /> <form action="${pageContext.request.contextPath}/ManterFuncionario" method="POST"> Nome: <input type="text" name="nome" size="60" maxlength="60" value="${param.nome}" /> <br /> Cargo: <input type="text" name="cargo" size="60" maxlength="60" value="${param.cargo}" /> <br /> <input type="submit" name="evento" value="Inserir" /> <input type="reset" value="Limpar" /> </form> </body> </html>
  • 69. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 69 com.terra.modelo.pojo.Funcionario public class Funcionario { private String nome; private String cargo; public Funcionario(){} public Funcionario(String nome, String cargo) { this.nome = nome; this.cargo = cargo; } public String getNome(){ return this.nome; } public void setNome(String nome){ this.nome = nome; } public String getCargo(){ return this.cargo; } public void setCargo(String cargo){ this.cargo = cargo; } }
  • 70. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 70 com.terra.controle.ManterFuncionarioServlet public class ManterFuncionarioServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String evento = request.getParameter("evento"); if (evento.equals("Inserir")){ this.inserir(request,response); }else if (evento.equals("Atualizar")){ this.atualizar(request,response); }else if (evento.equals("Excluir")){ this.excluir(request,response); }else if (evento.equals("Pesquisar")){ this.pesquisar(request,response); } } //Fim do doPost //Continua no próximo slide
  • 71. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 71 com.terra.controle.ManterFuncionarioServlet private void inserir(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nome = request.getParameter("nome"); String cargo = request.getParameter("cargo"); if (nome==null || nome.equals("")){ request.setAttribute("msgErro", "O campo 'nome' é obrigatório."); request.getRequestDispatcher("/inserirFuncionario.jsp").forward(request, response); return; }else if (cargo==null || cargo.equals("")){ request.setAttribute("msgErro", "O campo 'cargo' é obrigatório."); request.getRequestDispatcher("/inserirFuncionario.jsp").forward(request, response); return; } Funcionario f = new Funcionario(nome,cargo); FuncionarioDAO.insert(f); request.setAttribute("f", f); request.getRequestDispatcher("/resultInsercao.jsp").forward(request, response); } //Fim do inserir ... } //Fim da classe servlet
  • 72. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 72 com.terra.modelo.FuncionarioDAO public class FuncionarioDAO { public static void insert(Funcionario f){ //Código de inserção do funcionário no SGBD } ... }
  • 73. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 73 /web/resultInsercao.jsp <html> <body> <h1>Inserção de Funcionário</h1> O funcionário <b>${requestScope.f.nome}</b> foi inserido com sucesso no cargo de <b>${requestScope.f.cargo}</b>. <br /><br /> <a href="${pageContext.request.contextPath}/menuFuncionario.jsp"> Voltar ao menu </a> <br /> </body> </html>
  • 74. Ricardo Terra (rterrabh [at] gmail.com) Outubro, 2008Java Web 74 Referência Bibliográfica n  BASHAM, Brian; SIERRA, Kathy; BATES, Bert. Head First Servlets and JSP. Sebastopol: O'Reilly, 2008. n  BASHAM, Brian; SIERRA, Kathy; BATES, Bert. Use a Cabeça. Servlets & JSP. Rio de Janeiro: Alta Books, 2005.