Servlet Java Tutorial básico

Un Servlet es una programa Java que se ejecuta en un servidor web y que le permite al mismo generar contenido dinámicamente, el Servlet recibe una petición del usuario y genera una respuesta para la misma usualmente utilizando en protocolo HTTP, al momento de escribir este tutorial la versión más reciente de la especificación es la 3.1 la cual utilizaremos en nuestros ejemplos.

Creación de un Servlet con NetBeans

Crearemos un proyecto Java usando el sistema Maven con el IDE NetBeans 8.x, primero vamos a menú File | New Project...

Proyecto Java Servlet en Netbeans

En las categorías seleccionamos Maven y en los proyectos Java Application, presionamos Next > para continuar a la siguiente ventana.

Creando un proyecto maven web

Ingresamos los datos para nuestro proyecto: nombre, ubicación, versión, etc., al terminar presionamos el botón Finish para terminar.

Ahora configuramos el POM.xml, debemos agregar las dependencias necesarias, el archivo queda de esta manera:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>
    <groupId>tutor.programacion</groupId>
    <artifactId>PrimerServlet</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
      
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Lo primero que debemos notar es la etiqueta <packing>war</packing> establecemos a WAR ya que este será un proyecto web.

Luego vemos que agregamos la dependencia javax.servlet-api en su versión 3.1.0.

Al final configuramos el maven-war-plugin con la etiqueta <failOnMissingWebXml /> estableciendo su valor a false, esto nos evita tener que incluir el archivo web.xml ya que en la especificación Servlet 3.1 podemos realizar la configuración con anotaciones sin necesidad de utilizar dicho archivo.

La clase HttpServlet

Extendiendo la clase HttpServlet le damos la capacidad a nuestro Servlet de responder a las peticiones HTTP, existen distintos tipos de peticiones destinadas a diversos propósitos, algunas de estas peticiones son: GET, POST, DELETE, etc., para manejar algunas de estas peticiones debemos sobre escribir los correspondientes métodos, ejemplo: doGet(), doPost(), doDelete(), etc., de momento nos enfocaremos en el método HTTP GET.

funcionamiento de los servlet java

El método HTTP GET es comúnmente utilizado por los navegadores a la hora de solicitar una página web, al escribir una dirección en el navegador este envía una petición GET al servidor, este elige el Servlet que debe responder a dicha petición, luego el Servlet elegido procesa la petición y genera la respuesta que luego es devuelta al navegador.

@WebServlet("/")
public class PrimerServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html");

        PrintWriter out = resp.getWriter();
        
        out.println("<h1>Java Servlet Tutorial</h1>");
        out.println("<p>Este es mi primer <b>Servlet</b>.</p>");
        out.println("<p>Por: <a href=\"http://acodigo.blogspot.com\">Tutor de Programacion</a> </p>");
    }
}

El objeto HtttpServletRequest contiene la información de la petición, mientras que el objeto HttpServletResponse contiene la respuesta.

Lo primero que hacemos es configurar el ContentType de la respuesta a "text/html" esto indica que la respuesta será generada como un texto HTML.

Luego obtenemos el objeto PrintWriter que nos permitirá escribir la respuesta, por medio de él comenzamos a escribir la página HTML resultante, aquí podríamos acceder a una base de datos y obtener la información que seria incluida en la salida, para escribir el documento de salida usaremos los métodos print(), printf(), y println() de la clase.

Para que nuestro Servlet esté disponible y pueda ser usado debemos configurarlo, lo hacemos con la anotación @WebServlet("/") como parámetro indicamos la URL a la que debe responder, "/" nos permite responder a todo tipo de peticiones.

Ejecutar el Servlet

Para ver nuestro programa en ejecución, nos vamos a la pestaña de proyectos del NetBeans, damos clic derecho sobre el proyecto y en el menú contextual seleccionamos la opción: Run.

En la ventana que aparece debemos seleccionar el servidor, para nuestro caso Apache Tomcat, puedes usar cualquier otro, siempre que el mismo soporte la especificación 3.1 que estamos utilizando.

Desplegar servlet en servidor tomcat

Al presionar OK se inicia el despliegue de nuestra aplicación en el servidor web elegido, al terminar el proceso podemos abrir el navegador y ver nuestro Servlet Java en funcionamiento.

Ejecutar mi primer Servlet Java con Netbeans

Un Servlet no tiene necesariamente que devolver un contenido HTML, la respuesta podría ser un documente JSON, XML, una imagen, un documento PDF, etc., las posibilidades dependen del tipo de aplicación que deseemos desarrollar.

Es todo de momento, más adelante seguiremos conociendo esta tecnología, los espero en la próxima. 

Descargar proyecto: servlet-java.zip

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Histogramas OpenCV Python

Python Binance API