1.3. Ejemplos básicos de servlets

1.3.1. Servlet que genera texto plano

El siguiente ejemplo de servlet muestra una página con un mensaje de saludo: "Este es un servlet de prueba". Lo cargamos mediante petición GET.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ClaseServlet extends HttpServlet
{
	public void doGet(HttpServletRequest request, 
			  HttpServletResponse response) 
	throws ServletException, IOException
	{
		PrintWriter out = response.getWriter();
		out.println ("Este es un servlet de prueba");
	}
}

Se obtiene un Writer para poder enviar datos al usuario. Simplemente se le envía la cadena que se mostrará en la página generada.

1.3.2. Servlet que genera una página HTML

Este otro ejemplo escribe código HTML para mostrar una página web.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ClaseServletHTML extends HttpServlet
{
	public void doGet(HttpServletRequest request, 
			  HttpServletResponse response) 
	throws ServletException, IOException
	{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println ("<!DOCTYPE HTML PUBLIC \""+
			     "-//W3C//DTD HTML 4.0 " + 
			     "Transitional//EN\">");
		out.println ("<HTML>");
		out.println ("<BODY>");
		out.println ("<h1>Titulo</h1>");
		out.println ("<br>Servlet que genera HTML");
		out.println ("</BODY>");
		out.println ("</HTML>");
	}
}

Para generar una página HTML con un servlet debemos seguir dos pasos:

response.setContentType("text/html");

Esta línea es una cabecera de respuesta, que veremos más adelante cómo utilizar. Hay que ponerla antes de obtener el Writer.

1.3.3. Servlet que utiliza parámetros de inicialización

Este otro ejemplo utiliza dos parámetros de inicialización externos:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ClaseServletInit extends HttpServlet
{
	// Mensaje que se va a mostrar en la pagina
	String mensaje = "";		
	// Numero de veces que se va a repetir el mensaje
	int contador = 1;		

	// Metodo de inicializacion
	
	public void init(ServletConfig conf) 
	throws ServletException
	{
		super.init(conf);	// MUY IMPORTANTE
		
		mensaje = conf.getInitParameter("mensaje");
		if (mensaje == null)
			mensaje = "Hola";
		
		try
		{
			contador = Integer.parseInt(
			   conf.getInitParameter("contador"));
		} catch (NumberFormatException e) {
			contador = 1;
		}
	}

	// Metodo para procesar una peticion GET
	
	public void doGet(HttpServletRequest request, 
			  HttpServletResponse response) 
	throws ServletException, IOException
	{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println ("<!DOCTYPE HTML PUBLIC \""+
			     "-//W3C//DTD HTML 4.0 " + 
			     "Transitional//EN\">");
		out.println ("<HTML>");
		out.println ("<BODY>");
		
		for (int i = 0; i < contador; i++)		
		{
			out.println (mensaje);
			out.println ("<BR>");
		}
		
		out.println ("</BODY>");
		out.println ("</HTML>");
	}
}

1.3.4. Prueba de los ejemplos

Para probar el ejemplo, tendríamos dos posibilidades

Se proporciona un fichero WAR con los tres servlets colocados en la subcarpeta WEB-INF/classes, y un fichero web.xml con el siguiente contenido:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//
 DTD Web Application 2.2//EN" 
 "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
	<servlet>
		<servlet-name>ejemplo1_1</servlet-name>
		<servlet-class>ClaseServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>ejemplo1_2</servlet-name>
		<servlet-class>ClaseServletHTML</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>ejemplo1_3</servlet-name>
		<servlet-class>ClaseServletInit</servlet-class>
		<init-param>
			<param-name>
			mensaje
			</param-name>
			<param-value>
			Mensaje de prueba
			</param-value>
		</init-param>
		<init-param>
			<param-name>contador</param-name>
			<param-value>10</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>ejemplo1_1</servlet-name>
		<url-pattern>/ejemploservlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>ejemplo1_2</servlet-name>
		<url-pattern>/ejemploservletHTML</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>ejemplo1_3</servlet-name>
		<url-pattern>/ejemploservletInit</url-pattern>
	</servlet-mapping>
</web-app>
Vemos que se mapean los tres servlets:

Para probar los servlets, copiamos el fichero WAR en el directorio webapps de Tomcat. Para llamar a los servlets, podemos hacerlo de tres formas:

http://localhost:8080/ejemplobasico/servlet/ClaseServlet
http://localhost:8080/ejemplobasico/servlet/ClaseServletHTML
http://localhost:8080/ejemplobasico/servlet/ClaseServletInit
http://localhost:8080/ejemplobasico/servlet/ejemplo1_1
http://localhost:8080/ejemplobasico/servlet/ejemplo1_2
http://localhost:8080/ejemplobasico/servlet/ejemplo1_3
http://localhost:8080/ejemplobasico/ejemploservlet
http://localhost:8080/ejemplobasico/ejemploservletHTML
http://localhost:8080/ejemplobasico/ejemploservletInit

NOTA: el servlet ClaseServletInit no tomará los parámetros si lo llamamos del primer modo, debido a que se asignan esos parámetros al mapeo.