¿Qué son los servlets de Java? Gestión de solicitudes para aplicaciones web Java

El manejo de solicitudes es el pan y la mantequilla del desarrollo de aplicaciones web Java. Para responder a las solicitudes de la red, una aplicación web Java debe determinar primero qué código responderá a la URL de la solicitud y, a continuación, obtener una respuesta. Cada pila de tecnología tiene una forma de lograr el manejo de solicitudes y respuestas. En Java, usamos servlets (y la API de Java Servlet) para este propósito. Piense en un servlet como un pequeño servidor cuyo trabajo es aceptar solicitudes y emitir respuestas.

URL vs punto final

Como usuario de Internet, está familiarizado con las URL como la dirección del sitio web en su navegador. Como desarrollador, es posible que también conozca las URL como puntos finales para servicios web. Una URL (localizador uniforme de recursos) es una forma estándar de describir y localizar recursos de Internet mediante texto. El término punto final se refiere a una URL que denota un servicio web. Los términos punto final y URL a menudo se usan indistintamente, aunque se refieren a dominios de uso diferentes.

Software como capas

Como expliqué en mi introducción al entorno de ejecución de Java, podemos ver el software como una serie de capas. Cada capa en un sistema de software tiene ciertas capacidades que son requeridas por las capas superiores. Como ejemplo, la capa de hardware se encuentra debajo de la capa de firmware, lo que respalda su funcionalidad. Asimismo, la capa de firmware (BIOS en una PC o EFI en una Mac) es necesaria para ejecutar el sistema operativo. La Figura 1 muestra estos tres componentes en un diagrama de capas.

Matthew Tyson

También puede considerar un sistema de software como una serie de contenedores , donde las capas inferiores actúan como contenedores para las superiores. Cada capa actúa como un contexto para ejecutar el siguiente nivel de funcionalidad: el hardware contiene firmware y el firmware contiene el sistema operativo.

Java del lado del servidor

Una aplicación Java del lado del servidor pertenece a una amplia clase de aplicaciones que sirven como puntos finales de red, reciben solicitudes HTTP de una URL determinada y devuelven datos en un formato de intercambio como HMTL o JSON. Java del lado del servidor consta de servidores Java estandarizados y tecnologías para interactuar con esos servidores. La API de Java Servlet es el estándar utilizado para interactuar con un servidor Java.

Servidores Java y JVM

En los sistemas basados ​​en Java, el sistema operativo (SO) contiene la JVM, que proporciona un entorno coherente para ejecutar aplicaciones Java. Un servidor Java se encuentra en la parte superior de la JVM. Así como la JVM es el intermediario entre el sistema operativo y su aplicación Java, el servidor Java proporciona un acceso consistente y optimizado a las capacidades de procesamiento y red del sistema operativo. Una aplicación Java se ejecuta dentro del servidor, utilizando la API de Java Servlet para acceder a las capacidades del servidor.

La Figura 2 muestra una pila de software para Java del lado del servidor.

Matthew Tyson

La especificación de Java Servlet

La especificación Java Servlet proporciona la definición subyacente para un servidor Java y componentes relacionados. Define cómo el servidor enviará solicitudes y respuestas durante las interacciones de red a través de HTTP. Todos los servidores Java deben ser compatibles con la especificación Java Servlet. La mayoría de los servidores Java actuales son compatibles con Servlet 4.0.

Servlet 4.0

Cada versión de la especificación Java Servlet trae nuevas características. Servlet 4.0 incluye soporte para el protocolo HTTP / 2 y su mecanismo de inserción del servidor. La inserción del servidor permite que un servidor precargue los activos requeridos por una página web, en lugar de esperar una solicitud específica. La especificación Servlet 4.0 también incorpora la capacidad de descubrir mapeos de URL en tiempo de ejecución, una característica conocida como descubrimiento en tiempo de ejecución .

Eclipse Enterprise para Java

Servlet 4.0 es parte de la iniciativa de código abierto EE4J (Eclipse Enterprise para Java), que incluye un reemplazo propuesto para el JCP.

Para una comprensión práctica de cómo funciona la especificación Servlet, considere el artículo que está leyendo actualmente. En algún lugar de las entrañas de la infraestructura de JavaWorld, este artículo fue formateado y enviado para su publicación. Se le asignó una URL, se enrutó a través de la red y llegó a un servidor. El servidor conectó el artefacto (artículo) con la URL y determinó que cuando llegara una solicitud GET para esa URL, devolvería este artículo como HTML.

Cuando crea una aplicación web Java, está creando software que se ejecuta dentro del servidor Java. La aplicación utiliza las facilidades proporcionadas por el contexto del servidor, y una de esas facilidades es la API de Servlet. Por esta razón, un servidor Java que implementa la especificación de Servlet a veces se denomina contenedor de servlet .

Para crear un servlet, implementa la Servletinterfaz y la despliega dentro de un contenedor de servlet. La Figura 3 muestra cómo su aplicación se basa en el servlet.

Matthew Tyson

Escribir servlets con Tomcat

Ahora que tiene una descripción general conceptual, vayamos al asunto de escribir un servlet Java.

Lo primero que necesitará es un contenedor de servlets, también conocido como servidor de aplicaciones Java. Tomcat y Jetty son dos de los contenedores de servlets más populares. Usaremos Tomcat porque es uno de los servidores de aplicaciones más antiguos para Java. Tomcat es gratuito y contiene un mínimo de detalles, lo que simplificará las cosas para nuestro ejemplo. ("Campanas y silbidos" es un término técnico, por cierto).

Descarga e instala Tomcat

Si aún no tiene Tomcat, comience por abrir la página de descarga de Tomcat. Allí, puede seleccionar el instalador de Windows o la descarga ZIP más adecuada para su computadora (por ejemplo, estoy descargando el zip de Windows de 64 bits).

Eso es todo: ¡acaba de agregar la capa del servidor Java a su sistema operativo!

Verifique que Tomcat se esté ejecutando

Antes de continuar, asegurémonos de que puede ejecutar Tomcat. Inicie el servicio de Windows o ejecute startup.sho startup.batarchive desde la línea de comandos.

Si ahora abre un navegador web y va a localhost:8080, debería ser recibido por la siguiente pantalla:

Matthew Tyson

Si encuentra algún problema al ejecutar Tomcat, puede visitar la documentación de Tomcat para solucionarlo.

Ejecute el ejemplo de servlet Tomcat

Ahora echemos un vistazo a un servlet de Java. Convenientemente, Tomcat ha incluido algunos ejemplos simples.

Haga clic en el enlace Ejemplos que ve en la sección Inicio rápido para desarrolladores de la página de bienvenida de Tomcat. Una vez que esté allí, haga clic en el enlace Ejemplos de servlet .

Now you can see a simple Servlet in action by clicking the Hello World sample's Execute link. That will bring your browser to the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL, where you will see the perennial programmer's salutation.

Viewing the servlet source code

Click the Back arrow in your browser, then click the source link for the HelloWorld app. The source is shown in Listing 1.

Listing 1. Source code for HelloWorld example

 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Hello World!"); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); } } 

This very simple code listing contains the basic components of a Java servlet. Let's consider it step by step.

The first line calls the standard Java imports. After that, the program defines a new class, which extends the HttpServlet class. This is critical because servlets must implement the Servlet interface in order to run inside a servlet container.

Next, the HelloWorld class defines a method called doGet(). This is a standard method on servlets: it tells the server to route HTTP GET requests to this method. Other HTTP methods, like POST, are handled by similarly named methods, like doPost.

Notice that that doGet() has two parameters: (HttpServletRequest request, HttpServletResponse response). These two objects represent the request and response. They provide access to everything your code needs to deal with the request and issue a response. In the HelloWorld.doGet servlet method, for example, the response object is used to inform the server what content type header to issue. In this case, it's response.setContentType("text/html");.

Finally, the program obtains a Java Writer object from the response response.getWriter(). The Writer is then used to create a simple HTML response to return to the browser.

URL mapping

The structure and code flow in Listing 1 are fairly intuitive, but there is a glaring omission. How does the server know to associate the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL to the HelloWorld.doGet method?

You will find the answer to this mystery in the application meta-data. Every Java web application includes a standard meta-data file, called web.xml, which tells the server how to map URLs to servlets.

What is meta-data?

Meta-data is any information that is used to control the operation of software from outside the software itself.

In the Tomcat example apps, the web.xml is found at \apache-tomcat-9.0.11\webapps\examples\WEB-INF\web.xml. The \WEB-INF\web.xml is the standard location of the meta-data file for servlets. If you open this file, you'll see how the server is configured.

The abbreviated web.xml in Listing 2 has just the information we need for our discussion.

Listing 2. Source code for the Tomcat HelloWorld example

     HelloWorldExample HelloWorldExample   HelloWorldExample /servlets/servlet/HelloWorldExample    

Listing 2 shows a typical XML file header referencing the schema for a Java web application descriptor. This is followed by two entries: and.

The call to assigns a logical name, HelloWorldExample, to the HelloWorldExample class, via the and fields.

The call to assigns that logical name to the value, thereby associating the code to the URL.

Note that the field supports wild cards in order to handle a variety of flexible URL mappings.

Other servlet capabilities

Además de la asignación de URL, los servlets proporcionan capacidades adicionales para el filtrado y la autenticación. Los filtros se usan para procesar solicitudes y la autenticación se usa para asignar usuarios y roles simples a patrones de URL. La especificación JavaServer Pages (JSP) proporciona soporte para generar HTML de una manera mucho más poderosa.

Conclusión

Este artículo ha sido una descripción general conceptual de los servlets de Java, incluido el manejo de solicitudes y respuestas de URL dentro de un servidor Java. Comprender estos elementos básicos de Java en el lado del servidor lo ayudará a integrar conceptos más avanzados, como el envío del servidor y el descubrimiento en tiempo de ejecución de asignaciones de URL, que son nuevos en Servlet 4.0.

Esta historia, "¿Qué son los servlets Java? Manejo de solicitudes para aplicaciones web Java" fue publicada originalmente por JavaWorld.