3.1 Servlet Inicia Sessão – Reescrita de URL

package br.aiec;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet(name = "IniciarSessaoReescritaURL", urlPatterns = "/iniciarSessaoReescritaURL")
public class IniciarSessaoReescritaURLDemoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,  

IOException

{ HttpSession session = request.getSession(); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title> Iniciar Sessão - Reescrita de URL </title>"); out.println("</head>"); out.println("<body>"); if (session.isNew()) { String urlEncoded =

response.encodeRedirectURL("iniciarSessaoReescritaURL");

response.sendRedirect(urlEncoded); } out.println("Seu número da sorte é: " + (int)( 0

+ Math.random()*100) );

out.println("<br /> <a href='"

+ response.encodeURL("finalizarSessaoReescritaURL")

+"'>Finalizar Sessão</a>"); out.println("</body>"); out.println("</html>"); } }

Observe que existem duas operações para reescrever a URL (adicionar o “session id” ao final da mesma): encodeRedirectURL e encodeURL, ambas da interface “javax.servlet.http.HttpServletResponse”. A primeira operação é utilizada para codificar a URL todas as vezes que se deseja redirecionar uma conexão por meio da operação “sendRedirect” da referida interface. Já a segunda operação é utilizada apenas para codificar a URL.

Repare que o redirecionamento na primeira requisição é fundamental para determinar se o container irá trabalhar com cookies ou reescrita. Isso acontece porque o servidor só tem como saber se o cliente permite o uso de cookies ou não a partir da segunda requisição. Deste modo o servidor utiliza o “sendRedirect” para forçar o navegador a realizar a segunda requisição de modo ele, o servidor, possa definir o modo como irá trabalhar (cookie ou reescrita) dali por diante.

Copyright © 2014 AIEC.