Servlet – Redirección de página

La programación de un sitio web es un arte. Para proporcionar la vista de manera eminente, se están tomando numerosos pasos. Por lo general, un cliente (una página JSP simple) proporciona una solicitud a un servidor web o servidor de aplicaciones y ellos procesan la solicitud y brindan la respuesta. A veces, sucede que para equilibrar la carga del servidor, algunas páginas pueden moverse a otros lugares o, de acuerdo con las credenciales autenticadas autorizadas, la respuesta debe desviarse. En este artículo, veamos cómo manejar esos escenarios. es decir, el uso de la redirección de página se puede lograr a través de servlets.

sendRedirect(): Redirige la respuesta a otro recurso que está presente dentro del servidor o incluso fuera. Por lo tanto, hace que el cliente (navegador) cree una nueva solicitud y, por lo tanto, podemos ver la nueva URL en el navegador. sendRedirect() puede aceptar una URL relativa y, por lo tanto, solo la redirección puede ocurrir dentro o fuera del servidor.

La sintaxis correcta para hacer la redirección de página es

public void sendRedirect(String URL)throws IOException;  

Veamos un ejemplo de cómo hacerlo. Aquí, hagamos que un usuario busque un término clave y, al hacer clic en el botón, será redirigido a la página de GeelsforGeeks.

Ejemplo

Código JSP: index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Learn Courses Online</title>
</head>
<body>
    <h1>Example to show page redirection!</h1>
    <form action="searchServlet" method="post"><!-- It is calling searchServlet on click of button -->
        Enter your search term: <input type="text" name="yourSearchTerm" size="20">
        <input type="submit" value="Invoke Search" />
    </form>
</body>
</html>

Código Java: (código Servlet) -> SearchServlet.java

Java

import java.io.IOException;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
// Servlet implementation class SearchServlet
@WebServlet("/searchServlet")
public class SearchServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
         
    public SearchServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    // @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
  
          // set response content type
          response.setContentType("text/html");
  
          // New location to be redirected, it is an example
          String site = new String("https://www.geeksforgeeks.org/learn-java-on-your-own-in-20-days-free/");
            
          // We have different response status types. 
          // It is an optional also. Here it is a valid site
          // and hence it comes with response.SC_ACCEPTED
          response.setStatus(response.SC_ACCEPTED);
          response.setHeader("Location", site); 
          response.sendRedirect(site);
          return;
    }
  
}

El conjunto de líneas anterior debe estar presente en un patrón de proyecto web dinámico y una vez que se crea en Eclipse, por defecto vendrá con el archivo web.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>sampleProject1</display-name>
    <!-- We are using only index.jsp. in some cases if we want to 
         specify other welcome files, they need 
         to be listed here, hence shown here -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Una vez que se ejecuta la página index.jsp en el servidor (por lo general, Apache Tomcat), podemos ver el siguiente resultado. Un breve video explicará cómo se hace.

Al usar request.getRequestDispathcer(“<una página específica presente en el mismo servidor web>”).forward(solicitud, respuesta) podemos redirigir la página. Pero la página especificada debería estar disponible en el servidor web que se está utilizando. De lo contrario , no puede reenviar/redireccionar. Como regla general, si el requisito es redirigir a páginas que están presentes fuera del servidor, vaya a la respuesta.sendRedirect. El nombre en sí especifica que siempre es una nueva solicitud y se puede usar dentro o fuera del servidor. Lo principal es que funciona en el lado del cliente. Con respecto a HttpResponse.setStatus, tenemos un conjunto de estados diferente

Explicación del código de estado

Veamos cómo funciona la redirección de página con «getRequestDispatcher().forward». Solo el código del servlet tendrá un cambio y, dado que la página reenviada debería estar disponible en el mismo servidor web, también se muestra aquí.

Java

import java.io.IOException;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/searchServlet")
public class SearchServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
         
    public SearchServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
  
    // @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
  
          // searchpage.jsp should be available in 
          // the mentioned webserver, then below code works fine  
          request.getRequestDispatcher("searchpage.jsp").forward(request, response);
          return;
    }
  
}

searchpage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Learn Courses Online</title>
</head>
<body>
    <h1>Example to show page redirection via forward!</h1>
    <a href = "https://www.geeksforgeeks.org/learn-java-on-your-own-in-20-days-free/">Learn Java</a>
</body>
</html>

La salida se explica en el vídeo adjunto.

Conclusión

Por lo tanto, al usar response.sendRedirection(“<una URL válida>”) que puede estar presente en el mismo servidor web/fuera y request.getRequestDispatcher(“<una página válida presente en el mismo servidor web>”).forward(solicitud, respuesta ) podemos hacer redirección de página. Por varias razones, se puede hacer. El concepto final es que el usuario final recibe una página de respuesta adecuada.

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *