@WebServlet(urlPatterns = { "/RedirectServlet" }, initParams = { @WebInitParam(name = "GoogleUrl", value = "http://www.google.com.ec") }) public class RedirectServlet extends HttpServlet { private static final long serialVersionUID = 7384755119447773498L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.getWriter().print("Escribiendo en el Html"); String redirectUrl = getServletConfig() .getInitParameter("GoogleUrl"); // Todo lo escrito anteriormente en el response //se pierde al hacer// redirect response.sendRedirect(redirectUrl); } }
También podemos realizar un redirect en el servidor es decir redireccionar la ejecución de un servlet o jsp hacia otro servlet o jsp, para ello debemos utilizar la clase RequestDispatcher. La ventaja principal es que el servlet o jsp al cual es redireccionado recibe el mismo request de la petición original, este mecanismo es muy utilizado para implementar un modelo MVC en el cual se solicita una url que es un servlet el servlet modifica el modelo e inserta valores en los atributos del request y hace un forward hacia un jsp que representa la vista. La principal ventaja del redirect en el servidor es que se realiza una sola petición la desventaja es que al realizarse la redirección en el servidor el cliente no es notificado y por lo tanto el browser permanece con la url original.
A continuación se muestra un ejemplo utilizando el RequestDispatcher.
@WebServlet("/DispatchServlet") public class DispatchServlet extends HttpServlet { private static final long serialVersionUID = -3130067528647522202L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType( getServletContext().getMimeType(".html")); response.getWriter().print("Escribiendo en el Html"); request.setAttribute("UserName", "César Loachamín"); //Al utilizar el dispatcher del request la url //debe ser relativa. Si se utiliza el dispatcher del //ServletContext la url debe ser absoluta RequestDispatcher dispatcher = request. getRequestDispatcher("Redirect.jsp"); //Se pierde todo el response anterior, si no se desea ese //comportamiento se puede usar la función include en lugar //de forward dispatcher.forward(request, response); } }
Cabe recalcar que al hacer un redirect se pierde todo el contenido del Response que hayamos modificado, además toca tener en cuenta de no hacer un flush al response antes de hacer un redirect pues ello lanazaría una excepción.
El proyecto en Maven con los ejemplos esta disponible para su descarga en el siguiente link.
Download: redirect-example.tar.gz
Para ejecutar, descomprimir el archivo. Dentro de la carpeta redirect-example ejecutar el siguiente comando mvn clean install tomcat7:run e ingresar a la url http://localhost:8080/redirect-example
También pueden deployar el war que genera en cualquier Application Server o contendor web como tomcat.