Como hemos visto anteriormente, hemos creado un Servlet que ha dado una respuesta al cliente directamente. Pero en este caso, vamos a crear la parte del cliente donde crearemos una peticion al Servidor y este dara una respuesta al cliente.
La aplicacion consistira en que el cliente tendra que introducir un nombre de usuario y una contraseña y con el boton "Entrar" por el metodo POST, enviara una peticion al Servlet. Dicho servlet que estara esperando la peticion, actuara como aduana, ejerciendo como control. El servlet recibira el nombre del usuario y la contraseña ingresada por el cliente, nosotros en el Servlet, tendremos guardada una contraseña que sera la valida, entonces, si la contraseña recibida por el cliente coincide con nuestra contraseña guardada, este Servlet que llamaremos "Aduana" y que actuara como control, enviara la peticion a un nuevo Servlet con el que crearemos la respuesta al cliente dandole acceso a la aplicacion. Sin embargo, si la contraseña recibida por el cliente, no coincide con nuestra contraseña guardada, el Servlet redireccionara con otro Servlet llamado "Error" en el que dara al cliente una respuesta de error.
Dicho esquema de la aplicacion quedaria asi:

Por tanto, los que daran la respuesta en este caso al cliente seran los Servlets "Error" o "Bienvenida", el Servlet "Aduana" actuara como un control o como un filtro.
Bien, ¿como conseguimos redireccionar de un Servlet a otro?. Utilizando el metodo "sendRedirect()", en el cual en su parametro, pasaremos el nombre del nuevo Servlet, el nombre de las variables que queramos pasar y sus valores. Esto quedaria asi, como ejemplo:
response.sendRedirect("NombreServlet?NombreVariable="+ValorVariable);
En los parentesis, como he señalado, va el nombre del Servlet redireccionado, separado por el signo ? ponemos el nombre de la variable a redireccionar y su valor. Si quisieramos pasar mas variables al mismo Servlet, seria asi:
response.sendRedirect("NombreServlet?NombreVariable1="ValorVariable1+"&NombreVariable2="+ValorVariable2);
Concatenando con el signo &.
Ahora, sabiendo todo esto, vamos a crear la aplicacion.
Crea un nuevo proyecto web que se llame "MiniCursoAcceso". Como he dicho antes, si se te ha creado un archivo JSP, o sea, uno que dice "index.jsp", borralo.
Ahora, situate en la carpeta "Web Pages" y con boton derecho de raton "New" y "HTML", si no esta, buscalo en "Others". Ponle el nombre de "indice" sin extension, la aplicacion se encargara de ponerle la extension.
Se te habra creado una pagina HTML en el cual ya tendras medio escrita y preparada, habra quedado asi:
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<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>
<div>TODO write content</div>
</body>
</html>
Vamos a borrar unas cuantas cosas para que quede de esta forma:
<!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>
</body>
</html>
Una vez limpiado el codigo, vamos a codificar en lenguage HTML, como lo hemos hecho en los temas de HTML. Crearemos 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>
Si ejecutas este archivo con "Run File", veras que se abre el navegador de internet y tenemos algo parecido a esto:

Esto seria el cliente y estaria en la "Capa cliente". Ahora vamos a crear los Servlets, primero el Servlet "Aduana". Como ya sabes, en la carpeta "Source Packages" click derechos de raton y "New", "Servlet".
Le ponemos como nombre "Aduana" y ademas obligatorio porque asi se lo hemos indicado en la pagina "inicio.html".
Vamos a borrar todo el codigo que no vamos a utilizar y dejaremos solo el metodo "doPost" porque en el formulario viene indicado que es de metodo POST. El codigo quedaria 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 = {"/Aduana"})
public class Aduana extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
Ahora, añadimos el codigo para la forma de regeneracion del codigo que sera "texto/html" y el objeto "PrintWriter" para la respuesta, 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 = {"/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();
}
}
Ahora tenemos que recibir las variables que provienen del formulario y ademas crearemos nuestra propia variable que guardara la contraseña correcta, 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 = {"/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();
String usuario = request.getParameter("cmpusuario");
String clave = request.getParameter("cmpclave");
String claveCorrecta = "admin";
}
}
Como has visto hemos recuperado las variables con el metodo "getParameter()". Ahora tenemos que crear la condicion en la cual nos redirecionara o bien si la clave es correcta al Servlet "Bienvenida", y si fuere incorrecta, al Servlet "Error":
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 = {"/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();
String usuario = request.getParameter("cmpusuario");
String clave = request.getParameter("cmpclave");
String claveCorrecta = "admin";
if(claveCorrecta.equalsIgnoreCase(clave)){
response.sendRedirect("Bienvenida?cmpusuario="+usuario+"&cmpclave="+clave);
}else{
response.sendRedirect("Error?cmpclave="+clave);
}
}
}
Ahora, creamos el Servlet "Bienvenida" de la misma forma que lo hemos hecho con el Servlet "Aduana", pero en vez de utilizar el metodo "doPost", utilizamos el metodo "service()", porque aqui, ya damos una respuesta al cliente. El Servlet quedaria 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 lo mismo hariamos para crear el Servlet "Error", el codigo quedaria 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();
}
}
Ya tenemos la estructura creada con los Servlets comunicados, ahora solo nos queda ejecutar la aplicacion desde "indice.html" con "Run File".
Cuando lo pruebes, te daras cuenta que el cliente que se encuentra en "indice.html" hace una peticion, el Servlet "Aduana" que hace un control redireccionando hacia un Servlet u otro dando respuesta otra vez al cliente.