Servlets
! para ser un servlet una clase debe extender la clase
HttpServlet y reescribir los métodos doGet y/o
doPost (se puede hacer que uno llame al otro)
! HttpServletRequest lleva toda la info de la solicitud
! HttpServletResponse lleva la info de respuesta
! Ambas incluyen todos los métodos necesarios
! HttpServletResponse permite obtener un objeto
PrintWriter necesario para enviar info hacia el cliente
Ciclo de Vida de un Servlet
! Cuando se crea el servlet se invoca el método init
" puede pasarse un objeto ServletConfig
! Después de eso cada solicitud crea una nueva hebra
que llama al método service
! es posible especificar que solo se permit una hebra
" ... extends HttpServlet implements SingleThreadModel
! service llama a doGet, doPost, ... (doXxx)
" doDelete, doOptions, doTrace
! Cuando el servidor decide descargar el servlet
invoca método destroy
<?xml version="1.0" encoding="ISO-8859-1"?>
Inicialización
<!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
public class ShowMessage extends HttpServlet { </servlet-name>
private String message; <servlet-class>
coreservlets.ShowMessage
private String defaultMessage = "No message.";
</servlet-class>
private int repeats = 1; <init-param>
public void init(ServletConfig config) throws <param-name>
message
ServletException { </param-name>
// Always call super.init <param-value>
super.init(config); Shibboleth
</param-value>
message = config.getInitParameter("message"); </init-param>
if (message == null) { <init-param>
<param-name>
message = defaultMessage; repeats
} </param-name>
<param-value>
try { 5
String repeatString = </param-value>
config.getInitParameter("repeats"); </init-param>
</servlet>
repeats = Integer.parseInt(repeatString); </web-app>
} catch(NumberFormatException nfe) {
}
} web.xml
public void doGet(HttpServletRequest request, ...)
Lectura de parámetros del Formulario
<FORM ACTION="/servlet/coreservlets.ThreeParams">
First Parameter: <INPUT TYPE="TEXT" NAME="param1"><BR>
Second Parameter: <INPUT TYPE="TEXT" NAME="param2"><BR>
Third Parameter: <INPUT TYPE="TEXT" NAME="param3"><BR>
<CENTER>
<INPUT TYPE="SUBMIT">
</CENTER>
</FORM>
request.getParameter("param1")
Enumeration paramNames request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print("<TR><TD>" + paramName + "\n<TD>");
Obtención de Headers
! request.getHeader("Connection")
! request.getHeaderNames()
while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
out.println("<TR><TD>" + headerName);
out.println(" <TD>" + request.getHeader(headerName));
}
Contenedor de Servlets
! conexión entre el servidor web y los servlets
! provee el ambiente de runtime y es responsable de
cargar e invocar los servicios
! diferentes tipos
" add-ons o plug-ins (Apache y IIS)
" standalone
" parte de un application server (WebLogic, JBoss)
JSP
! permite separar
procesamiento de solicitud,
lógica de negocio y
presentación
Anatomía de una Página JSP
Contenedor JSP
! intercepta y procesa solicitudes JSP
Fase de traducción (sólo la primera vez)
! convierte página en servlet y lo compila
Hay 3 tipos de elementos JSP
! Directivas
" info sobre la página que permanece igual entre requests
! Acciones
" se llevan a cabo en el momento de la solicitud
! Scripting
" agregar una pequeña pieza de código directamente