Teoria Servlets Java
Teoria Servlets Java
1 de 14
SERVLETS
Tipos de request
GET: Cuando se teclea una URL en el navegador, cuando se pincha en un enlace o cuando
se submite un formulario con el atributo METHOD=GET o si no se especifica dicho
atributo.
POST: Cuando se submite un formulario que especifica METHOD=POST.
Para ser un servlet, la clase debe heredar de la clase HttpServlet y sobreescribir los mtodos
doGet o doPost dependiendo de si los datos son enviados con GET o con POST.
Si queremos que hagan lo mismo, basta con llamar desde un mtodo al otro.
//HolaMundo.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
doGet(request, response);
}
}
Desde doGet y doPost se lanzan dos excepciones que hay que incluir en la declaracin.
Tambin hay que importar clases que estn en java.io (para PrintWriter, etc.),
javax.servlet (para HttpServlet, etc.) y javax.servlet.http (para HttpServletRequest y
HttpServletResponse).
El siguiente paso es decidir donde poner los servlets, y esto vara dependiendo del servidor.
Los siguientes PATHs pertenecen a directorios para grabar servlets cuyo cdigo vara
frecuentemente (por ejemplo cuando estamos probando):
Tomcat 3.0:
dir-instalacion\webpages\WEB-INF\classes
Tomcat 3.2:
dir-instalacion\webapps\ROOT\WEB-INF\classes
WebLogic de BEA:
dir-instalacion\myserver\servletclasses
NOTA: Hay que aadir la lnea:
weblogic.httpd.register.servlets=weblogic.servlet.ServletServlet
al fichero weblogic.properties
JSWDK 1.0.1:
dir-instalacion\webpages\WEB-INF\servlets
Empaquetando servlets
Ejemplo:
//HolaMundo.java
package nombrePackage;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
doGet(request, response);
}
}
Por ejemplo, para llamar al servlet del ejemplo anterior usando Tomcat, la direccin que
habra que poner en el browser sera:
http://localhost/servlet/nombrePackage.HolaMundo
//ServletUtilities.java
import javax.servlet.*;
import javax.servlet.http.*;
//HolaMundo3.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
Cuando un servlet es creado por primera vez, es llamado el mtodo init. A continuacin, se
crea un hilo que llama al mtodo sercive. Es este mtodo el que se encarga de llamar al
mtodo doGet, doPost u otro doXxx dependiendo del tipo de peticin recibida. Por ltimo,
cuando el servidor decide descargar el servlet, primero llama al mtodo destroy del servlet.
Servlets Pg. 4 de 14
El mtodo init
Este mtodo se utiliza para inicializaciones que se tienen que hacer una nica vez, igual
que ocurre con los applets. El servlet puede ser creado cuando se le invoke desde su
URL o cuando se arraque el servidor, dependiendo de como est registrado en el
servidor web.
Existen dos versiones de este mtodo: una que no recibe ningn parmetro y otra que
recibe un objeto de la clase ServletConfig. La primera version es utilizada cuando el
servlet no necesita leer configuraciones que varen de un servidor a otro. La definicin
del mtodo sera:
La segunda versin se usa cuando el servlet necesita leer especificaciones del servidor
antes de poder completar la inicializacin. Por ejemplo, el servlet podra necesitar
conocer la configuracin de una base de datos, ficheros de claves, etc. La definicin del
esta segunda versin del mtodo sera:
Sobre esta ltima versin, hay que destacar dos cosas: por un lado, el objeto
ServletConfig tiene un mtodo getInitParameter con el cual se pueden buscar los
parmetros de inicializacin del servlet, igual que se hace con el mtodo getParameter
usado en el init de los applet. De esta forma queda transparente dnde estn
grabados esos parmetros de inicializacin, que varan segn el servidor. Por ejemplo,
en Tomcat estn en un fichero llamado web.xml, en JSWDK est en
servlets.properties, en Weblogic estn en weblogic.properties, etc. Por otro lado,
la primera lena del cdigo anterior (super.init(configuracion)) es una llamada
crtica. El objeto ServletConfig es usado ms tarde en el servlet, y el mtodo init de
la superclase registra dnde puede el servlet encontrarlo ms tarde.
El mtodo service
Cada vez que el servidor recibe una peticin por parte de un servlet, ste crea un nuevo
hilo y llama al mtodo service. Este mtodo chequea el tipo de peticin (GET, POST,
PUT, DELETE, etc.) y llama a doGet, doPost, doPut, doDelete, etc., segn corresponda.
Si se necesita procesar las peticiones GET y POST de forma idntica, se podra
sobreescribir el mtodo de la siguiente forma:
Esto no es una buena idea. Es mejor llamar desde doGet a doPost o viceversa.
El mtodo destroy
La instancia a un servlet puede ser destruida, por ejemplo, por el administrador del
Servlets Pg. 5 de 14
servidor o porque lleva mucho tiempo inactivo. Antes de ser destruido el servlet llama
al mtodo destroy. Mediante este mtodo se permite al servlet cerrar conexiones a una
base de datos, para hilos que se estn ejecutando en background, grabar contadores en disco,
etc.
No obstante, hay que tener cuidado, porque si se cae el servidor, este mtodo no se ejecuta y
se pueden quedar conexiones abiertas, etc.
//ShowMessage.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
<!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>
ShowMsg
</servlet-name>
<servlet-class>
ShowMessage
</servlet-class>
<init-param>
<param-name>
message
</param-name>
<param-value>
Shibboleth
</param-value>
</init-param>
<init-param>
<param-name>
repeats
</param-name>
<param-value>
5
</param-value>
</init-param>
</servlet>
</web-app>
Este ejemplo recupera dos parmetros que pasamos en la llamada al servlet. Los parmetros
se llaman param1 y param2.
Estos parmetros son tratados por el servlet de la misma manera que si se recuperasen de un
formulario cuyo atributo method fuese igual a GET o si dicho atributo no estuviese definido.
//DosParametros.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
doGet(request, response);
}
}
Servlets Pg. 9 de 14
<!--FormTresParametros.htm-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Formulario con tres campos</TITLE>
</HEAD>
<BODY>
<H1 ALIGN="CENTER">Formulario con tres campos</H1>
</BODY>
</HTML>
Servlets Pg. 10 de 14
//ShowParameters.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
//ProtectedPage.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Properties;
import sun.misc.BASE64Decoder;
//PasswordBuilder.java
import java.util.*;
import java.io.*;
<servlet>
<servlet-name>
ProtectedPage
</servlet-name>
<servlet-class>
ProtectedPage
</servlet-class>
<init-param>
<param-name>
passwordFile
</param-name>
<param-value>
C:\\jakarta-tomcat-3.2.1\\webapps\\ROOT\\WEB-INF\\passwords.properties
</param-value>
</init-param>
</servlet>
Servlets Pg. 14 de 14
Direcciones de inters
API de Servlets
http://java.sun.com/products/servlet/2.2/javadoc/index.html