Primer Servlet, estructura de un sitio web según estándar J2EE

Para realizar el despliegue de una aplicación web en Tomcat basta con crear un directorio con el nombre de la aplicación dentro de webapps\. En el tutorial anterior creamos la aplicación first-servlet e incluimos una pagina estática welcome.html.

Una aplicación web según las especificaciones de J2EE debe tener una estructura de directorios y un archivo llamado web.xml tal como se ve en el siguiente esquema:

J2EE es un comité formado por empresas del sector java empresarial que definen especificaciones (estándares) para que los productos de las diferentes empresas sean compatibles.

Las paginas web estáticas se colocan dentro del directorio de aplicación (first-servlet\ en nuestro caso) pero nunca dentro del directorio WEB-INF\ ya que este no puede ser accedido desde el Browser.

Dentro del directorio WEB-INF\classes\ se colocaran las clases java compiladas que componen la aplicación (incluidos los servlets). En el directorio WEB-INF\lib\ se pueden incluir librerías (archivos .jar) que pueda necesitar la aplicación.

Vamos a crear un Servlet llamado com.edu4java.servlets.FirstServlet con el siguiente código fuente:

package com.edu4java.servlets;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Date;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class FirstServlet extends HttpServlet{

 

 @Override

 protected void doGet(HttpServletRequest req, HttpServletResponse resp)

                  throws ServletException, IOException {

           

            PrintWriter out = resp.getWriter();

            out.println("<html>");

            out.println("<body>");

            out.println("hoy es " + new Date());

            out.println("</body>");

            out.println("</html>");

 }

}

La clase FirstServlet extiende javax.servlet.http.HttpServlet y sobrescribe el método doGet(HttpServletRequest req, HttpServletResponse resp) que es llamado cuando el Servidor Http recibe una petición de tipo GET desde el Browser (para une explicación de lo que es un método GET y POST ver el tutorial Servidor Web o Servidor HTTP).

En método doGet recibe dos parámetros, el primero es un objeto de tipo HttpServletRequest que contiene toda la información acerca de la petición de la página web y el segundo es un objeto de tipo HttpServletResponse que se utiliza para rellenar la respuesta que será enviada al Browser.

En el código fuente se puede ver como obtenemos un objeto java.io.PrintWriter del objeto HttpServletResponse y lo usamos para enviar una página web con la fecha actual tomada del sistema usando un objeto del tipo java.util.Date.

Para desplegar este Servlet en el servidor debemos copiar el archivo compilado FirstServlet.class el directorio WEB-INF\Classes\ como se muestra a continuación:

Por último solo nos resta configurar el archivo web.xml para que Tomcat sepa cuando debe llamar al Servlet FirstServlet. Vamos a configurarlo para que sea llamado cuando alguien pregunte por http://localhost:8080/first-servlet/what-time-is-it

<web-app>

   <servlet>

      <servlet-name>timeservlet</servlet-name>

      <servlet-class>com.edu4java.servlets.FirstServlet</servlet-class>

   </servlet>

   <servlet-mapping>

      <servlet-name>timeservlet</servlet-name>

      <url-pattern>/what-time-is-it</url-pattern>

   </servlet-mapping>

</web-app>

<web-app> es el primer elemento en web.xml. Dentro, el elemento <servlet> indica que se creará un Servlet de la clase com.edu4java.servlets.FirstServlet bajo el nombre interno timeservlet. El elemento <servlet-mapping> asociará el URL /what-time-is-it al Servlet con nombre interno timeservlet.

Por último nos resta reiniciar el servidor Tomcat: cerrar la ventana ms-dos del servidor, volver a ejecutar startup.bat

y direccionar un Browser a http://localhost:8080/first-servlet/what-time-is-it

<< Que es un Contenedor de Servlets. Instalar Apache Tomcat Parámetros, método GET y POST en Servlets >>