- Servlet |
Un servlet es una clase que se ejecuta en el contexto de un servidor web (en nuestro caso el Apache Tomcat)
Un servlet se ejecuta en un servidor web y el resultado de ejecución viaja por internet para ser visualizado en un navegador web (normalmente un servlet genera HTML, pero puede generar otros formatos de archivos)
Veremos los pasos en Eclipse para crear un servlet mínimo que nos muestre un mensaje y los números del 1 al 10000.
Desde el menú de opciones seleccionamos File -> New -> Dynamic Web Project:
En el diálogo siguiente especificamos el nombre del proyecto (en nuestro caso le llamaremos proyectoservlet1) y presionamos el botón "Finish":
El Eclipse nos crea una serie de carpetas y archivos donde alojaremos los servlet:
Ahora presionamos el botón derecho sobre el nombre del proyecto y seleccionamos la opción New -> Servlet:
En el diálogo siguiente especificamos el nombre de nuestro servlet (en nuestro ejemplo le llamaremos HolaMundo), presionamos el botón "Finish" y ya tenemos el esqueleto básico de un servlet:
El código fuente generado es el siguiente:
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 HolaMundo */ @WebServlet("/HolaMundo") public class HolaMundo extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HolaMundo() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Todo servlet debe heredar de la clase HttpServlet que se encuentra en el paquete javax.servlet.http
Esta clase debe sobreescribir el método doGet o doPost (o ambos) En el protocolo HTTP las peticiones pueden ser de tipo post (cuando llamamos a una página desde un formulario HTML) y de tipo get (páginas sin formulario)
Nuestro problema es mostrar un mensaje e imprimir los números del 1 al 10000, esta actividad la haremos en el método doGet.
El algoritmo a implementar en el método doGet para dicha salida es:
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; /** * Servlet implementation class HolaMundo */ @WebServlet("/HolaMundo") public class HolaMundo extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HolaMundo() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head></head>"); out.println("<body>"); out.println("<h1>Hola Mundo</h1>"); for(int f=1;f<=10000;f++) { out.println(f); out.println(" - "); } out.println("</body>"); out.println("</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Una parte importante de la declaración del servlet que nos genera automáticamente el Eclipse es la anotación @WebServlet (esta línea registra el servlet para todas las peticiones al servidor con la sintaxis http://localhost:8080/proyectoservlet1/HolaMundo):
@WebServlet("/HolaMundo")
Obtenemos una referencia de un objeto de la clase PrintWriter (debemos importar la clase PrintWriter) mediante la llamada al método getWriter del objeto response que llega como parámetro al método doGet:
PrintWriter out = response.getWriter();
Todas las salidas son llamando al método println del objeto out de la clase PrintWriter. Como vemos generamos como salida HTML, para mostrar los números del 1 al 10000 es más conveniente utilizar una estructura repetitiva que hacer una salida secuencial.
Para probar el servlet que acabamos de codificar debemos presionar el botón derecho del mouse sobre el nombre de la clase y seleccionar "Run on Server":
Aparece un diálogo que debemos seleccionar el botón "Finish" ya que está seleccionado el servidor "Tomcat" para ejecutar el servlet:
El resultado de la ejecución del servlet lo podemos ver dentro de una ventana dentro del mismo Eclipse:
Si queremos que el resultado aparezca en otro navegador podemos configurar desde el menú de Eclipse el navegador que muestra el resultado que devuelve Tomcat: