• Nenhum resultado encontrado

20/08/14 JAVA SERVLETS CONCEITOS CONTEÚDO ARQUITETURA DE UMA APLICAÇÃO WEB ARQUITETURA DA APLICAÇÃO WEB

N/A
N/A
Protected

Academic year: 2021

Share "20/08/14 JAVA SERVLETS CONCEITOS CONTEÚDO ARQUITETURA DE UMA APLICAÇÃO WEB ARQUITETURA DA APLICAÇÃO WEB"

Copied!
11
0
0

Texto

(1)

J

AVA

S

ERVLETS

C

ONCEITOS Prof. Dr. Henrique Dezani dezani@fatecriopreto.edu.br

T

ECNOLOGIAEM

I

NFORMÁTICAPARA

N

EGÓCIOS

C

ONTEÚDO

¢ 

Arquitetura de uma aplicação Web

— HTTP (HyperText Transfer Protocol)

— Métodos HTTP GET & HTTP POST

— Request & Response

¢ 

Container Servlet

— O que é?

— O que ele oferece?

— Como ele trata as solicitações?

— J2EE, como ele entra nesse assunto?

¢ 

Descritor XML

A

RQUITETURA

DE

UMA

APLICAÇÃO

WEB

¢ 

HTTP

 

(HyperText  Transfer  Protocol)  é  um  protocolo  de  

transporte  e  um  sistema  de  mensagem,  porque  

solicitações  e  respostas  HTTP  são  mensagens.  

¢ 

O  conteúdo  das  mensagem  HTTP  pode  ser  classificado,  

usando  o  sistema  de  Fpo  

MIME

 

(Mul4purpose  Internet  

Mail  Extensions).  

¢ 

HTTP  também  fornece  códigos  de  

status

 

de  resposta  

para  informar  ao  solicitante  se  a  solicitação  obteve  

sucesso  e,  se  não,  porque.  

A

RQUITETURA

DE

UMA

APLICAÇÃO

WEB

¢ 

O  

HTTP

 possui  verbos  bem  conhecidos,  oficilamente  

conhecidos  como  

métodos

,  os  quais  são  dados  na  

tabela  abaixo:  

 

Método Descrição Significado*

GET Pede para recuperar algum recurso na URL Lê (Read)

POST Pede que o servidor aceitar o conteúdo anexado Cria (Create)

PUT Pede para adicionar alguma informação. Edita(Update)

TRACE Pede para voltar ao início da mensagem de solicitação, para que o cliente possa ver o que está sendo recebido do outro lado (utilizado em geral para testes).

DELETE Pede para apagar um determinado recurso Apaga (Delete) * CRUD (Create, Read, Update and Delete)

A

RQUITETURA

DA

A

PLICAÇÃO

W

EB

Cliente Servidor Solicitação http://www.google.com.br

A

RQUITETURA

DA

A

PLICAÇÃO

W

EB

Cliente Servidor Resposta

(2)

A

RQUITETURA

DA

A

PLICAÇÃO

W

EB

Cliente Servidor Solicitação HTTP GET POST

A

RQUITETURA

DA

A

PLICAÇÃO

W

EB

Cliente Servidor Solicitação (Get/Post) Resposta

1 Como é processada a solicitação? 2 Como é definida a resposta?

3 Quando uma solicitação é feita por GET e quando é feita por POST? 4 Como saberemos qual classe será executada?

Perguntas!!

C

ONTAINER

¢ 

Os servlets não possuem um método main(). Eles

estão sob o controle de outra aplicação Java

chamada Container.

— Exemplos: Glassfish e Apache Tomcat (Container

Servlet)

— Quando uma aplicação web recebe uma solicitação

para uma servlet, o servidor entrega a solicitação não ao servlet em si, mas para o Container no qual o servlet é distribuído.

— O Container então entrega ao servlet a solicitação e a

resposta HTTP e, dependendo do tipo de solicitação, chama o método servlet adequado (doGet, doPost etc).

C

ONTAINER

S

ERVLET

O QUE ELE OFERECE?

¢ 

Suporte para comunicações

— O container já trata as requisições e redireciona para

o servlet correto (veremos adiante), portanto não precisamos nos preocupar com a criação de tráfego, escuta de porta, assim como é feito em aplicações ServerSocket.

— Foco na lógica do negócio!

¢ 

Gerenciamento do ciclo de vida

— O container controla a vida e a morte dos seus

servlets, ou seja, ele é responsável por carregar as classes, instânciar, inicializar os servlets e chamar os métodos adequados (Get/Post). E, no final, o próprio container trata de coletar o lixo (Garbage Collector)

— Não é necessário se preocupar com o gerenciamento

de recursos.

C

ONTAINER

S

ERVLET

O QUE ELE OFERECE?

¢ Suporte a Multithread

— O container cria automaticamente uma nova thread em Java para cada solicitação do servlet recebida. Ao finalizar a execução do método do serviço HTTP (Get/Post), a thread é finalizada.

— Poupa tempo de trabalho. ¢ Certeza de Segurança

— Utilizando o Deployment Descriptor XML (web.xml) você pode configurar a segurança sem ter que alterar (e recompilar) qualquer classe.

— Poupa tempo e facilita a manutenção ¢ Suporte ao JSP

— O container é responsável por interpretar os códigos escrtios no JSP e criar as páginas visualizadas pelo cliente final.

C

ONTAINER

S

ERVLET

COMO SÃO TRATADAS AS SOLICITAÇÕES?

Container Servlet GET

Solicitação HTTP

Cliente

(3)

C

ONTAINER

S

ERVLET

COMO SÃO TRATADAS AS SOLICITAÇÕES?

Container Servlet

Cliente

2

O container “vê” que a solicitação é para um servlet e então cria dois objetos: HttpServletRequest e HttpServletResponse

Resposta (HttpServletResponse)

Solicitação (HttpServletRequest)

C

ONTAINER

S

ERVLET

COMO SÃO TRATADAS AS SOLICITAÇÕES?

Container Servlet

Cliente

3

O container encontra o servlet correto baseado na URL da solicitação, cria um thread para essa solicitação e passa os objetos de solicitação e resposta para a thread do servlet.

Thread Solicitação

Resposta

C

ONTAINER

S

ERVLET

COMO SÃO TRATADAS AS SOLICITAÇÕES?

Container Servlet

Cliente

4

O container chama o método tipo de solicitação (Get ou Postservice() ), o método service chama o método do servlet. De acordo com o correspondente (doGet ou doPost).

Neste exemplo consideramos o uso da solicitação por HTTP Get.

Solicitação Resposta

service()

C

ONTAINER

S

ERVLET

COMO SÃO TRATADAS AS SOLICITAÇÕES?

Container Servlet

Cliente

5

O método doGet gera uma página dinamicamente e a insere no objeto resposta (HttpServletResponse). É importante ressaltar que o container ainda tem uma referência do objeto resposta.

service() doGet() <html> </html> Resposta

C

ONTAINER

S

ERVLET

COMO SÃO TRATADAS AS SOLICITAÇÕES?

Container Servlet

Cliente

6

O thread é finalizado, o container converte o objeto resposta em uma resposta HTTP e envia de volta para o cliente. Por último, o container apaga os objetos solicitação e resposta.

<html> </html>

Resposta Solicitação Resposta HTTP

C

ICLO

DE

V

IDA

DA

S

ERVLET

Container Web Servlet Class Servlet Object Container

AServlet.class  

Iniciada

Iniciada

Trata solicitações dos clientes. (doGet(), doPost() etc.) Cada solicitação é tratada em um thread separada. Load  class  

Instancia  a  servlet  (construtor)  

init()  

service()  

destroy()  

O Construtor padrão é executa. NÃO sobrescreva o construtor padrão.

Executado uma única vez no ciclo de vida da servlet e deve ser completado antes do container invocar o método service().

Permite finalizar a servlet antes dela ser eliminada pelo Garbage Collector. Assim como o método init(), este é executado apenas uma vez.

(4)

J2EE (J

AVA

T

O

E

NTERPRISE

E

DITION

)

O QUE É E COMO ELE ENTRA NESSE ASSUNTO

¢ 

J2EE incorpora especificações tais como o

Servlets e a JSP.

¢ 

A especificação J2EE também inclui a

especificação Enterprise JavaBean para o

Container EJB.

¢ 

O container web é para componentes web

(Servlets e JSP) e o container EJB é para

componentes de negócios.

¢ 

Um servidor de aplicação totalmente compatível

com J2EE deve ter tanto um container web como

um container EJB.

—  O Apache Tomcat é apenas um container web!

V

AMOS

P

ROGRAMAR

!

Mas antes, vamos estudar quais é a estrutura de classes utilizada...

<<interface>> Servlet service(ServletRequest, ServletResponse) init(ServletConfig) destroy() getServletConfig() getServletInfo() GenericServlet service(ServletRequest, ServletResponse) init(ServletConfig) init() destroy() getServletConfig() getServletInfo() getInitParameter() getInitParameterNames() getServletContext() log(String) log(String, Throwable) HttpServlet service(HttpServletRequest, HttpServletResponse) service(ServletRequest, ServletResponse) doGet(HttpServletRequest, HttpServletResponse) doPost(HttpServletRequest, HttpServletResponse) doHead(HttpServletRequest, HttpServletResponse) doPut(HttpServletRequest, HttpServletResponse) doTrace(HttpServletRequest, HttpServletResponse) doDelete(HttpServletRequest, HttpServletResponse) getLastModified(HttpServletRequest) ClienteServlet doGet(HttpServletRequest, HttpServletResponse) Servlet Interface (javax.servlet.Servlet) GenericServlet class (javax.servlet.GenericServlet) HttpServlet class (javax.servlet.http.HttpServlet) ClienteServlet class (br.edu.fatecriopreto.controller)

S

ERVLETS

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException { }

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { } }

S

ERVLETS

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException { }

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { } } HttpServlet   ClienteServlet  

S

ERVLETS

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException { }

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws IOException { } } Cliente Servidor Solicitação Resposta

(5)

S

ERVLETS

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException { } } Cliente Servidor Solicitação (GET)

S

ERVLETS

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doPost(HttpServletRequest request,

HttpServletResponse response) throws IOException { } } Cliente Servidor Solicitação (POST)

S

ERVLETS

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

PrintWriter out = response.getWriter();

out.println(“<HTML><BODY>Hello World</BODY></HTML>”); }

}

Cliente Resposta Servidor

D

ESCRITOR

XML

<web-app> <servlet> <servlet-name>ClienteServlet</servlet-name> <servlet-class>ClienteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ClienteServlet</servlet-name> <url-pattern>/cliente</url-pattern> </servlet-mapping> </web-app>

D

ESCRITOR

XML

<web-app> <servlet> <servlet-name>ClienteServlet</servlet-name> <servlet-class>ClienteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ClienteServlet</servlet-name> <url-pattern>/cliente</url-pattern> </servlet-mapping> </web-app> http://localhost/PedidoWeb/cliente  

D

ESCRITOR

XML

<web-app> <servlet> <servlet-name>ClienteServlet</servlet-name> <servlet-class>ClienteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ClienteServlet</servlet-name> <url-pattern>/cliente</url-pattern> </servlet-mapping> </web-app>

(6)

H

TTP

S

ERVLET

R

EQUEST

I

NDEX

.

JSP

<!DOCTYPE  html>   <HTML>    <HEAD>      <TITLE>Cliente</TITLE>    </HEAD>      <BODY>      <A  HREF=“cliente?nome=Fulano”>Exibir</A>    </BODY>     </HTML>  

H

TTP

S

ERVLET

R

EQUEST

I

NDEX

.

JSP

<!DOCTYPE  html>   <HTML>    <HEAD>      <TITLE>Cliente</TITLE>    </HEAD>      <BODY>  

   <A  HREF=“cliente?nome=Fulano”>Exibir</A>    </BODY>  

 

</HTML>   Parâmetros passados para o servidor

Símbolo para indicar que parâmetros serão enviados

URL da Servlet (<url-pattern>/cliente</url-pattern>)

H

TTP

S

ERVLET

R

EQUEST

...

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String nome = request.getParameter(“nome”); }

...

Cliente Servidor

Solicitação (GET)

<A HREF=“cliente?nome=Fulano”>Exibir</A>

M

ENSAGEM

HTTP

M

ÉTODO

GET

GET  /localhost/cliente?nome=Fulano  HTTP/1.1  

Host:  localhost  

User-­‐Agent:  Chrome  (Macintosh;  PPC  Mac  OS  X)   Accept:  text/xml,application/xml,text/plain   Accept-­‐Language:  en-­‐us,  en  

Accept-­‐Encoding:  gzip   Accept-­‐Charset:  ISO-­‐8859-­‐1,utf-­‐8   Keep-­‐Alive:300   Connection:  keep-­‐alive   Cabeçalho da solicitação Não há corpo da mensagem Método

HTTP O caminho do recurso no servidor web

Nas requisições GET, os parâmetros, caso haja algum, são adicionados à URL da

solicitação

A versão do protocolo que o navegador está solicitando

H

TTP

S

ERVLET

R

EQUEST

I

NDEX

.

JSP

<!DOCTYPE  html>   <HTML>    <HEAD>      <TITLE>Cliente</TITLE>    </HEAD>      <BODY>  

   <A  HREF=“cliente?nome=Fulano&idade=35”>Exibir</A>    </BODY>  

 

</HTML>   Símbolo utilizado na concatenação de parâmetros

H

TTP

S

ERVLET

R

EQUEST

...

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String nome = request.getParameter(“nome”); String idade = request.getParameter(“idade”); }

...

Cliente Servidor

Solicitação (GET)

(7)

H

TTP

S

ERVLET

R

EQUEST

<<interface>> ServletRequest getAttribute(String) getContentLength() getInputStream() getLocalPort() getParameter() getParameterNames() // E MUITOS OUTROS... <<interface>> HttpServletRequest getContextPath() getCookies() getHeader(String) getQueryString() getSession() getMethod() // E MUITOS OUTROS...

H

TTP

S

ERVLET

R

EQUEST

...

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String nome = request.getParameter(“nome”);

String idade = request.getParameter(“idade”); } ... Cliente Servidor Solicitação (GET) Mas idade é um número inteiro...

H

TTP

S

ERVLET

R

EQUEST

...

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String nome = request.getParameter(“nome”);

int idade = request.getParameter(“idade”); }

...

Cliente Servidor

Solicitação (GET)

Agora sim está correto! Mas não compila!!!

H

TTP

S

ERVLET

R

EQUEST

...

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String nome = request.getParameter(“nome”);

int idade = request.getParameter(“idade”); }

...

Cliente Servidor

Solicitação (GET)

Como armazenar uma String como número inteiro?

Parâmetros são sempre do tipo String!!!

H

TTP

S

ERVLET

R

EQUEST

...

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String nome = request.getParameter(“nome”);

String sIdade = request.getParameter(“idade”);

int idade = Integer.parseInt(sIdade); } ... Cliente Servidor Solicitação (GET)

H

TTP

S

ERVLET

R

EQUEST

<!DOCTYPE  html>   <HTML>    <HEAD>      <TITLE>Cliente</TITLE>    </HEAD>      <BODY>  

   <FORM  ACTION=“cliente”  METHOD=“POST”>        <INPUT  TYPE=“TEXT”  NAME=“nome”/>        <INPUT  TYPE=“SUBMIT”  VALUE=“Enviar”/>      </FORM>  

 </BODY>   </HTML>  

(8)

M

ENSAGEM

HTTP

M

ÉTODO

POST

POST  /localhost/cliente  HTTP/1.1  

Host:  localhost  

User-­‐Agent:  Chrome  (Macintosh;  PPC  Mac  OS  X)   Accept:  text/xml,application/xml,text/plain   Accept-­‐Language:  en-­‐us,  en  

Accept-­‐Encoding:  gzip   Accept-­‐Charset:  ISO-­‐8859-­‐1,utf-­‐8   Keep-­‐Alive:300   Connection:  keep-­‐alive   Cabeçalho da solicitação Corpo da mensagem Método HTTP O caminho do recurso no servidor web

Nas solicitações por POST, os parâmetros são passados no corpo da mensagem e, portanto, não são limitados como o GET.

A versão do protocolo que o navegador está solicitando

nome=Fulano

H

TTP

S

ERVLET

R

EQUEST

<!DOCTYPE  html>   <HTML>    <HEAD>      <TITLE>Cliente</TITLE>    </HEAD>      <BODY>  

   <FORM  ACTION=“cliente”  METHOD=“POST”>        <INPUT  TYPE=“TEXT”  NAME=“nome”/>        <INPUT  TYPE=“SUBMIT”  VALUE=“Enviar”/>      </FORM>  

 </BODY>   </HTML>  

URL da Servlet (<url-pattern>/cliente</url-pattern>)

H

TTP

S

ERVLET

R

EQUEST

...

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String nome = request.getParameter(“nome”); }

...

Cliente Servidor

Solicitação (POST)

<INPUT TYPE=“TEXT” NAME=“nome”/>

H

TTP

S

ERVLET

R

EQUEST

E se os parâmetros tiverem o mesmo nome?

<FORM  ACTION=“MinhaServlet”  METHOD=“post”>    

 <INPUT  TYPE=“CHECKBOX”  NAME=“modulo”  value=“Java”/>    

 <INPUT  TYPE=“CHECKBOX”  NAME=“modulo”  value=“Net”/>    

 <INPUT  TYPE=“SUBMIT”  VALUE=“Enviar”/>    

</FORM>  

 

H

TTP

S

ERVLET

R

EQUEST

...

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException {

String[] nome = request.getParameterValues(“modulo”); }

...

Cliente Servidor

Solicitação (POST)

<INPUT TYPE=“CHECKBOX” NAME=“modulo” value=“Java”/> <INPUT TYPE=“CHECKBOX” NAME=“modulo” value=“Net”/>

H

TTP

S

ERVLET

R

EQUEST

¢ 

E se eu não souber o nome dos

parâmetros?

¢ 

E se eu quisesse obter informações sobre

o cabeçalho da solicitação?

¢ 

Como eu faria para obter a quantidade

de saltos de roteadores realizadas?

¢ 

E para recuperar a sessão do cliente?

¢ 

E para recuperar os cookies?

¢ 

Como é possível identificar o método que

será executado (GET/POST)?

(9)

H

TTP

S

ERVLET

R

EQUEST

¢ E se eu não souber o nome dos parâmetros? request.getParameterNames()

¢ E se eu quisesse obter informações sobre o cabeçalho da solicitação?

request.getHeader(“User-Agent”)

¢ Como eu faria para obter a quantidade de saltos de roteadores realizadas?

request.getHeader(“Max-Forwards”) ¢ E para recuperar a sessão do cliente?

request.getSession() ¢ E para recuperar os cookies?

request.getCookies()

¢ Como é possível identificar o método que será executado (GET/POST)? request.getMethod() Exis tem mui tos ou tros mét odos ...

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException { }

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException { }

}

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

<<interface>> ServletResponse getBufferSize() setContentType() getOutputStream() getWriter() // E MUITOS OUTROS... <<interface>> HttpServletResponse addCookie() addHeader() encodeRedirectURL() sendError() setStatus() // E MUITOS OUTROS...

H

TTP

S

ERVLET

R

ESPONSE

¢ 

A resposta para o cliente pode ser:

— Caracteres (PrintWriter)

— Byes (OutputStream)

¢ 

Podemos definir o MIME (tipo do conteúdo), por exemplo

“text/html” utilizando o método setContentType();

response.setContentType(“text/html”);

Alguns tipos: text/html application/pdf video/quicktime application/java image/jpeg application/jar application/x-zip

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

PrintWriter out = response.getWriter(); out.println(“Algum texto ou HTML”); }

}

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

PrintWriter out = response.getWriter(); out.println(“Algum texto ou HTML”); }

}

(10)

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

ServletOutputStream out = response.getOutputStream();

out.write(aByteArray); }

}

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

ServletOutputStream out = response.getOutputStream(); out.write(aByteArray);

} }

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

response.setContentType(“text/html”);

PrintWriter out = response.getWriter(); out.println(“<HTML><BODY>Teste</BODY></HTML>”); }

}

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

response.setContentType(“application/txt”);

PrintWriter out = response.getWriter(); out.println(“Hello World”);

} }

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

response.setContentType(“application/txt”);

response.setHeader("Content-Disposition","attachment; filename=teste.txt"); PrintWriter out = response.getWriter();

out.println(“Hello World”); }

}

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

¢ 

Além de retornar uma resposta para o cliente a

partir de uma Servlet, é possível que você passe

para outra “coisa” lidar com a resposta.

¢ 

Para isso podemos utilizar tanto

Redirecionamento

quanto

RequestDispatch.

Qual a diferença

(11)

H

TTP

S

ERVLET

R

ESPONSE

R

EDIRECIONAMENTO

¢ 

Quando uma servlet faz um redirecionamento, é

como se pedíssemos que o cliente digitasse outra

URL. Nesse caso o cliente é o Navegador.

O usuário vê a nova URL no navegador!!

H

TTP

S

ERVLET

R

ESPONSE

R

EDIRECIONAMENTO

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

response.sendRedirect(“http://www.google.com.br”); }

}

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

R

EDIRECIONAMENTO

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

response.sendRedirect(“cliente?nome=Pedro”); }

}

Cliente Resposta Servidor

Podemos utilizar o redirecionamento para chamar outras classes dentro da aplicação.

H

TTP

S

ERVLET

R

ESPONSE

R

EQUEST

D

ISPATCH

¢ 

Quando um servlet faz o request dispatch, é como

se pedíssemos que um colega de trabalho

cuidasse de um cliente. O colega de trabalho

acaba respondendo ao cliente, mas o cliente não

sabe disso, e também pouco se importa.

O usuário NÃO vê a nova URL no navegador!!

H

TTP

S

ERVLET

R

ESPONSE

R

EQUEST

D

ISPATCH

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException, ServletException { RequestDispatcher view = request.getRequestDispatcher(“index.jsp”); view.forward(request, response); } }

Cliente Resposta Servidor

H

TTP

S

ERVLET

R

ESPONSE

R

EQUEST

D

ISPATCH

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

public class ClienteServlet extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws IOException {

RequestDispatcher view =

request.getRequestDispatcher(“index.jsp”); view.forward(request, response);

} }

Cliente Resposta Servidor

Página que continuará a execução

Passamos a solicitação e a resposta, para que quem continuar a execução saiba para onde retornar os dados

Referências

Documentos relacionados

A Diretoria-Geral do Câmpus Itaquaquecetuba do Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP, por meio de sua Coordenadoria de Extensão, no uso

Em termos da orgânica do novo Instituto, optou-se por uma estrutura simples que, garantindo a desejada coordenação das actividades, remete para as delegações a criar uma ampla

Por isso, não pode existir Pessoa Jurídica individual para executar atividades de profissões liberais, pois essas atividades não são consideradas econômicas, mas sim profissionais,

Medidas similares foram realizadas para a amostra B, que está mais próxima dos QDs de InAs em energia de PL. Como a Figura 4.23 indica, também há um deslocamento da energia do pico

Ÿ Implementar pequenos Sistemas Automáticos; Ÿ Aplicar lógicas Temporizadas em problemas reais; Ÿ Utilizar Contadores para diversas aplicações; Ÿ Compreender as

 Projeto: Nanoemulsões à base de óleo de copaíba (Copaifera multijuga Hayne): Desenvolvimento tecnológico, estudo de permeação cutânea, avaliação da atividade

as semelhanças, os conflitos e as solidariedades, as igualdades e as desigualdades; f) aceitar a possibilidade de várias interpretações; g) problematizar a vida social, o passado e

Por este motivo a hoje Federação de Academias de História Militar Terrestre do Brasil, a sucessora da AHIMTB em 23 de abril de 2011, bicentenário da Academia Militar