Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Servlets PDF
Servlets PDF
Introduccin
Contenedores de servlets
Un contenedor de servlets es una parte de un servidor
web o de un servidor de aplicaciones que:
ofrece servicios de red sobre los cuales se envan peticiones y
respuestas.
decodifica peticiones
formatea respuestas
contiene y gestiona el ciclo de vida de los servlets
Todos los contenedores de servlets deben soportar como
mnimo HTTP/1.0 pero pueden soportar opcionalmente
protocolos adicionales como HTTPS.
Un contenedor de servlets puede fijar restricciones de
seguridad en el entorno en el que el servlet se ejecuta
(por ejemplo, se puede limitar la creacin de nuevos
threads).
5
Contenedores de servlets
6
Contenedores de servlets
API de Servlets
javax.servlet:
Servlets genricos
Interfaces importantes de este paquete:
Servlet
ServletContext
RequestDispatcher
javax.servlet.http:
Servlets que implementan el protocolo HTTP.
Clases e interfaces importantes de este paquete:
HttpServlet
HttpServletRequest,
HttpServletResponse,
HttpSession,
Cookie
9
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpS ervlet {
public void doGet( HttpS ervletRequest req,
HttpS ervletResponse res)
throws S ervletE xception, IOE xception {
res.setContentT ype("text/html");
P rintWriter out = res.getWriter();
out.println("<HT M L >");
out.println("<HE AD><T IT L E >Hello World</T IT L E ></HE AD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HT M L >");
}
}
<HT ML>
<HE AD>
<T IT L E >Introductions</T IT L E >
</HE AD>
<BODY>
<FORM M E T HOD=GE T ACT ION ="/servlet/Hello">
If you don't mind me asking, what is your name?
<IN P UT T YP E =T E XT N AM E ="name"><P >
<IN P UT T YP E =S UBM IT >
</FORM >
</BODY>
</HT M L >
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpS ervlet {
public void doGet(HttpS ervletRequest req, HttpS ervletResponse res)
throws S ervletE xception, IOE xception {
res.setContentT ype("text/html");
P rintWriter out = res.getWriter();
S tring name = req.getP arameter("name");
out.println("<HT ML >");
out.println("<HE AD><T IT L E >Hello, " + name + "</T IT L E ></HE AD>");
out.println("<BODY>");
out.println("Hello, " + name);
out.println("</BODY></HT M L >");
}
public S tring getS ervletInfo() {
return "A servlet that knows the name of the person to whom it's" +
"saying hello";
}
}Gestionar el mtodo POST
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req, res);
}
Y desde el HTML:
3. Servicio de
peticiones:
service()
4. Finalizacin:
destroy()
19
Servlet contador
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
int count;
// Try to load the initial count from our saved persistent state
try {
FileReader fileReader = new FileReader("InitDestroyCounter.initial");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String initial = bufferedReader.readLine();
count = Integer.parseInt(initial);
return;
}
catch (FileNotFoundException ignored) { } // no saved state
catch (IOException ignored) { } // problem during read
catch (NumberFormatException ignored) { } // corrupt saved state
Servlet contador
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
count++ // Thread 1
count++ // Thread 2
out.println // Thread 1
out.println // Thread 2
27
ServletRequest (I)
Parmetros
Funciones que permiten acceder a los parmetros de una peticin. Los
parmetros se reciben siempre del cliente.
ServletRequest (II)
Atributos
Los atributos permiten la comunicacin entre servlets que se pasen una
misma peticin (pipeline) o entre filtros y servlets.
HTTPServletRequest (I)
Cabeceras
Funciones que permiten acceder a las cabeceras HTTP de la peticin.
HTTPServletRequest (II)
Descomposicin de elementos en el camino de una peticin
RequestURI = ContextPath + ServletPath + PathInfo
Informacin de la peticin
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestInfo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>Request Information Example</title>");
out.println("</head>");
out.println("<body>");
out.println("<h3>Request Information Example</h3>");
out.println("Method: " + request.getMethod());
out.println("Request URI: " + request.getRequestURI());
out.println("Protocol: " + request.getProtocol());
out.println("PathInfo: " + request.getPathInfo());
out.println("Remote Address: " + request.getRemoteAddr());
out.println("</body>");
out.println("</html>");
}
}
35
Parmetros de la peticin
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
Cabeceras de la peticin
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
ServletResponse
Enviando informacin
El objeto respuesta dispone de mtodos para incluir en la respuesta datos
binarios y de texto.
HTTPServletResponse (I)
Fijando cabeceras
Un servlet puede fijar las cabeceras de la respuesta antes de enviar
ninguna otra informacin, utilizando los mtodos:
HTTPServletResponse (II)
Retornando redirecciones y errores
Si se desea retornar una respuesta indicando que ha habido un error o
redirigir a otra pgina, podemos utilizar:
HTTPServletResponse (III)
Sesiones (I)
Sesiones (II)
Obteniendo la sesin
Usamos la peticin (HTTPServletRequest) para acceder a la sesin
Sesiones (III)
Atributos de sesin
Podemos asociar atributos a una sesin, para mantener el estado del
cliente entre dos peticiones.
Sesiones (IV)
Finalizacin de sesin
Una sesin finaliza cuando pasa un cierto tiempo sin recibirse peticiones
que se identifiquen como pertenecientes a esa sesin. Se puede fijar el
tiempo de inactividad para que la sesin finalice.
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println(name + " = " + value);
}
}
}
51
Carrito de la compra
Aplicaciones web
Servlets
Pginas JSP
Clases Java de utilidad
Documentos estticos (html, imgenes, sonidos, etc.)
Applets, beans y clases de la parte cliente de la
aplicacin
Informacin descriptiva que enlaza los elementos
anteriores.
55
Estructura de directorios
/index.html
/howto.jsp
/feedback.jsp
/images/banner.gif
/images/jumping.gif
/WEB-INF/web.xml
/WEB-INF/lib/jspbean.jar
/WEB-INF/classes/com/miempresa/servlets/MiServlet.class
/WEB-INF/classes/com/miempresa/util/MiClaseUtilidad.class
Descriptor de despliegue
Tipos de matching:
/esto/es/un/camino/* -> matching de prefijos
/esto/es/un/camino/exacto -> matching exacto
*.zp -> matching de extensin
/ -> matching para definir un servlet por defecto
Algoritmo de mapeo:
1. Si existe un matching exacto entre el path solicitado y el del servlet, se envia
la peticin al servlet.
2. Se intenta encontrar de forma recursiva, el mayor prefijo que haga matching y
se envia la peticin al servlet.
3. Si el ultimo segmento de la URL contiene una extensin, se busca un servlet
que gestione esa extensin
4. Si se ha definido, se enva la peticin al servlet por defecto.
61
ServletContext (I)
La interficie ServletContext define la vista que un servlet tiene de la
apliacin web en la que est contenido. Un servlet puede utilizar el
ServletContext para realizar logs, obtener referencias URL a recursos y
fijar y almacenar atributos a los que otros servlets de la misma aplicacin
pueden acceder. Existe una instancia de ServletContext por cada
aplicacin web.
Parmetros de inicializacin
Permiten acceder a los parmetros de inicializacin de la aplicacin web
especificados en el descriptor de despliegue
ServletContext (II)
Atributos de contexto
Permiten compartir informacin entre servlets que forman parte de la misma
aplicacin web. Si la aplicacin es distribuida, solo entre los que corren
en la misma mquina virtual
ServletContext (III)
Recursos
La interfaz ServletContext ofrece acceso directo a la jerarqua de contenidos
estticos que son parte de la aplicacin web como HTML's, GIF's, etc.
ServletContext (IV)
Log
La interfaz ServletContext nos ofrece la posibilidad de escribir informacin
en el fichero de log del servidor.
RequestDispatcher
Despachando peticiones
Es posible que un servlet necesite la ayuda de otros servlets, JSP's o
HTML's para generar partes de la respuesta. O bien decida hacer parte
del trabajo y despus enviar la peticin a otro para que contine. Para
eso se usan los ResquestDispatcher.
public RequestDispatcher
getRequestDispatcher(java.lang.String path)
Por ejemplo:
RequestDispatcher (II)
RequestDispatcher (III)
MEN PRINCIPAL