Programacion
Programacion
Programacion
Servlets, I
• Objetos java, componentes web contenidas
en un servidor (contenedor de servlets) que
los reutiliza, que reciben peticiones
mediante una URL y generan respuestas
• Mantienen información mediante cookies
HTTP, objetos de sesión y de aplicación y
reescritura de la URL
• Normalmente generan código HTML
Servlets, II
• Los servlets no son aplicaciones, sino
partes de aplicaciones que gestionan
información que puede tener un contexto
más amplio que el del código escrito por el
desarrollador (contexto de sesión o de
aplicación).
• Los servlets proporcionan medios para
almacenar información válida en los
contextos de sesión y de aplicación y para
acceder a ella.
Contenedores: Optimizaciones
• Los contenedores no crean y destruyen
objetos constantemente, sino que los
reaprovechan mediante pools o caches.
– Los contenedores se pueden configurar
especificando el número de items en caches
y pools de objetos almacenados para su
reutilización
• Tecnologías previas, como CGI, crean un
proceso por cada solicitud
Procesamiento de una petición http
• URL de la petición:
http://serverId/applId/servletPath?params
• Servidor: (crea objetos si hace falta)
– Asocia applId/servletPath a objeto Servlet
– Prepara objetos request y response
– Llama al método doGet(req, resp) o
doPost(req, resp) del Servlet
• resp escribe en su Writer
• Envía el texto acumulado en el Writer
Procesamiento de la información
en una petición http
• Las cuestiones marcadas en rojo tienen que
ser programadas (en Java o mediante
fichero de configuración)
• Los parámetros de la petición están
disponibles en el objeto HttpServletRequest.
• Otros datos como la dirección del cliente
(remoteAddr) y la URL de la petición
(requestURL) también.
Servlets, III
• Corresponden a una subclase de
HttpServlet
• Su fichero compilado se guarda en un
subdirectorio WEB-INF/class
• Métodos esenciales:
– doGet(request, response)
– doPost(request, response)
– PrintWriter response.getWriter()
– String request.getParameter(String)
Servlets, IV
• Los atributos no estáticos de una subclase
de HttpServlet no tienen utilidad en
general.
• Puede ser útil definir métodos específicos
de la subclase, llamados por doGet o
doPost.
Servlets, IV
HttpServlet
request response
(parámetros) remoteAddr
requestURL writer
Ejemplo: SimpleServlet.zip, I
public class SimpleServlet extends HttpServlet {
protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html> <head><title>Simple</title></head>");
out.println("<body><h1>Hello, “ +
request.getRemoteAddr () +
“.</h1> </body> </html>”);
out.close();
}
}
Ejemplo: SimpleServlet, II
• Ejecución: http://localhost:8080/Simple/
– Hello, 127.0.0.1.
• Ficheros relevantes:
web.xml + SimpleServlet.java
• Configuración (web.xml):
– Entrada: SimpleServlet
Desarrollo y despliegue de
aplicaciones web
• Complejidad: árbol de directorios
• Fases:
– Compilación .class
– Construcción .war, .ear, …
– Despliegue aplicación/módulo en servidor
Despliegue y pliegue de
aplicaciones web
• Despliegue: alternativas
– Copiar fichero .war en
<JEE_HOME>/domains/domain1/autodeploy
– Ejecución de un objetivo Ant (script, build.xml)
– Ejecutar deploy (o run)desde NetBeans
• Pliegue
– asadmin undeploy <nombre_contexto>
– http://localhost:4848/asadmin ->
Aplicaciones Web -> Anular implementación
ANT
• Script: build.xml
• Objetivos (Compilar, desplegar, …)
– Pueden estar satisfechos
– Pueden depender de otros objetivos
– Pueden utilizar variables
• ant deploy
NetBeans
• Proyecto (módulo)
– Categoría: Java Web, Web Application
– Nombre (context path)
– Servidor (GlassFish 3)
– Versión Java EE: 6
• Acciones: Build (compila y genera *.war), Deploy
(despliega), Run, Generate JavaDoc, … (usan
fichero Ant generado automáticamente)
• Crea fichero build.xml y directorio de
configuración nbproject
Configuración de módulos web
• Los Servlets se crean y destruyen por
iniciativa del contenedor web, que también
activa sus métodos.
• Un fichero de configuración permite
especificar estos procesos.
• El fichero web.xml contiene información
utilizada por el servidor de aplicaciones y
el contenedor web en su funcionamiento.
Información de configuración de
módulos web
• Inicialización de parámetros de la
aplicación
• Lista de servlets y otras componentes
• Inicialización de parámetros de las
componentes
• Asociación de URLs a componentes
Estructura básica de fichero de
configuración Web.xml
// <web-app …>
• Título // <display-name>
• Servlets: // <servlet>
– Nombre // <servlet-name>
– Clase // <servlet-class>
– URLs (plantillas) // <servlet-mapping>
// <servlet-name>
// <url-pattern>
Ejemplo de fichero de
configuración web.xml
<?xml version=… ?>
<web-app version=…>
<servlet>
<servlet-name>Simple</servlet-name>
<servlet-class>servlets.Simple</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Simple</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Ejercicios
• [NombreYClub] Desarrollar una aplicación
web que incluya la página HTML del
ejercicio STATIC así como un servlet que
conteste a la URL
UUU:8080/NombreYClub?nombre=XXX&club=YYY
con una página que diga
“Hola XXX, Viva el YYY!”
Ejercicios, II
• [SERV1] Escribir una aplicación web que
complete el ejemplo visto como sigue:
– El servlet SimpleServlet saluda al usuario
utilizando su IP y utiliza un formulario para
pedirle el nombre
– El servlet adicional NameServlet saluda al
usuario utilizando su nombre
• [SERV2] Aplicación web con un servlet que
evalúa operaciones numéricas (sumas,
restas, productos y divisiones)
Ejercicios, III
• [SERV3] Aplicación web con un servlet
que pide un número y se llama a sí mismo
de nuevo. Además, el servlet muestra la
suma de las cantidades introducidas hasta
el momento por todos los usuarios.
Recordatorio
• Los servlets no son aplicaciones, sino
partes de aplicaciones con información
que puede tener un contexto más amplio
que el del código escrito por el
desarrollador (contexto de sesión o de
aplicación).
• Los servlets proporcionan medios para
almacenar información válida en los
contextos de sesión y de aplicación y para
acceder a ella.
Contextos
• Aplicación: javax.servlet.ServletContext
HttpServlet.getServletContext()
• Sesión: javax.servlet.http.HttpSession
HttpServletRequest.getSession()
HttpServletRequest.getSession(t)
• Petición: javax.servlet.HttpServletRequest
Contextos, II
• Los contextos son objetos que pueden guardar
información en atributos (un mapa de
asociación) mediante los métodos
Object getAttribute(String)
void setAttribute(String, Object)
• El contexto de aplicación se pierde si el servidor
se apaga. Hay mecanismos para guardarlos y
cargarlos automáticamente, basados en
eventos. Se pueden definir para eventos más
generales.
Ejercicios
• [SERVCONT1] Aplicación web que pide una
lista de números y muestra la suma de ellos
pidiendo a la vez otra lista, así como la suma de
todos los que se han introducido en la misma
sesión y de los que se han introducido desde
que se arrancó la aplicación.
• [SERVCONT2] (Voluntario) Aplicación web que
permite guardar dos listas de objetos: una que
se mantiene y se puede modificar durante una
sesión y otra común que se mantiene y se
puede modificar en cualquier momento y por
cualquier usuario.
Ejercicios, II
• [SERVEMAILS] (Voluntario) Aplicación web
con tres funcionalidades accesibles a
través de URLs diferentes: añadir
personas y direcciones de correo
electrónico a una lista común, ver la lista
de personas y correos electrónicos y pedir
la dirección de correo electrónico
correspondiente a un nombre.
Servlets, III
Servlet
(atributos)
(parámetros) RemoteAddr (atributos) (parámetros)
Session
RequestURL PrintWriter RequestDispatcher
EncodeURL
(atributos) forward(…) include(…)
Invocación de otros recursos
• ServletContext.getRequestDispatcher(String url)
[Prepara un recurso de la aplicación para su
utilización subsiguiente en la sesión]
• RequestDispatcher.forward(request, response)
[Reenvía la solicitud. Antes de escribir en el
PrintWriter de la respuesta]
• RequestDispatcher.include(request, response)
[Solicita la respuesta y la añade a la propia]
• HttpServletResponse.sendRedirect(“String url”)
[Reenvia la solicitud a un recurso externo]
Ejercicios
• [SERVRED] Aplicación web que pide una
URL y si es de la UAM la muestra y si no,
no.
• [SERVFILTER] (Voluntario) Aplicación web
que permite gestionar un filtro de acceso a
dominios de Internet.
Eventos en el ciclo de vida de
Servlets
• Cada vez que se crea o se destruye un contexto
(ServletContext, HttpSession o ServletRequest)
o se modifica uno de sus atributos, se emite un
evento que reciben los objetos (listeners)
registrados para ello, ejecutando acciones
especificadas en el programa.
• Por ejemplo, un listener puede hacer que al
crearse una sesión se cree una conexión a una
base de datos y que todo cambio en un atributo
se traslade a ella.
• Los mecanismos anteriores se configuran
mediante el fichero web.xml.
Eventos en el ciclo de vida de
Servlets, II