Title: Universidad Nacional de Colombia
1Desarrollo de aplicaciones en Internet
2Que es un Servlet?
- Un Servlet es un componente de software del lado
del servidor - Usualmente son clases que implementan una
interfaz específica que puede ser invocada desde
el servidor. - Servlet API es una especificación de SUN que
define las clases e interfaces necesarias para .
3Ventajas de los Servlets
- Son compilados
- Resistente a Caídas
- Independiente de plataforma
- Extensible
- Multi-Hilo
- Escrito en Java
4Estructura básica de un Servlet
- Es una clase normal que extiende de HttpServlet o
GenericServlet - public class Esqueleto extends HttpServlet
- public void init()
- // inicializacion del servlet
-
- public void service()
- // la mayoría del trabajo sucede aqui
-
- public void destroy()
- // devolver los recursos aqui
-
5Métodos de un Servlet service()
- service()
- El servidor llama este metodo cuando se recibe
una petición al servlet. Para los servlets HTTP,
este metodo no debería ser sobrecargado. Si no se
sobreescribe, se llama a alguno de los metodos de
acuerdo con el tipo de petición (Get, Post)
6Métodos de un Servlet doGet()
- doGet()
- http//www.dominio.com/servlet.do?paramval
- Este método se llama en respuesta a una petición
HTTP GET (incluyendo los GET con parámetros). Si
se van a recibir llamadas de este tipo, se debe
sobrecargar este método.
7Métodos de un Servlet doPost()
- doPost()
- http//www.dominio.com/servlet.do?
- Este método se llama en respuesta a una petición
HTTP POST. Si se van a recibir llamadas de este
tipo, se debe sobrecargar este método.
8Métodos de un Servlet init()
- init()
- Este método se llama únicamente una la primera
vez que se carga el servlet. Es usado comúnmente
para inicializar los recursos que se emplearán en
el servlet cuando se reciban peticiones. - p.e. conexiones a BD
9Métodos de un Servlet destroy()
- destroy()
- Este método se llama inmediatamente antes que se
descargue el servlet. Este metodo debe ser
sobrecargado por el desarrollador para liberar
recursos empleados por el servlet. - p.e. conexiones de ret, o sockets.
10Ciclo de vida de un Servlet
Se ejecuta una llamada al servlet
El servidor carga el Servlet
El servidor selecciona la Instancia del servlet
para ejecutar service()
Se crea una o más instancias del servlet
El servidor descarga el servlet después de
ejecutar destroy()
Service() procesa el request
El Server llama el init()
El servlet espera a ser Llamado de nuevo, hasta
que sea descargado del servidor
11Api Servlet
java.util
javax.servlet.http
EventListener
HttpSessionBindingListener
EventObject
HttpSessionBindingEvent
javax.servlet
HttpUtils
GenericServlet
java.lang
Cookie
ServletInputStream
Object
HttpServlet
ServletOutputStream
HttpSession
java.io
ServletRequest
HttpSessionContext
InputStream
ServletResponse
HttpServletRequest
OutputStream
HttpServletResponse
Servlet
ServletContext
ServletConfig
12Hola Mundo
-
- import javax.servlet.import
javax.servlet.http.import java.io.public
class HolaMundoServlet extends HttpServlet
public void init(ServletConfig
conf) throws ServletException super.in
it(conf) public void service(HttpServletReq
uest req, HttpServletResponse res) throws
ServletException, IOException res.setConte
ntType("text/html") PrintWriter out
res.getWriter() out.println("lthtmlgt") o
ut.println("ltbodygt") out.println("lth1gtHola
Mundolt/h1gt") out.println("lt/bodygt") out.
println("lt/htmlgt")
13Web.xml
- lt?xml version"1.0" encoding"ISO-8859-1"?gt
- lt!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN" - "http//java.sun.com/dtd/web-app_2_3.dtd"gt
- ltweb-appgt
- ltservletgt
- ltservlet-namegtHolaMundolt/servlet-namegt
- ltservlet-classgtHolaMundoServletlt/servlet-class
gt - lt/servletgt
- lt/web-appgt
14Mapeo del servlet
- ltweb-appgt
-
- ltservlet-mappinggt
- ltservlet-namegtHolaMundolt/servlet-namegt
- lturl-patterngt/holalt/url-patterngt
- lt/servlet-mappinggt
- lt/web-appgt
15Parámetros de inicio
- ltweb-appgt
-
- ltservletgt
- ltservlet-namegtHolaMundolt/servlet-namegt
- ltservlet-classgtHolaMundoServletlt/servlet-class
gt - ltinit-paramgt
- ltparam-namegtadminEmaillt/param-namegt
- ltparam-valuegtabarrantesb_at_unal.edu.colt/param-
valuegt - lt/init-paramgt
- ltinit-paramgt
- ltparam-namegtadminContactNumberlt/param-namegt
- ltparam-valuegt12026lt/param-valuegt
- lt/init-paramgt
- lt/servletgt
-
- lt/web-appgt
16Parámetros de inicio
-
- public void init(ServletConfig config) throws
ServletException - Enumeration parameters config.getInitParamet
erNames() - while (parameters.hasMoreElements())
- String parameter (String)
parameters.nextElement() - System.out.println("Parameter name "
parameter) - System.out.println("Parameter value "
- config.getInitParameter(parameter))
-
-
17ServletContext
- El contexto del servlet es el ambiente donde
corre el servlet - El contenedor de servlets crea un objeto del tipo
ServletContext que se puede usar para acceder a
información del ambiente del servlet. - public void init(ServletConfig config) throws
ServletException - ServletContext servletContext
config.getServletContext() - servletContext.setAttribute("password",
"dingdong") -
18ServletContext
19Capturar datos de un Formulario
- GET ltURLgt?nombreAntonioapellidoperez
- POST
- POST /servlet/MiServlet HTTP/1.1
- User-Agent Mozilla/4.5 (compatibleMSIE
4.01Windows NT) - Host www.dominio.com
- Accept image/gif, image/x-bitmap, image/jpeg,
image/jpeg, / - Content-type application/x-www-form-urlencoded
- Content-length 39
- nombreAntonioapellidoPerez
20Capturar datos de un Formulario
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- public class ThreeParams extends HttpServlet
- public void doGet(HttpServletRequest
request,HttpServletResponse response) throws
ServletException, IOException - response.setContentType("text/html")
- PrintWriter out response.getWriter()
- String title "Reading Three Request
Parameters" - out.println(ServletUtilities.headWithTitle(title)
- "ltbodygt\n"
- "ltulgt\n"
- " ltligtparam1lt/ligt"
- request.getParameter("param1") "\n"
- " ltligtparam2lt/ligt"
- request.getParameter("param2") "\n"
- " ltligtparam2lt/ligt"
- request.getParameter("param3") "\n"
- "lt/ulgt\n"
21ServletRequest
22Preservación del Estado
- Los servlets permiten seguir la trayectoria de un
cliente, es decir, obtener y mantener una
determinada información. - Mediante cookies
- Mediante seguimiento de sesiones
- Mediante la reescritura de URLs
23Cookies
- Son archivos que identifican a un cliente
- Las cookies en Java son objetos de la clase
Cookie, del package javax.servlet.http. - Pasos para enviarla
- Crear un objeto Cookie
- Establecer sus atributos
- Enviar la cookie
- Pasos para leerla
- Recoger todas las cookies de la petición del
cliente - Encontrar la cookie precisa
- Obtener el valor recogido en la misma
24Enviar Cookies
-
- Cookie miCookienew Cookie("Nombre",
"ValorInicial") - miCookie.setValue("ValorFinal")
- miCookie.setMaxAge(-1)
- resp.addCookie(miCookie)
25Leer Cookies
- ...
- if(libroABorrar!null)
- Cookie arrayCookiesreq.getCookies()
- for(i0iltarrayCookies.lengthi)
- Cookie miCookiearrayCookiesi
- if(miCookie.getName().equals("compra")
- miCookie.getValue.equals("libro1")
- miCookie.setMaxAge(0)
-
-
-
- ...
26Sesiones
- Una sesión es una conexión continuada de un mismo
browser a un servidor durante un tiempo
prefijado. setMaxInactiveInterval(int) - Al igual que las cookies son compartidas por
todos los servlets de un contexto. - HttpSession miSesion req.getSession(true)
27Sesiones
- ...
- HttpSession miSesionreq.getSesion(true)
- String nom miSesion.getValue(nombre)
- if(nomnull)
- miSesion.putValue(nombre, pedro)
-
- ...
28URL Rewriting
-
- out.println("Esto es un enlace reescrito")
- out.println("lta href\""
- resp.encodeUrl("/servlet/buscador?nombrePedro"
- "\"lt/agt")
-