Empezando con servlets

En nuestra aplicacion web, nos vamos a encontrar con varios entornos; en estos articulos, orientados al mundo Java, nos vamos a preocupar de los relacionados con ellos.

Segun eso, si vas a escribir una aplicacion web en Java, te encontraras con las clases de Java que ya conoces, con Servlets y con JSPs

En este articulo, vamos a hablar de los servlets. Los servlets son clases de Java mas o menos tradicionales, pero que heredan de una clase muy concreta (HttpServlet) con lo que van a tener acceso a las variables web, como puede ser la linea de URL. y seran instanciadas por el contenedor, y llamadas en un metodo concreto…. vamos por partes.Los servlets son:

  • Módulos que amplían los servidores orientados a petición/respuesta.
  • La respuesta en el lenguaje Java a los CGIs (Common Gateway Interface) para construir páginas “en el momento”.
    • Pudiendose basar en datos del usuario.
    • La información varía en el tiempo.
    • Usar información de una base de datos.

Ventajas sobre los CGIs

  • Eficiencia: Corren sobre loa maquina Java (JVM)
  • Facilidad de uso y aprendizaje.
  • Potentes: Comunicación directa con el servidor.
  • Portables: Pueden corren en cualquier contenedor java
  • Baratos, porque hay programadores Java
  • Las del Lenguaje Java

 Ciclo de vida

Detalle del ciclo de vida de un servlet

INICIALIZACIÓN:

    • Una única llamada al método “init” por parte del servidor.
    • public void init(ServletConfigconfig) throws ServletException
    • Se pueden recoger unos parámetros concretos con “getInitParameter” de “ServletConfig”. Estos parámetros se especifican en el descriptor de despliegue de la aplicación: web.xml
public void init() {

            valorParametro = getServletConfig().

                        getInitParameter(nombreParametro);

}
  • Se puede recuperar el nombre de todos los parámetros con el método getInitParameterNames()

DESTRUCCIÓN:

    • Cuando todas las llamadas desde el cliente cesen o un temporizador del servidor así lo indique. Se usa el método “destroy”
    • public void destroy()

Realmente, la teoria es un poco mas complicada que la practica, osea que vamos a escribir

Nuestro primer Servlet

Como ya he comentado muchas veces, hace algun tiempo, decidi utilizar Eclipse, y sigo con mi idea, por lo que todos los pasos que voy a indicar, estan realizados sobre ese IDE

Creación del proyecto

Vamos a ver la forma que tiene un servlet, para eso abrimos Eclipse y creamos un nuevo proyecto

Pantalla de Eclipse para la creacion de un servlet

Deberemos crear un Dynamic web Project; si no aparece en el menú, seleccionamos Others y allí, lo buscamos.

Al abrir, deberemos indicar el nombre

Eclipse. Pantalla de definicion de servlet

Pero aquí, no indicaremos Finish, si no Next y otra vez Next, hasta llegar a esta pantalla

Pantalla de Eclipse para solicitar la creacion de web.xml

Para MARCAR esta opción, y conseguir que nos cree el fichero web.xml, nuestro descriptor de despliegue, y del que hablaremos mas adelante

Una vez marcado el checkbox, pulsamos Finish y veremos nuestro proyecto creado

Si se os escapa el proyecto sin esta marca, siempre podeis añadir a mano el fichero despues…si quereis, pero asi va muy bien porque me deja toda la estructura preparada

Tras esto, veremos el proyecto creado en Eclips con una estructura semejante a esta

Estructura de carpetas de un Dynamic web project en Eclipse

  1. – En esta carpeta deberemos dejar nuestros servlets y cualquier clase Java que deseemos utilizar
  2. – Esta es la carpeta raíz de la web,solo se podrán llamar desde el navegador aquellos recursos (HTML, js, Imágenes, CSS,…) que estén debajo de esta carpeta, y sus subcarpetas, excepto WEB-INF y META-INF que no pueden ser accedidas por los navegadores
  3. En este fichero deberemos indicar los comportamientos del contenedor.

 

Contenido de un Servlet

Para que una clase sea Servlet, ha de heredar de HttpServlet. Esta es la jerarquía

También tenemos que saber que un formulario puede enviar la información al servidor de dos formas:

  • GET: Solicitud de datos a un recurso. Paso de parámetros en la propia URL de acceso al servicio o recurso del servidor.Es la forma mas sencilla, pero tiene una limitacion a 2000 caracteres y es demasiado facil de manipular por un visitante
  • POST: Enviar datos para el proceso. Los parámetros no van en la línea de URL sino en otra línea a parte. El manejo es idéntico.

El parent (HttpServlet)  invoca a los metodos  doGet y al doPost , segun la llamada que se haya hecho, desde el método “service”.

Ambos reciben instancias de:

  • HttpServletRequest” para manejo de la información enviada por el usuario.
  • HttpServletResponse” para poder enviar una respuesta en forma de página web.

Los métodos que se llamaran, y que por lo tanto deben ser implementados en nuestra clase, son:

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                     throws ServletException, java.io.IOException

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                     throws ServletException, java.io.IOException

Si solo precisamos uno, lo implementamos y podemos hacer que el otro tambien lo llame, de forma que pueda responder ambos tipos de peticiones.

La salida del servlet será, habitualmente, un documento HTML, aunque también  podemos devolver, por ejemplo, una imagen generada en tiempo de ejecución. Debemos entender, que las ordenes de impresion que escribamos dentro de esos metodos,  apoyadas en el objeto «resp» van a aparecer en el navegador del cliente, por lo que antes de generar esa informacion, deberemos especificar que es lo que vamos a generar.

Al ser un proceso tan común existe un método que nos lo soluciona directamente: “setContentType” de “HttpServletResponse”.

Creación del servlet

Creamos un package, segun dijimos antes, en la carpeta «src»

Pantalla de eclipse para la creacion de un package

En ese paquete, podemos crear el servlet

Menu para la creacion de un servlet en Eclipse

Pantalla para la creacion de un servlet

Solo es necesario que indiquemos el nombre y pulsemos Finish, si os fijais, ya nos ha rellenado el package, y el nombre del parent

Veremos aparecer la clase con algunas líneas creadas

Contenido del servlet creado automaticamente por Eclipse

Vamos a revisar que significan estas líneas:

13)  – Anotacion @WebServlet. Las anotaciones empezaron a estar disponibles desde Java 1.5, y es una forma de establecer como se ha de comportar el código. Esta etiqueta, evita el tener que definir este servlet en el fichero web.xml, y nos indica la ruta de la URL para la que será llamado el Servlet. Ósea: Este Servlet será llamado cuando en la URL se escriba “/HolaMundo”

20 a 23) – Tenemos el método Constructor que de momento no nos va a preocupar

28 a 32) – Esta el método que se ejecutara cuando llamen a este servlet en modo GET

37 a 41) – Esta el método que se ejecutara cuando llamen a este servlet en modo POST

Si lo que deseamos es que nos aparezca un saludo, podríamos hacer:

  • Como queremos responder cuando alguien teclee en la URL nuestra dirección, codificaremos el método GET
  • Borramos las líneas 30 y 31, y en su lugar escribimos

En la 33 estamos indicando que vamos a enviar hacia la salida un documento tipo “text/html”, (podéis revisar los MimeTypes para más información)

Como la salida está representada por el objeto “response”, conseguimos un objeto PrintWriter, y con él, vamos imprimiendo el código HTML que queremos enviar a salida

Observad que tengo que escribir HTML, ya que ese stream está conectado al navegador del cliente

Si deseo imprimir algo en la Consola para comprobar el funcionamiento, lo puedo seguir haciendo con System.out.println que está conectado a la consola.

Si ahora pulsáis el Play de Eclipse, o utilizáis el botón derecho sobre en servlet e indicáis Run as ->Run on Server (Siempre que hayais seguido los pasos para instalar Tomcat)

Lanzar un servlet en Eclipse

Os puede preguntar el servidor que queremos utilizar, que podemos aceptar el único generado, y, a continuación, arranca una ventana de navegación

Ejecucuin de servlet en servidor Eclipse-Tomcat

Siendo el texto que aparece en la página, el que hemos programado.

 

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Desarrollo Web, Formacion, Java y etiquetada , , , . Guarda el enlace permanente.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.