En este ejemplo vamos a desarrollar nuestro primer Servlet, el cual nos de como respuesta la frase «Este es mi primer Servlet«.
Crear el Servlet
La clase Java que implemente el Servlet deberá de extender la clase javax.servlet.HttpServlet.
public class MiPrimerServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
...
}
Dentro de esta clase tenemos que codificar, al menos, un método. El método doGet. Este método es el que se ejecuta cuando el Servlet recibe una petición del tipo GET (las más normales en Internet).
public class MiPrimerServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
}
}
El método método doGet recibe dos parámetros: HttpServletRequest y HttpServletResponse. Estos dos parámetros representan el stream de petición y el stream de respuesta. Y ambos llevan los datos intrínsecos a la petición o respuesta.
Por ejemplo, si la petición viene con parámetros, estos los encontraremos en el objeto HttpServletRequest. De igual manera, si queremos establecer el tipo de contenido de respuesta, lo podremos hacer manipulando el objeto HttpServletResponse.
Para nuestro ejemplo de Mi primer Servlet, vamos a centrarnos en el objeto HttpServletResponse. Y es que lo que vamos a realizar será un volcado de datos sobre el flujo de salida.
Lo primero que haremos será el definir una clase PrintWriter a la que asociar el flujo de salida.
PrintWriter out;
out = response.getWriter();
Una vez establecida esta relación, lo primero que haremos será indicar el tipo de contenido que queremos volcar. En este caso, será una página web. Es por ello que el contenido será “text/html”. En otros casos podremos devolver otros mime-types como “images/jpeg” para las imágenes JPEG o “application/x-gzip” para los ficheros ZIP.
response.setContentType("text/html");
Ahora solo nos quedará ir invocando al método .println con el texto que conforme la página web.
out.println("<html>");
out.println("<head><title>Mi Primer Servlet </title></head>");
out.println("<body>");
out.println("<h1>Este es mi Primer Servlet</h1>");
out.println("</body></html>");
Como se puede ver en el código, se vuelcan todas las etiquetas que conforman la página web HTML, body, title,… y nuestro texto.
Configurar el descriptor de despliegue
Una vez desarrollado y compilado nuestro servlet, tendremos que configurar el descriptor de despliegue. Este es el fichero web.xml. Dicho fichero indicará los servlets que hay desplegados en nuestra aplicación web y bajo que URL van a atender las peticiones.
Tendremos que definir dos etiquetas. La primera es la etiqueta servlet. Esta etiqueta sirve para definir el servlet. Tiene las siguientes etiquetas anidadas:
- description, descripción del servlet
- display-name, nome del servlet
- servlet-class, clase del servlet. Con el nombre del paquete por delante.
<servlet>
<description>Mi primer Servlet</description>
<display-name>MiPrimerServlet</display-name>
<servlet-name>MiPrimerServlet</servlet-name>
<servlet-class> aulambra.com.lineadecodigo.j2ee.servlets.MiPrimerServlet </servlet-class>
</servlet>
Una vez definido el servlet, solo nos quedará realizar la asociación entre la URL que atenderá las peticiones del servlet y el servlet definido. Esto lo hacemos mediante la etiqueta servlet-mapping.
En ella encontramos dos etiquetas anidadas:
- servlet-name, que es el nombre definido anteriormente.
- url-pattern, que es el patrón de URL al que atenderá las petciones. En nuestro caso será /MiPrimerServlet.
<servlet-mapping>
<servlet-name>MiPrimerServlet</servlet-name>
<url-pattern>/MiPrimerServlet</url-pattern>
</servlet-mapping>
De esta manera, una vez desplegada la aplicación en un contenedor web, podremos acceder al servlet de la siguiente manera:
http://servidor:8080/nombre_app_web/MiPrimerServlet