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.