Buscar

Aula 5 - Servlets e Eclipse JEE - Linguagem Web

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 87 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 87 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 87 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

*
Roteiro
*
Aplicações Web (Contextos)
O que são Servlets?
Funcionamento Básico
API
Ciclo de Vida
Criando Aplicação Web no Eclipse
HttpServletRequest
HttpServletResponse
Referências
*
Web Containers suportam a implantação de múltiplas aplicações Web
O conceito de contextos Web é usado diferenciar sites ou projetos distintos em um mesmo servidor
É como uma pasta virtual que, quando acessada, remete a algum projeto em questão
No Tomcat, essas aplicações estão na pasta webapps/
Veja o conteúdo de webapps no seu servidor
Todo diretório de contexto tem uma estrutura definida
Aplicações Web (Contextos)
*
Estrutura de uma aplicação web
*
Pasta do <contexto>
É a pasta base que dá nome à aplicação web
Melhor não conter espaços em branco no nome
Contém arquivos HTML, documentos JSP, figuras, arquivos texto, classes de applets e outros recursos
Os arquivos nesta pasta são acessíveis ao browser
Sub-pastas podem ser criadas para organizar melhor os arquivos
Ex.: uma pasta para as figuras, css, etc
*
Pasta WEB-INF (maiúsculo!)
Contém os recursos que não estão acessíveis diretamente ao browser
Contém o arquivo descritor da aplicação web ou deployment descriptor, arquivo web.xml
Deve possuir, obrigatoriamente, uma pasta chamada classes/, mesmo que a aplicação web não possua servlets.
Uma pasta lib/ é opcional
*
Pasta classes
Esta pasta contém os servlets (*.class, arquivos de bytecodes) da aplicação web
Classes servlets em pacotes têm a estrutura de diretórios do pacote criada a partir deste ponto
Não ponha os documentos JSP aqui; eles não ficarão acessíveis aos clientes
Não ponha bibliotecas (tais como drivers JDBC) aqui;
Use a pasta <contexto>/WEB-INF/lib
*
Implantando Contextos
Duas formas:
Criar manualmente a estrutura de diretórios de um contexto na pasta <tomcat>/webapps/
Copiar um arquivo de aplicação web (WebARchive) para a pasta <tomcat>/webapps/
Arquivos WAR contêm um contexto zipado (zip)
Ex.: Biblioteca.war
*
Acesso ao Contexto
URL base do contexto:
http://localhost:8080/contexto
Recursos que estejam na pasta base do contexto:
http://serv:8080/contexto/index.html
http://serv:8080/contexto/cadastro.jsp
URL de acesso a servlets:
http://serv:8080/contexto/<url mapeada no web.xml>
*
O que são Servlets?
*
Extensão de servidor escrita em Java
Podem ser usados para estender qualquer tipo de aplicação do modelo requisição-resposta
Todo servlet implementa a interface javax.servlet.Servlet (tipicamente estende GenericServlet)
Servlets HTTP
Extensões para servidores Web
Estendem javax.servlet.http.HttpServlet
Lidam com características típicas do HTTP como métodos GET, POST, Cookies, etc.
*
Funcionamento Básico
*
*
Principais classes e interfaces
*
*
*
Ciclo de Vida
O ciclo de vida de um servlet é controlado pelo container
Quando o servidor recebe uma requisição, ela é repassada para o container que a delega a um servlet. O container
Carrega a classe na memória
Cria uma instância da classe do servlet
Inicializa a instância chamando o método init()
Depois que o servlet foi inicializado, cada requisição é executada em um método service()
O container cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e depois chama service() passando os objetos como parâmetros
Quando a resposta é enviada, os objetos são destruídos
Quando o container decidir remover o servlet da memória, ele o finaliza chamando destroy()
*
Ciclo de Vida
*
Uma Aplicação Servlet
Para criar uma aplicação servlet
Definir estrutura de diretório da aplicação
Escrever um servlet
Compilar um servlet
Mapear um servlet: via web.xml ou via annotation (servlet 3.0)
Acessar um servlet
*
Definir estrutura da servlet
Como visto, toda aplicação web (contexto) tem a seguinte estrutura definida dentro da pasta webapps do Tomcat
{Contexto}/ - HTML, JSP, Imagens e CSS 
{Contexto}/WEB-INF/classes
{Contexto}/WEB-INF/lib
{Contexto}/WEB-INF/web.xml 
*
Escrever um servlet HTTP
Para escrever um servlet HTTP, deve-se estender HttpServlet e implementar um ou mais de seus métodos de serviço, tipicamente: doPost() e/ou doGet()
public class HelloWorldServlet extends HttpServlet {
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("Hello, World!");
		out.println("</body>");
		out.println("</html>");
 }
}
*
Compilar um servlet
Para compilar o código, você precisa incluir no classpath o arquivo servlet-api.jar, que fica no diretório lib do Tomcat
javac -classpath $CATALINA_HOME/lib/servlet-api.jar HelloWorldServlet.java
Copiar o .class gerado (HelloWorldServlet.class) para a pasta {Contexto}/WEB_INF/classes dentro do webapps do Tomcat
*
Mapear um Servlet via web.xml
Chamar a servlet pelo pacote e nome da classe acabaria criando URLs estranhas e complexas
Precisamos fazer um mapeamento de uma URL específica para uma servlet através do arquivo web.xml (deployment descriptor), que fica dentro do {Contexto}/WEB-INF
*
Mapear um Servlet via web.xml
Dois elementos no web.xml são utilizados para mapear servlets
*
Mapear um Servlet via web.xml
*
Mapear um Servlet via web.xml
Exemplo
<servlet>
 <servlet-name>primeiraServlet</servlet-name>
 <servlet-class>OiMundo</servlet-class>
</servlet>
 
<servlet-mapping>
 <servlet-name>primeiraServlet</servlet-name>
 <url-pattern>/oi</url-pattern>
 <url-pattern>/ola</url-pattern>
</servlet-mapping>
*
Mapear um Servlet via annotations
Annotations
Implementado a partir do JDK1.5
Iniciam com o sinal arroba "@" = "at"
Utilizadas para definir metadados (informações sobre o próprio código) que podem ser posteriormente interpretadas por um compilador ou pré compilador que irá realizar alguma tarefa pré definida 
*
Mapear um Servlet via annotations
@WebServlet – annotation usada para registrar um Servlet em um container
Alguns atributos
name – nome da servlet
description – descrição da servlet
value – URL de acesso a servlet (padrão)
urlPatterns – mesmo propósito de value, geralmente utilizado quando mais de uma url é especificada
loadOnStartup – carrega a servlet na inicialização do container 
Não é possível ter ao mesmo tempo os atributos value e urlPatterns
*
Mapear um Servlet via annotations
Exemplos
@WebServlet( “/HelloServlet” )
@WebServlet(value="/hello", name="hello-servlet") 
@WebServlet( {“/HelloServlet”, “/member/*”} )
@WebServlet( name=“Hello”, urlPatterns={“/HelloServlet”, “/*.html”} )
@WebServlet(name="OlaServlet", urlPatterns={"/oi", "/ola"}) 
public class OlaServlet extends HttpServlet{ 
 //... 
}
*
Sintaxe de Mapeamentos
Mapeamento exato
Não aceita /nome/ ou /nome/x na requisição
	<url-pattern>/nome</url-pattern>
	<url-pattern>/nome/subnome</url-pattern>
Mapeamento para servlet default
Servlet é chamado se nenhum dos outros mapeamentos existentes combinar com a requisição
	<url-pattern>/</url-pattern>
Mapeamento de caminho
Aceita texto adicional (path info) após nome do servlet na requisição
	<url-pattern>/nome/*</url-pattern>
	<url-pattern>/nome/subnome/*</url-pattern>
Mapeamento de extensão
Arquivos com a extensão serão redirecionados ao servlet
	<url-pattern>*.ext</url-pattern>
*
Acessando um Servlet
O acesso a esse Servlet pelo navegador será digitando MeuServlet no caminho da sua aplicação Web:
http://localhost:8080/<contexto>/<url da servlet>
Exemplo
http://localhost:8080/HelloWorld/hello
*
Criando uma Aplicação Web no Eclipse
1
2
*
Criando uma Aplicação Web no Eclipse
3
4
*
Criando uma Aplicação Web no Eclipse
5
6
*
Criando uma Aplicação Web no Eclipse
*
O Código da Servlet
*
Rodando aServlet
Clicar com botão direito no projeto, selecionar Run As > Run on Server
*
Rodando a Servlet
Em Servers, selecionar o Servidor criado anteriormente
*
Rodando a Servlet
Basta selecionar o nosso projeto e clicar em Add>
*
Rodando a Servlet
Agora, precisamos acessar nossa servlet
http://localhost:8080/HelloWorld/HelloWorldServlet
*
Exercício para casa
Criar um servlet que exibe uma saudação dependendo da hora
Se hora >= 5 e hora < 13, mostre “Bom dia!!!”
Se hora >=13 e hora < 19, mostre “Boa Tarde!!!”
Se hora >=19 e hora < 24, mostre “Boa Noite!!!”
Senão, mostre “Boa Madrugada!!!”
A servlet deve ser acessado pela URL http://localhost:8080/aula05/saudacao
Para pegar a hora atual:
Calendar now = Calendar.getInstance();
now.get(Calendar.HOUR_OF_DAY)
*
Requisição - ServletRequest
*
Requisição - Request
Interface ServletRequest
(javax.servlet.ServletResquest)
Retorna o objeto que possui nome igual ao passado como parâmetro. Caso não exista, retorna null.
*
Requisição - Request
Retorna porta onde se encontra o servidor
Interface ServletRequest
(javax.servlet.ServletResquest)
*
Requisição - Request
Retorna a porta do cliente.
Interface ServletRequest
(javax.servlet.ServletResquest)
*
Requisição - Request
Retorna a porta do servidor na qual a thread do cliente está rodando de fato.
Interface ServletRequest
(javax.servlet.ServletResquest)
*
Requisição - Request
Retorna o endereço IP do cliente.
Interface ServletRequest
(javax.servlet.ServletResquest)
*
Requisição - Request
Retorna o valor de um parâmetro de solicitação como uma String, ou null se o parâmetro não existir.
Interface ServletRequest
(javax.servlet.ServletResquest)
*
Requisição - Request
Retorna um array de objetos String contendo todos os valores dados por um parâmetro em uma requisição, ou null se o parâmetro não existir. Se o parâmetro tem um único valor, o array terá uma única
posição.
Interface ServletRequest
(javax.servlet.ServletResquest)
*
Requisição - Request
Retorna um Enumeration de objetos String contendo os nomes dos parâmetros da requisição. Se a requisição não apresentar parâmetros, o método retorna um Enumeration vazio.
Interface ServletRequest
(javax.servlet.ServletResquest)
*
Exemplo
Usando o getParameter() e getParameterNames()
Crie um pequeno formulário que envie parâmetros;
Imprima os parâmetros enviados.
Passos
Criar novo projeto
Criar arquivo formulario.html contendo o formulário
Criar o servlet, ParametrosServlet, que recebe e imprime os dados do formulário
formulario.html
ParametrosServlet
*
formulario.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Obtendo parâmetros</title>
</head>
<body>
<form method="GET" action="ParametrosServlet">
Nome: <br/>
<input type="text" name="nome"><br/>
Sobrenome: <br/>
<input type="text" name="sobrenome"><br/>
<input type="submit" value=“Enviar">
</form>
</body>
</html>
*
ParametrosServlet
public class ParametrosServlet extends HttpServlet {
 protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	out.println("<html>");
	out.println("<head>");
	out.println("<title> Obtendo Parâmetros </title>");
	out.println("</head>");
	out.println("<body>");
	out.println("<h3>Os parâmetros da requisição são: </h3>");
	Enumeration parameters = request.getParameterNames();
	while (parameters.hasMoreElements()) {
		String parameter = (String) parameters.nextElement();
		out.println("<b>" + parameter + "</b>: "
			+ request.getParameter(parameter) + "<br>");
	}
	out.println("</body>");
	out.println("</html>");
 }
}
*
Exemplo
Obtenção de múltiplos parâmetros (getParameterValues)
Crie no doGet um formulário que envia múltiplos valores por POST que são capturados e impressos no método doPost. 
Criar o servlet MultiplosParametrosServlet
No doGet(), monta o formulário e no doPost recebe e mostra os parâmetros
*
MultiplosParametrosServlet(1/2)
public class MultiplosParametrosServlet extends HttpServlet {
 protected void doGet(HttpServletRequest request,
	HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	out.println("<html>");
	out.println("<head>");
	out.println("<title> Obtendo Múltiplos Parâmetros </title>");
	out.println("</head>");
	out.println("<body>");
	out.println("<h3>Escolha as Músicas: </h3>");
	out.println("<form method=\"post\">");
	out.println("<input type=\"checkbox\" name=\"musica\" value=\"ROCK\">Rock<br/>");
	out.println("<input type=\"checkbox\" name=\"musica\" value=\"POP\">Pop<br/>");
	out.println("<input type=\"checkbox\" name=\"musica\" value=\"FORRÓ\">Forró<br/>");
	out.println("<input type=\"checkbox\" name=\"musica\" value=\"MPB\">MPB<br/>");
	out.println("<input type=\"checkbox\" name=\"musica\" value=\"SERTANEJO\">Sertanejo<br/>");
	out.println("<input type=\"submit\" name=\"Enviar\">");
	out.println("</form>");
	out.println("</body>");
	out.println("</html>");
 }
(...)
*
MultiplosParametrosServlet(2/2)
protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
	String[] values = request.getParameterValues("musica");
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	if (values != null) {
		int length = values.length;
		out.println("Músicas Escolhidas:");
		for (int i = 0; i < length; i++) {
			out.println("<br>" + values[i]);
		}
	}
}
*
Trabalho
Crie uma nova aplicação para a web através da qual os visitantes possam registrar seu perfil.
 Os dados a serem captados são os seguintes:
 Nome: um campo de texto.
 Sexo: dois botões de rádio.
 Idade: uma caixa de combinação contendo as opções abaixo.
Até 18 anos
De 19 a 30 anos
De 31 a 40 anos
De 41 a 50 anos
Mais de 50 anos
 Preferências musicais: caixas de checagem.
 Descrição: uma área de texto.
 A aplicação deve conter apenas um servlet e uma página HTML.
*
Trabalho
*
Trabalho
Crie uma nova aplicação para a web composta por um servlet e uma página HTML.
 A HTML deve conter apenas um formulário através do qual o visitante informará seu peso e sua altura.
 O servlet deve calcular o IMC do visitante e exibir o resultado, que deve conter: o peso e altura informados, o IMC calculado e a categoria na qual se enquadra.
 Fórmula: IMC = Peso / Altura2
 Classificação do IMC em categorias:
Menor que 18,5: Abaixo do peso
 De 18,5 a 24,9: Peso normal
 De 25,0 a 29,9: Sobrepeso
 De 30,0 a 34,9: Obesidade Grau I
 De 35,0 a 39,9: Obesidade Grau II
 40,0 ou superior: Obesidade Grau III
*
Trabalho
*
Requisição - HttpServletRequest
*
Requisição - HttpServletRequest
Retorna um array contendo todos os objetos Cookie que o cliente enviou na Resquest corrente.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Requisição - HttpServletRequest
Retorna o valor do cabeçalho especificado como um long que representa um objeto Date.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Requisição - HttpServletRequest
Retorna uma String com o valor do cabeçalho especificado, ou null se o cabeçalho não existir.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Requisição - HttpServletRequest
Retorna um Enumeration de objetos String contendo os nomes dos cabeçalhos da requisição. Se a requisição não apresentar cabeçalhos, o método retorna um Enumeration vazio.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Requisição - HttpServletRequest
Retorna um Enumeration de objetos String contendoos valores de um cabeçalho específico da requisição.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Requisição - HttpServletRequest
Retorna um Enumeration de objetos String contendo os valores do cabeçalho especificado.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
*
Requisição - HttpServletRequest
Retorna o valor do cabeçalho especificado como um inteiro.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Exemplo
Obtenção de cabeçalhos HTTP a partir de HttpServletRequest
public class ListaCabecalhosServlet extends HttpServlet {
 protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	Enumeration enumeration = request.getHeaderNames();
	while (enumeration.hasMoreElements()) {
 	 String cabecalho = (String) enumeration.nextElement();
	 out.println(cabecalho + ": " + request.getHeader(cabecalho) + "<br>");
	}
 }
}
*
Requisição - HttpServletRequest
Retorna o tipo do método HTTP da requisição (GET, POST,...)
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Requisição - HttpServletRequest
Retorna a string de consulta da requisição, ou null caso não URL não contiver string de consulta. String de consulta é a parte da URL após ao sinal de interrogação “?”.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Exemplo
Crie um pequeno formulário que envie parâmetros;
Imprima a string de busca.
*
QueryStringServlet
public class QueryStringServlet extends HttpServlet {
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	out.println("<html>");
	out.println("<head>");
	out.println("<title> Obtaining the Query String </title>");
	out.println("</head>");
	out.println("<body>");
	out.println("<b>Query String: </b>"+request.getQueryString()+"<br/><br/>");
	out.println("<form method=\"GET\">");
	out.println("First name: <br/>");
	out.println("<input type=\"text\" name=\"FirstName\"><br/>");
	out.println("Last name: <br/>");
	out.println("<input type=\"text\" name=\"LastName\"><br/>");
	out.println("<input type=\"submit\" value=\"Submit\">");
	out.println("</form>");
	out.println("</body>");
	out.println("</html>");
 }
}
*
Requisição - HttpServletRequest
Retorna a sessão corrente associada a essa requisição, ou se requisição não tem um sessão, cria uma nova.
Interface HttpServletRequest
(javax.servlet.http.HttpServletResquest)
*
Resposta - Response
*
Response
Response é a resposta do servidor
O Response permite:
Enviar uma resposta a solicitação do cliente
Redirecionar para outra URL
Despachar para outro componente da aplicação
*
Enviando uma resposta
Duas das principais opções para saída de dados 
OutputStream (response.getOutPutStream())
Usado para enviar qualquer tipo de dado
PrintWriter (response.getWriter()) 
Restrito a caracteres de texto
Você sempre deve dizer ao browser o que está sendo enviado, para que ele possa fazer a coisa certa.
response.setContentType(“tipo”)
Tipo: text/html, application/pdf, video/quicktime, image/jpeg, application/jar,... (http://www.iana.org/assignments/media-types/index.html).
*
Enviando uma resposta
OutputStream
Usado para enviar dados em geral
PrintWriter
Usado para enviar caracteres
ServletOutputStream out = response.getOutputStream();
out.write(arrayBytes);
PrintWriter out = response.getWriter();
out.println(“texto HTML”)
*
Resposta – Envio de Caracteres
public class PrintWriterServlet extends HttpServlet {
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println(“PrintWriter!");
		out.println("</body>");
		out.println("</html>");
 }
}
Deve-se evitar a utilização de stream. O correto é utilizar páginas JSP (que será estudado ainda) para retornar ao usuário a resposta
*
Resposta – Envio de dados em geral
public class OutputStreamServlet extends HttpServlet {
 protected void doPost(HttpServletRequest request,
	HttpServletResponse response) throws ServletException, IOException {
	
	response.setContentType("application/pdf");
	ServletContext ctx = getServletContext();
	InputStream is = ctx.getResourceAsStream("/bookCode.pdf");
	int read = 0;
	byte[] bytes = new byte[1024];
	OutputStream os = response.getOutputStream();
	while ((read = is.read(bytes)) != -1)
		os.write(bytes, 0, read);
	os.flush();
	os.close();
 }
}
*
Enviando uma resposta
O método sendError(int sc, String msg) do objeto HttpServletResponse é usado para enviar uma resposta ao cliente usando um código de status específico
Alguns códigos de Status: HttpServletResponse.SC_OK, HttpServletResponse.SC_NOT_FOUND, HttpServletResponse.SC_UNAUTHORIZED, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, HttpServletResponse.SC_REQUEST_TIMEOUT, HttpServletResponse.SC_NOT_MODIFIED, HttpServletResponse.SC_METHOD_NOT_ALLOWED, HttpServletResponse.SC_FORBIDDEN  
*
Redirecionamento
O redirecionamento é feito através do método sendRedirect, que é acessível pelo objeto Response
response.sendRedirect(“string contendo URL”)
response.sendRedirect(“http://www.google.com.br”)
Redireciona a solicitação para uma URL completamente diferente.
*
Redirecionamento
O redirecionamento pode ser feito utilizando URLs relativas de duas maneiras.
Forma 1: relativa a URL de solicitação inicial.
http://www.wichedlysmart.com/myApp/cool/bar.do
http://www.wichedlysmart.com/myApp/cool/foot/stuff.html
sendRedirect(“foot/stuff.html”)
*
Redirecionamento
Forma 2: relativa a raiz da aplicação web.
http://www.wichedlysmart.com/myApp/cool/bar.do
http://www.wichedlysmart.com/foot/stuff.html
sendRedirect(“/foot/stuff.html”)
*
Exemplo LoginServlet
public class LoginServlet extends HttpServlet {
 protected void doGet(HttpServletRequest request,
	HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	out.println("<html>");
	out.println("<head><title> Obtaining the Query String </title></head>");
	out.println("<body>");
	out.println("<h3> Please enter you user name and password </h3>");
	out.println("<form method=\"POST\">");
	out.println("User name: <br/> <input type=\"text\" name=\"userName\"><br/>");
	out.println("Password: <br/><input type=\"password\" name=\"password\"><br/>");
	out.println("<input type=\"submit\" value=\"Submit\">");
	out.println("</form>");
	out.println("</body>");
	out.println("</html>");
 }
 protected void doPost(HttpServletRequest request,
	HttpServletResponse response) throws ServletException, IOException {
	String userName = request.getParameter("userName");
	String password = request.getParameter("password");
	if (userName != null && password != null && userName.equals("admin")
			&& password.equals("admin")) {
		response.sendRedirect("/Exemplos/");
	} else {
		response.sendError(HttpServletResponse.SC_FORBIDDEN,"Login failed.");
	}
 }
}
*
Despachando
Despacha a solicitação para algum outro componente da sua aplicação (geralmente um JSP)
O usuário nunca saberá que outra parte da aplicação assumiu o controle, pois a URL no browser não muda
RequestDispatcher view = 
 request.getRequestDispatcher(“resultado.jsp”);
view.forward(request, response);
ou
view.include(request, response);
*
Método include e forward
Recebem o conteúdo produzido pela localização especificada e fazemdele uma parte da resposta da servlet ao usuário
Diferenças
forward faz com que o alvo seja a entidade com responsabilidade de gerar a resposta
Include somente incorpora o conteúdo do alvo
Ao usar o include podemos acrescentar outros conteúdos à resposta
*
Redirecionar x Despachar
Redirecionamento faz o cliente executar o trabalho
A URL no browser muda
O request dispatch faz com que outro componente do servidor execute o trabalho
A URL não muda no browser
Redirecionar = Cliente
Despachar = Servidor
*
Dúvidas
*
Referências
Aulas da Disciplina de Java Web do Prof. Tarcísio Lucas

Outros materiais