Professional Documents
Culture Documents
En este tutorial aprenderemos como usar java para producir paginas webs. Esto es conocido como
"java del lado del servidor" y esta basado principalmente en las tecnologas conocidas como Servlet
y JSP Java Server Pages.
Prerrequisitos
1. Protocolos http, lenguaje html, paradigma Cliente-servidor, tcp/ip, etc. Les recomiendo ver la
serie de tutoriales : Video tutoriales sobre programacin Web, HTML y CSS
2. Programacin en lenguaje java. Ver los tutoriales java de este mismo sitio.
Contenido
1.
2.
3.
4.
5.
6.
7.
8.
Que
es un
Servlet? Un Servlet es un objeto java que pertenece a una clase que extiende
javax.servlet.http.HttpServlet. Esto no es del todo exacto ya que existen diferentes tipos de Servlets
pero con diferencia HttpServlet es el ms usado.
Entre las versiones para Windows existen una en forma de zip y otra con un instalador de servicio
Windows. Como quiero mantener este tutorial lo mas simple posible usar la versin zip as dejamos la
explicacin de que es un servicio Windows para otro tutorial ;) Descargamos el zip (32 o 64bit) y lo
descomprimimos en C:\.
En la instalacin, dentro del subdirectorio bin\ encontraremos startup.bat con el cual podemos
arrancar el servidor.
Hay que
tener en cuenta que Tomcat depende de java por lo cual buscar la variable de sistema JAVA_HOME
que le indique donde esta la instalacin de java. Ejemplo: JAVA_HOME=" C:\Program
Files\Java\jdk1.6.0_21"
Una vez arrancado el servidor podemos comprobar si funciona con cualquier Browser direccionado en
http://localhost:8080 y deberamos ver algo como
Ahora dentro del directorio webapps\ creamos un directorio first-servlet\ que ser el nombre de
nuestra aplicacin web y dentro creamos un archivo llamado welcome.html con el siguiente contenido:
<html>
<head>
<title>Hola Mundo</title>
</head>
<body>
<h1>Hola edu4java</h1>
<p>Bienvenidas a nuestra primera <br/> pgina Web. </p>
</body>
</html>
del sector java empresarial que definen especificaciones (estndares) para que los productos de las
diferentes empresas sean compatibles.
Las paginas web estticas se colocan dentro del directorio de aplicacin (first-servlet\ en nuestro caso)
pero nunca dentro del directorio WEB-INF\ ya que este no puede ser accedido desde el Browser.
Dentro del directorio WEB-INF\classes\ se colocaran las clases java compiladas que componen la
aplicacin (incluidos los servlets). En el directorio WEB-INF\lib\ se pueden incluir libreras
(archivos .jar) que pueda necesitar la aplicacin.
Vamos a crear un Servlet llamado com.edu4java.servlets.FirstServlet con el siguiente cdigo fuente:
package com.edu4java.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
recibe una peticin de tipo GET desde el Browser (para une explicacin de lo que es un mtodo GET y
POST ver el tutorial Servidor Web o Servidor HTTP).
En mtodo doGet recibe dos parmetros, el primero es un objeto de tipo HttpServletRequest que
contiene toda la informacin acerca de la peticin de la pgina web y el segundo es un objeto de tipo
HttpServletResponse que se utiliza para rellenar la respuesta que ser enviada al Browser.
En el cdigo fuente se puede ver como obtenemos un objeto java.io.PrintWriter del objeto
HttpServletResponse y lo usamos para enviar una pgina web con la fecha actual tomada del sistema
usando un objeto del tipo java.util.Date.
Para desplegar este Servlet en el servidor debemos copiar el archivo compilado FirstServlet.class el
directorio WEB-INF\Classes\ como se muestra a continuacin:
Por ltimo solo nos resta configurar el archivo web.xml para que Tomcat sepa cuando debe llamar al
Servlet FirstServlet. Vamos a configurarlo para que sea llamado cuando alguien pregunte por
http://localhost:8080/first-servlet/what-time-is-it
<web-app>
<servlet>
<servlet-name>timeservlet</servlet-name>
<servlet-class>com.edu4java.servlets.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>timeservlet</servlet-name>
<url-pattern>/what-time-is-it</url-pattern>
</servlet-mapping>
</web-app>
<web-app> es el primer elemento en web.xml. Dentro, el elemento <servlet> indica que se crear
un Servlet de la clase com.edu4java.servlets.FirstServlet bajo el nombre interno timeservlet. El
elemento <servlet-mapping> asociar el URL /what-time-is-it al Servlet con nombre interno
timeservlet.
Por ltimo nos resta reiniciar el servidor Tomcat: cerrar la ventana ms-dos del servidor, volver a
ejecutar startup.bat
y
direccionar un Browser a http://localhost:8080/first-servlet/what-time-is-it
Browser para enviar estos parmetros usando el mtodo GET o POST esta explicado en el tutorial
Servidor Web o Servidor HTTP. Lo que vamos a ver en este tutorial es como recuperar esta
</body>
</html>
Lo siguiente es crear un Servlet que reciba la peticin en /login que es la direccin indicada en el
atributo action de la etiqueta <form> de login.html
package com.edu4java.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import
import
import
import
javax.servlet.ServletException;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
Reiniciamos el servidor, abrimos la pagina login.html, colocamos una x en usuario, una x en password
y oprimimos el boton submit.
indicndonos que el login ha fallado. Si repetimos la operacin con edu4java como user y eli4java
como password obtenemos El problema aqu es que la password secreta queda visible en el URL
/login?user=edu4java&password=eli4java, quedar en el historial del Browser y cualquiera que
acceda al Browser despus de nosotros podr obtenerla fcilmente. Esto puede ser solucionado
cambiando el mtodo de envo del formulario a POST en login.html.
<html>
<body>
</body>
</html>
Lo que sucede aqu es que no hemos implementado el mtodo doPost (solo implementamos doGet) por
lo que nuestro Servlet no esta capacitado para recibir peticiones POST. El siguiente cdigo muestra la
modificacin necesaria para que funcione.
package com.edu4java.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import
import
import
import
javax.servlet.ServletException;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
El nico cambio es que reemplac doGet por doPost. Despus de recompilar y desplegar el Servlet,
reiniciar el servidor y volver a utilizar login.html obtenemos
Donde podemos ver que han desaparecido los parmetros del URL.