Como hemos podido ver en el tema 13 con la redireccion de peticiones, vamos a ver ahora como es el reenvio de peticiones. Si, la verdad es que parece que sea lo mismo, pero no lo es. En el siguiente tema, te explicare la diferencia entre los dos, de momento, vamos a ver como se hace el reenvio.
En este caso vamos a necesitar crear un objeto "RequestDispatcher" y con el crearemos el metodo "forward()" para terminar de hacer el reenvio.
Entonces ahora, ¿como conseguimos reenviar a otro Servlet o pagina?, pues, utilizando el metodo "getRequesDispatcher()" y en su parametro pondremos la direccion de nuestro Servlet destino, asi:
RequestDispatcher rd = request.getRequestDispatcher("/ServletDestino");
Y poniendo una barra al principio del Servlet destino.
Vamos a crear exactamente el mismo ejercicio que hemos hecho en el tema 13, el de usuario y contraseña, pero en este caso utilizando el reenvio.
Crea un nuevo proyecto que se llame "MiniCursoReenvio" y en el, creamos un archivo html que se llame "indice.html" y codificamos en el lo siguiente:
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form action="Aduana" method="post">
<table align="center">
<tr>
<td colspan="2" align="center"><h2>Pagina de Acceso</h2></td>
</tr>
<tr>
<td align="right"><b>Usuario</b></td>
<td><input type="text" name="cmpusuario"/></td>
</tr>
<tr>
<td align="right"><b>Clave</b></td>
<td><input type="password" name="cmpclave"/></td>
</tr>
<tr>
<td align="center" colspan="2"><input type="submit" value="Entrar"/></td>
</tr>
</table>
</form>
</body>
</html>
Ahora, vamos a crear un Servlet que se llame "Aduana" y codificamos en el lo siguiente:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
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(urlPatterns = {"/Aduana"})
public class Aduana extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("txt/html;Charset=UTF-8");
PrintWriter salida = response.getWriter();
RequestDispatcher rd;
String usuario = request.getParameter("cmpusuario");
String clave = request.getParameter("cmpclave");
String claveCorrecta = "admin";
if(claveCorrecta.equalsIgnoreCase(clave)){
rd = request.getRequestDispatcher("/Bienvenida");
}else{
rd = request.getRequestDispatcher("/Error");
}
rd.forward(request, response);
}
}
Fijate como esta vez hemos sustituido el "sendRedirect()" por el "getRequestDispatcher()", y con este ultimo metodo, necesitamos implementar el metodo "forward()" acompañado en sus parametros por "request, response" para completar el reenvio.
Luego creamos otro Servlet llamado "Bienvenida", quedara asi:
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;
@WebServlet(urlPatterns = {"/Bienvenida"})
public class Bienvenida extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;Charset=UTF-8");
PrintWriter salida = response.getWriter();
String usuario = request.getParameter("cmpusuario");
salida.println("<html><head><title>Pagina de bienvenida</title></head>");
salida.println("<body>");
salida.println("<center><h2>Bienvenido al MiniCurso Java sr@ "+usuario+"</h2></center>");
salida.println("<center><a href='indice.html'>Volver</a></center>");
salida.println("</body></html>");
salida.close();
}
}
Y por ultimo, creamos otro Servlet llamado "Error" y quedara asi:
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;
@WebServlet(urlPatterns = {"/Error"})
public class Error extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;Charset=UTF-8");
PrintWriter salida = response.getWriter();
String usuario = request.getParameter("cmpusuario");
salida.println("<html><head><title>Pagina de bienvenida</title></head>");
salida.println("<body>");
salida.println("<center><h2>Error | La clave ingresada no es correcta</h2></center>");
salida.println("<center><a href='indice.html'>Volver</a></center>");
salida.println("</body></html>");
salida.close();
}
}
Si ejecutas el archivo "indice.html", veras que el resultado es exactamente igual que el del tema 13. Pero interiormente, no ha resultado ser lo mismo y esto te lo explicare en el tema siguiente.