0% encontró este documento útil (0 votos)
275 vistas43 páginas

Fundamentos de Java Servlets

Este documento describe los fundamentos de los servlets de Java. Los servlets son clases Java que generan dinámicamente páginas web y amplían la funcionalidad de un servidor web. Los servlets ofrecen ventajas como mejor rendimiento, simplicidad, sesiones HTTP, y acceso a la tecnología Java. Los servlets implementan métodos como init(), service(), y destroy() que son llamados por el motor de servlets en diferentes puntos del ciclo de vida del servlet.

Cargado por

Carmelo
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
275 vistas43 páginas

Fundamentos de Java Servlets

Este documento describe los fundamentos de los servlets de Java. Los servlets son clases Java que generan dinámicamente páginas web y amplían la funcionalidad de un servidor web. Los servlets ofrecen ventajas como mejor rendimiento, simplicidad, sesiones HTTP, y acceso a la tecnología Java. Los servlets implementan métodos como init(), service(), y destroy() que son llamados por el motor de servlets en diferentes puntos del ciclo de vida del servlet.

Cargado por

Carmelo
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 43

Fundamentos de Java Servlets

• para entender las JSP (javaServer Pages) es


preciso comprender la estructura que les sirve
de base
– los servlets de Java
• los servlets son clases java que amplian la
funcionalidad de un servidor Web mediante la
generación dinámica de páginas Web.
• un entorno de ejecución denominado motor
de servlets administra la carga y descarga del
servlet y trabaja con el servidor Web para
dirigir peticiones a los servlets y enviar la
respuesta a los clientes
• aparecen en 1997
• se han convertido en el entorno dominante de
la programación Java en servidor y en un
portal de uso generalizado para los servidores
de aplicaciones.
Ventajas
• Rendimiento.
– CGI (common GateWay Interface): las tecnologias
anteriores como la Interfaz de pasarela común
• inician un proceso por cada petición que les llega.
• los servlets se cargan cuando los solicitamos por
primera vez y permanecen en memoria.
– motor servlets carga un solo ejemplar o instancia de la clase
Servlet y le lanza peticiones empleando un conjunto de
subprocesos disponibles (threads o hilos)
– mejor del rendimiento es importante.
• Simplicidad
– los applets de Java del cleinte se ejecutan en una máquina
virtual proporcionada por el navegador Web.
– genera problemas de compatibilidad que incrementan la
complejidad y limitan la funcionalidad de los applets.
– los servlets simplifican pq se ejecutan en una máquina
virtual del entorno del servidor controlado y solo
necesitan el HTTP básico para comunicarse con sus
clientes.
– NO es preciso que el cliente tenga un software especial, ni
en caso de navegadores antiguos
• Sesiones HTTP
– aunque los servidores HTTP NO tienen capacidad
para recordar detalles de una petición previa del
mismo cliente, la interfaz API Servlet ofrece una
clase HttpSession que permite superar esta
limitación

– API: Application Programming Interface : Interfaz


de programación de aplicaciones
• Acceso a la tecnología Java
– al ser aplicaciones Java, los servlets tienen acceso
a todas las características Java
• uso de subprocesos
• acceso a redes
• conectividad a bases de datos
• las páginas JSP, que se convierten
automáticamente en servlets, heredan todas
estas ventajas.
Ciclo de vida del servlet
• como sus equivalentes applets del cliente, los
servlets ofrecen métodos a los que recurrimos
cuando ocurren eventos específicos en un
contexto más amplio.
• la programación en este entorno obliga a
escribir métodos predefinidos (retrollamada –
callback) a los que vamos llamando según el
programa que los gestiona los requiere
• un applet ofrece métodos como
– init
– start
– paint
– stop
– destroy

– a los que el entorno de ejecución del applet llama como respuesta a las
acciones realizadas por el usuario.
– la clase base java.applet.Applet ofrece implementaciones
predeterminadas para estos métodos
• solo sobreescribimos aquellos que ocurren durante los eventos con los que
estamos trabajando
• por ejemplo, debemos escribir un método init
si tenemos que crear componentes GUI
(Graphical User Interface)
• de forma similar, los servlets operan en el
contexto de un modelo de petición y
respuesta administrado por el motor de
servlets
• el motor de servlets se encarga de:
• cargar un servlet cuando lo solicitamos por
primera vez
• llamar al método init del servlet
• manejar todas las peticiones que reciba
llamando al método del servlet service
• llamar al metodo destroy de cada servlet al
terminar la ejecución
• igual que con los applets, hay clases base
estándar
– javax.servlet.GenericServlet
– javax.servlet.HttpServlet
• que implementan los métodos de retrollamada del
servlet.
• la programación de servlets consiste en subclasificar
una de estas clases y sobreescribir el método necesario
para llevar a cabo la tarea.
init
• cuando el motor de servlets recibe la petición
de un servlet, comprueba si el servlet ya está
cargado
• si no, el motor de servlets emplea un
clargador de clases para conseguir la clase
servlet concreta requerida en este caso y
después invoca a su constructor para obtener
un ejemplar del servlet.
• una vez cargado el servlet, pero antes de que
preste servicio a las peticiones, el motor de
servlets llama a un método de inicialización
con la firma
– public void init (ServletConfig config) throws
ServletException{

–}
• solo se llama a este método una vez, justo antes de
uqe el servlet se ponga en funcionamiento.
• el objeto ServletConfig da acceso al contexto del
servlet y a cualquier parámetro de inicialización
codificado para el servlet.
• el objeto config se guarda como una variable de
instancia
– esto lo hace el método init de GenericServlet
– por eso es importante llamar a super.init(config) desde el
método init() de cualquier subclase
• dentro del método init, el servlet puede realizar
cualquier tarea de arranque que sea necesaria
– establecimiento de conexiones a base de datos
• si hay algun error que inhabilite al sevlet para manejar
peticiones, se debe lanzar una UnavailableException.
– es una subclase de ServletException que puede incluir
opcionalmente el número de segundos durante los que se
espera que el servlet no esté disponible
– si no se especifica, se supone que el servlet no está disponible
nunca
• evita que las peticiones se dirijan al servlet
service
• tras init con éxito
• servlet preparado para aceptar peticiones
• de manera predeterminada solo se crea un
ejemplar del servlet y el motor de servlets
lanza cada petición al ejemplo en un
subproceso diferente
• el método del servlet al que llamamos tiene la
firma

– public void service(ServletRequest request,


ServletResponse response) throws
ServletException, IOException);
• el motor de servlets construye el objeto
ServletRequest que actúa como envoltorio
(wrapper) de la información sobre el cliente y
la petición.
• la proteccón incluye la identidad del sistema
remoto, los parámetros de la petición y
cualquier flujo de entrada relacionado con la
petición.
• el objeto ServletResponse ofrece medios para
que el servlet comunique sus resultados al
solcitante original.
• da métodos para abrir un flujo de salida y para
especificar el tipo y la longitud del contenido.
• aunque el método service() es importante, se usa
poco.
• la razón es que la mayoría de los servlets están
diseñados lpara operar en el entorno HTTP
– hay un paquete especializado javax.servlet.http
– la mayor parte de los servlets NO extienden directamente
javax.servlet.GenericServlet sino de su subclase
javax.servlet.http.HttpServlet
• esta subclase da métodos específicos para cada petición HTTP
– doGet maneja peticiones Get
– doPost maneja las post…y así…
• las firmas de estos métodos emplean
versiones específicas HTTP de los objetos de
petición y respuesta
– public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
SerlvetException, IOException;
• el método service(Request, Response) de
HttpServlet transforma los objetos de petición
y respuesta en sus equivalentes especificos
HTTP
• después llama a service(HttpServletRequest,
HttpServletResponse) que eximina y petición y
llama a doGet doPost u otro método
apropiado
• un servlet HTTP normal incluye la
sobreescritura de uno o más de estos métodos
subsidiarios, NO la sobreescritura de service()
destroy
• la especificación servlet permite a un motor de
servlets descargar un servlet en cualqueir
momento.
• esto se puede hacer para conservar los recursos
del sistema o como preparación para el cierre
del motor de servlets.
• el motor de servlets notifica a cada servlet
cargado que esto esá a punto de ocurrir
llamando al método destroy
• al sobreescribir destroy liberamos cualquier
recurso asignado durante init
– al llamar a destroy NO se descarga el servlet.
• esto solo puede hacer le motor de servlets
Ejemplo
• hacemos un servlet que permita crear una
tabla de conversión de datos.
Solución
• package eltuyo;

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class K2MServlet extends HttpServlet
{

•    private static final DecimalFormat FMT
      = new DecimalFormat("#0.00");

private static final String PAGE_TOP= “”


• + "<html>"
         + "<head>"
         + "<title>Fuel Efficiency Conversion Chart</title>"
         + "</head>"
         + "<body>"
         + "<center>"
         + "<h1>Fuel Efficiency Conversion Chart</h1>"
         + "<table border='1' cellpadding='3' cellspacing='0'>"
         + "<tr>"
         + "<th>Kilometers per Liter</th>"
         + "<th>Miles per Gallon</th>"
         + "</tr>"
;

• private static final String PAGE_BOTTOM = “”


• +"</table>"
         + "</center>"
         + "</body>"
         + "</html>"

;
•    public void doGet(
         HttpServletRequest request,
         HttpServletResponse response)
      throws ServletException, IOException
   {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      out.println (PAGE_TOP );

      for (double kmpl = 5; kmpl <= 20; kmpl += 1.0) {
         double mpg = kmpl * 2.352146;
         out.println ( "<tr>"
            + "<td align='right'>" + FMT.format(kmpl) + "</td>"
            + "<td align='right'>" + FMT.format(mpg) + "</td>"
            + "</tr>"
            );
      }

      // Generate footer

      out.println (  PAGE_BOTTOM );
   }
}

           
         
    
    
  
• import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

• Estas instrucciones identifican ante el compilador que


vamos a utilizar las clases de los paquetes de servlets
genéricos y específicos HTTP
• las instrucciones import no son estrictamente necesiarias,
pero así hacemos referencia a las clases más fácilmente
• public class K2MServlet extends HttpServlet

– se necesita al menos un servlet para implementar la


interfaz javax.servlet.Servlet
– para simplificar la escritura del servlet, la API Servlet
nos da una implmentación básica de esta interfaz
llamada GenericServlet.
– tb nos da una subclase específica para HTTP
HttpServlet uqe es la clase base de uso más
frecuente para los servlets.
•  public void doGet(
         HttpServletRequest request,
         HttpServletResponse response)
      throws ServletException, IOException
   
– nuestro servlet NO presenta requisitos especiales para las
acciones de arranque y terminación, así que solo
sobreescribimos el método doGet.
– invocamos a este método desde el método service() de la
superclase HttpServlet si el método de la petición es GET
• response.setContentType("text/html");

– antes de escribir los resultados al cliente,


necesitamos especificar las cabeceras HTTP que
queremos enviar.
– en nuestro caso, la única es Content-Type a la que
asignamos text-html
• PrintWriter out = response.getWriter();

      
– la creación de una página Web consiste en escribir instrucciones
HTML a un flujo de salida asociado a la petición HTTP.
– este flujo de salida se puede obtener del objeto response,
empleando su método getOutputStream() o su método
getWriter()
• depende si vamos a escribir datos binarios o caracteres.
• el servlet debe escoger uno de estos dos métodos
– no puede invocar ambos
– si escribirmos HTML ordinario usamos getWriter para obtener un escrito de
caracteres
• ahora a imprimir nuestra tabla HTML.
• hemos codificado la cabecera y los pies de
página en las variables de cadena estáticas
PAGE_TOP Y PAGE_BOTTOM
• imprimimos la tabla mediante un bucle que
afecta al intervalo de conversión
• out.println(PAGE_TOP);
         
• el bucle for

• out.println(PAGE_BOTTOM);
for (double kmpl = 5; kmpl <= 20; kmpl += 1.0) 
{
         double mpg = kmpl * CONVERSION_FACT
OR;
         out.println
            ( "<tr>"
            + "<td align='right'>" + FMT.format(kmpl
) + "</td>"
            + "<td align='right'>" + FMT.format(mpg)
 + "</td>"
            + "</tr>"
            );
      }
• para ejecutar el servlet, primero debemos
compilarlo.
• podemos usar CLASSPATH.
• después, en función del motor de servlets,
podríamos necesitar describir el servlet en
descriptor de despliegue de la aplicación Web
– /WEB-INF/web.xml
• para un servlet sencillo, la descrpción solo es una
etiqueta <servlet> con su etiqueta hija <servlet-name>
y elementos <servlet-class>
• para modificar el fichero web.xml necesitamos
reiniciar el motor de servlets antes de que los
cambios tengas efecto.
• en Eclipse debemos guardar en

• D:\Archivos de programa\Apache Software


Foundation\Tomcat
6.0\webapps\examples\WEB-INF\classes

También podría gustarte