Colaboración de Servlet en Java usando RequestDispatcher y HttpServletResponse

¿Qué es la colaboración de servlet?

El intercambio de información entre servlets de una aplicación web Java en particular se conoce como Servlet Collaboration . Esto permite pasar/compartir información de un servlet a otro a través de invocaciones de métodos.
 

¿Cuáles son las formas principales proporcionadas por Java para lograr la colaboración de Servlet?
La API de servlet proporciona dos interfaces, a saber: 

  1. javax.servlet.RequestDispatcher
  2. javax.servlet.http.HttpServletResponse

Estas dos interfaces incluyen los métodos responsables de lograr el objetivo de compartir información entre servlets.
 

Uso de la interfaz RequestDispatcher

La interfaz RequestDispatcher proporciona la opción de enviar la solicitud del cliente a otro recurso web, que podría ser una página HTML, otro servlet, JSP, etc. Proporciona los siguientes dos métodos:

  • public void forward (solicitud de ServletRequest, respuesta de ServletResponse) lanza ServletException, java.io.IOException:
    El método forward() se usa para transferir la solicitud del cliente a otro recurso (archivo HTML, servlet, jsp, etc.). Cuando se llama a este método, el control se transfiere al siguiente recurso llamado. Por otro lado, el método include() se usa para incluir el contenido del archivo de llamada en el archivo llamado. Después de llamar a este método, el control permanece con el recurso que llama, pero la salida procesada se incluye en el recurso llamado.
    El siguiente diagrama explica la forma en que funciona:
     

  • public void include (solicitud de ServletRequest, respuesta de ServletResponse) lanza ServletException, java.io.IOException:
    El método include() se usa para incluir el contenido del recurso de llamada en el llamado. Cuando se llama a este método, el control aún permanece con el recurso de llamada. Simplemente incluye la salida procesada del recurso que llama en el llamado.
    El siguiente diagrama explica cómo funciona:
     

  • Ejemplo de uso de RequestDispatcher para Servlet Collaboration
    El siguiente ejemplo explica cómo usar la interfaz RequestDispatcher para lograr Servlet Collaboration:
    index.html 
     

html

<html>
<head>
<body>
<form action="login" method="post"> 
Name:<input type="text" name="userName"/><br/> 
Password:<input type="password" name="userPass"/><br/> 
<input type="submit" value="login"/> 
</form> 
</body>
</html>
  • Login.java 

Java

// First java servlet that calls another resource
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class Login extends HttpServlet {
 
    public void doPost(HttpServletRequest req,
                       HttpServletResponse res)
throws ServletException, IOException
    {
        // The method to receive client requests
        // which are sent using 'post'
 
        res.setContentType("text/html");
        PrintWriter out = response.getWriter();
 
        // fetches username
        String n = request.getParameter("userName");
 
        // fetches password
        String p = request.getParameter("userPass");
    if(p.equals("Thanos"){
            RequestDispatcher rd = request.getRequestDispatcher("servlet2");
            // Getting RequestDispatcher object
            // for collaborating with servlet2
 
            // forwarding the request to servlet2
            rd.forward(request, response);
    } 
    else{
            out.print("Password mismatch");
            RequestDispatcher rd = request.getRequestDispatcher("/index.html");
        
        rd.include(request, response); 
                       
        } 
    } 
   
} 
  • Bienvenido.java 

Java

// Called servlet in case password matches
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class Welcome extends HttpServlet {
 
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
        throws ServletException, IOException
    {
 
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
 
        // fetches username
        String n = request.getParameter("userName");
 
        // prints the message
        out.print("Welcome " + n);
    }
}
  • web.xml 

html

<web-app> 
 <servlet> 
    <servlet-name>Login</servlet-name> 
    <servlet-class>Login</servlet-class> 
  </servlet> 
  <servlet> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <servlet-class>Welcome</servlet-class> 
  </servlet> 
   
   
  <servlet-mapping> 
    <servlet-name>Login</servlet-name> 
    <url-pattern>/servlet1</url-pattern> 
  </servlet-mapping> 
  <servlet-mapping> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <url-pattern>/servlet2</url-pattern> 
  </servlet-mapping> 
   
  <welcome-file-list> 
   <welcome-file>index.html</welcome-file> 
  </welcome-file-list> 
</web-app> 

Salida :

  • índice.html 

  • Si la contraseña coincide: 

  • Si la contraseña no coincide: 

Uso de la interfaz HttpServletResponse

  • La interfaz HttpServletResponse se encarga de administrar las respuestas Http. Para lograr la colaboración de servlet, utiliza el siguiente método:
public void sendRedirect(String URL)throws IOException;  
  • Este método se usa para redirigir la respuesta a otro recurso, que puede ser un servlet, jsp o un archivo html. El argumento que acepta es una URL que puede ser tanto absoluta como relativa. Funciona en el lado del cliente y utiliza la barra de URL del navegador para realizar una solicitud.
     

Ejemplo de uso de sendRedirect() para la redirección

  • El siguiente ejemplo de una aplicación web creada con servlet toma el texto escrito en el campo de texto de la página web y lo dirige al servlet. Luego, el servlet lo redirige a Google, que luego produce resultados de búsqueda basados ​​​​en el texto escrito.
    índice.html 

html

<html>
<head>
<body>
<form action="search" method="GET">
<input type="text" name="name">
<input type="submit" value="search">
</form>
</body>
</html>

Java

// Servlet class to redirect the text keyword
// in the 'name' field to google.com
// using sendRedirect()
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class MySearcher extends HttpServlet {
    protected void doGet(HttpServletRequest
                             request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
 
        String name = request.getParameter("name");
        response.sendRedirect("https://www.google.co.in/#q=" + name);
        // response redirected to google.com
    }
}
  • web.xml 

html

<web-app>
<servlet>
<servlet-name>MySearcher</servlet-name>
<servlet-class>MySearcher</servlet-class>
</servlet>
 
<servlet-mapping>
<servlet-name>MySearcher</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>
 
<welcome-file-list> 
   <welcome-file>index.html</welcome-file> 
  </welcome-file-list> 
</web-app> 

Producción:

  • índice.html 

  • Resultado de búsqueda 

¿Cuál es la diferencia entre el método forward() de RequestDiispatcher y sendRedirect() de HttpServletResponse?

  • Aunque los dos métodos parecen hacer lo mismo, aún existen diferencias entre los dos, que son las siguientes:
delantero() enviarRedireccionar()
Funciona en el lado del servidor. Funciona del lado del cliente.
Envía los mismos objetos de solicitud y respuesta a otro recurso. Siempre envía una nueva solicitud.
Funciona solo dentro del servidor. Se puede utilizar dentro y fuera del servidor.

Publicación traducida automáticamente

Artículo escrito por ParthDutt 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 *