Fundamentos de Java Servlets

download Fundamentos de Java Servlets

of 43

Transcript of Fundamentos de Java Servlets

  • 8/9/2019 Fundamentos de Java Servlets

    1/43

    Fundamentos de Java Servlets

  • 8/9/2019 Fundamentos de Java Servlets

    2/43

    para entender las JSP (javaServer Pages) es

    preciso comprender la estructura que les sirve

    de base

    los servlets de Java

  • 8/9/2019 Fundamentos de Java Servlets

    3/43

    los servlets son clases java que amplian la

    funcionalidad de un servidor Web mediante la

    generacin dinmica de pginas Web.

    un entorno de ejecucin 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

  • 8/9/2019 Fundamentos de Java Servlets

    4/43

    aparecen en 1997

    se han convertido en el entorno dominante de

    la programacin Java en servidor y en unportal de uso generalizado para los servidores

    de aplicaciones.

  • 8/9/2019 Fundamentos de Java Servlets

    5/43

    Ventajas

    Rendimiento.

    CGI (common GateWay Interface): las tecnologias

    anteriores como la Interfaz de pasarela comn

    inician un proceso por cada peticin 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 desubprocesos disponibles (threads o hilos)

    mejor del rendimiento es importante.

  • 8/9/2019 Fundamentos de Java Servlets

    6/43

    Simplicidad los applets de Java del cleinte se ejecutan en una

    mquina virtual proporcionada por el navegador Web.

    genera problemas de compatibilidad que incrementanla complejidad y limitan la funcionalidad de losapplets.

    los servlets simplifican pq se ejecutan en una mquinavirtual del entorno del servidor controlado y solonecesitan el HTTP bsico para comunicarse con susclientes.

    NO es preciso que el cliente tenga un softwareespecial, ni en caso de navegadores antiguos

  • 8/9/2019 Fundamentos de Java Servlets

    7/43

    Sesiones HTTP

    aunque los servidores HTTP NO tienen capacidad

    para recordar detalles de una peticin previa del

    mismo cliente, la interfaz API Servlet ofrece una

    clase HttpSession que permite superar esta

    limitacin

    API: Application Programming Interface : Interfaz

    de programacin de aplicaciones

  • 8/9/2019 Fundamentos de Java Servlets

    8/43

    Acceso a la tecnologa Java

    al ser aplicaciones Java, los servlets tienen acceso

    a todas las caractersticas Java

    uso de subprocesos

    acceso a redes

    conectividad a bases de datos

  • 8/9/2019 Fundamentos de Java Servlets

    9/43

    las pginas JSP, que se convierten

    automticamente en servlets, heredan todas

    estas ventajas.

  • 8/9/2019 Fundamentos de Java Servlets

    10/43

    Ciclo de vida del servlet

    como sus equivalentes applets del cliente, los

    servlets ofrecen mtodos a los que recurrimos

    cuando ocurren eventos especficos en un

    contexto ms amplio.

    la programacin en este entorno obliga a

    escribir mtodos predefinidos (retrollamada

    callback) a los que vamos llamando segn el

    programa que los gestiona los requiere

  • 8/9/2019 Fundamentos de Java Servlets

    11/43

    un applet ofrece mtodos como init

    start

    paint

    stop

    destroy

    a los que el entorno de ejecucin del applet llama como

    respuesta a las acciones realizadas por el usuario. la clase base java.applet.Applet ofrece implementacionespredeterminadas para estos mtodos

    solo sobreescribimos aquellos que ocurren durante los eventoscon los que estamos trabajando

  • 8/9/2019 Fundamentos de Java Servlets

    12/43

    por ejemplo, debemos escribir un mtodo init

    si tenemos que crear componentes GUI

    (Graphical User Interface)

  • 8/9/2019 Fundamentos de Java Servlets

    13/43

    de forma similar, los servlets operan en el

    contexto de un modelo de peticin y

    respuesta administrado por el motor de

    servlets

    el motor de servlets se encarga de:

  • 8/9/2019 Fundamentos de Java Servlets

    14/43

    cargar un servlet cuando lo solicitamos por

    primera vez

    llamar al mtodo init del servlet manejar todas las peticiones que reciba

    llamando al mtodo del servlet service

    llamar al metodo destroy de cada servlet alterminar la ejecucin

  • 8/9/2019 Fundamentos de Java Servlets

    15/43

    igual que con los applets, hay clases base

    estndar

    javax.servlet.GenericServlet

    javax.servlet.HttpServlet

    que implementan los mtodos de retrollamada del

    servlet.

    la programacin de servlets consiste en subclasificaruna de estas clases y sobreescribir el mtodo necesario

    para llevar a cabo la tarea.

  • 8/9/2019 Fundamentos de Java Servlets

    16/43

    init

    cuando el motor de servlets recibe la peticin

    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

    despus invoca a su constructor para obtenerun ejemplar del servlet.

  • 8/9/2019 Fundamentos de Java Servlets

    17/43

    una vez cargado el servlet, pero antes de que

    preste servicio a las peticiones, el motor de

    servlets llama a un mtodo de inicializacin

    con la firma

    public void init (ServletConfig config) throws

    ServletException{

    }

  • 8/9/2019 Fundamentos de Java Servlets

    18/43

    solo se llama a este mtodo una vez, justo antesde uqe el servlet se ponga en funcionamiento.

    el objeto ServletConfig da acceso al contexto del

    servlet y a cualquier parmetro de inicializacincodificado para el servlet.

    el objeto config se guarda como una variable deinstancia

    esto lo hace el mtodo init de GenericServlet

    por eso es importante llamar a super.init(config)desde el mtodo init() de cualquier subclase

  • 8/9/2019 Fundamentos de Java Servlets

    19/43

    dentro del mtodo init, el servlet puederealizar cualquier tarea de arranque que seanecesaria

    establecimiento de conexiones a base de datos si hay algun error que inhabilite al sevlet para manejarpeticiones, se debe lanzar una UnavailableException.

    es una subclase de ServletException que puede incluiropcionalmente el nmero de segundos durante los que seespera que el servlet no est disponible

    si no se especifica, se supone que el servlet no est disponiblenunca

    evita que las peticiones se dirijan al servlet

  • 8/9/2019 Fundamentos de Java Servlets

    20/43

    service

    tras init con xito

    servlet preparado para aceptar peticiones

    de manera predeterminada solo se crea unejemplar del servlet y el motor de servlets

    lanza cada peticin al ejemplo en un

    subproceso diferente

  • 8/9/2019 Fundamentos de Java Servlets

    21/43

    el mtodo del servlet al que llamamos tiene la

    firma

    public void service(ServletRequest request,

    ServletResponse response) throws

    ServletException, IOException);

  • 8/9/2019 Fundamentos de Java Servlets

    22/43

    el motor de servlets construye el objeto

    ServletRequest que acta como envoltorio

    (wrapper) de la informacin sobre el cliente y

    la peticin.

    la proteccn incluye la identidad del sistema

    remoto, los parmetros de la peticin y

    cualquier flujo de entrada relacionado con lapeticin.

  • 8/9/2019 Fundamentos de Java Servlets

    23/43

    el objeto ServletResponse ofrece medios para

    que el servlet comunique sus resultados al

    solcitante original.

    da mtodos para abrir un flujo de salida y para

    especificar el tipo y la longitud del contenido.

  • 8/9/2019 Fundamentos de Java Servlets

    24/43

    aunque el mtodo service() es importante, se usapoco.

    la razn es que la mayora de los servlets estn

    diseados lpara operar en el entorno HTTP hay un paquete especializado javax.servlet.http

    la mayor parte de los servlets NO extiendendirectamente javax.servlet.GenericServlet sino de susubclase javax.servlet.http.HttpServlet

    esta subclase da mtodos especficos para cada peticinHTTP

    doGet maneja peticiones Get

    doPost maneja las posty as

  • 8/9/2019 Fundamentos de Java Servlets

    25/43

    las firmas de estos mtodos emplean

    versiones especficas HTTP de los objetos de

    peticin y respuesta

    public void doGet(HttpServletRequest request,

    HttpServletResponse response) throws

    SerlvetException, IOException;

  • 8/9/2019 Fundamentos de Java Servlets

    26/43

    el mtodo service(Request, Response) de

    HttpServlet transforma los objetos de peticin

    y respuesta en sus equivalentes especificos

    HTTP

    despus llama a service(HttpServletRequest,

    HttpServletResponse) que eximina y peticin y

    llama a doGet doPost u otro mtodoapropiado

  • 8/9/2019 Fundamentos de Java Servlets

    27/43

    un servlet HTTP normal incluye la

    sobreescritura de uno o ms de estos

    mtodos subsidiarios, NO la sobreescritura de

    service()

  • 8/9/2019 Fundamentos de Java Servlets

    28/43

    destroy

    la especificacin servlet permite a un motorde servlets descargar un servlet en cualqueirmomento.

    esto se puede hacer para conservar losrecursos del sistema o como preparacin parael cierre del motor de servlets.

    el motor de servlets notifica a cada servletcargado que esto es a punto de ocurrirllamando al mtodo destroy

  • 8/9/2019 Fundamentos de Java Servlets

    29/43

    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

  • 8/9/2019 Fundamentos de Java Servlets

    30/43

  • 8/9/2019 Fundamentos de Java Servlets

    31/43

    Solucin

    package eltuyo;

    importjava.io.*;importjava.text.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.htt p.*;

    publicclass K2MServlet extends HttpServlet{

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

    private static final String PAGE_TOP=

    + ""+ ""+ "Fuel Efficiency Conversion Chart"+ ""+ ""+ ""+ "Fuel Efficiency Conversion Chart"+ ""+ ""+ "Kilometers per Liter"+ "Miles per Gallon"+ ""

    ;

    private static final String PAGE_BOTTOM =

    +""

    + ""+ ""+ ""

    ;

    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 ; k mpl

  • 8/9/2019 Fundamentos de Java Servlets

    32/43

    importjava.io.*;importjava.text.*;importjava.util.*;importjavax.servlet.*;

    importjavax.servlet.http.*;

    Estas instrucciones identifican ante el compilador quevamos a utilizar las clases de los paquetes de servletsgenricos y especficos HTTP

    las instrucciones import no son estrictamentenecesiarias, pero as hacemos referencia a las clasesms fcilmente

  • 8/9/2019 Fundamentos de Java Servlets

    33/43

    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 implmentacin bsica de estainterfaz llamada GenericServlet.

    tb nos da una subclase especfica para HTTPHttpServlet uqe es la clase base de uso msfrecuente para los servlets.

  • 8/9/2019 Fundamentos de Java Servlets

    34/43

    public void doGet(HttpServletRequest request,HttpServletResponse response)

    throws ServletException, IOException

    nuestro servlet NO presenta requisitos especiales paralas acciones de arranque y terminacin, as que solosobreescribimos el mtodo doGet.

    invocamos a este mtodo desde el mtodo service()de la superclase HttpServlet si el mtodo de lapeticin es GET

  • 8/9/2019 Fundamentos de Java Servlets

    35/43

    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

  • 8/9/2019 Fundamentos de Java Servlets

    36/43

    PrintWriter out = response.getWriter();

    la creacin de una pgina Web consiste en escribir

    instrucciones HTML a un flujo de salida asociado a lapeticin HTTP.

    este flujo de salida se puede obtener del objeto response,empleando su mtodo getOutputStream() o su mtodogetWriter()

    depende si vamos a escribir datos binarios o caracteres.

    el servlet debe escoger uno de estos dos mtodos no puede invocar ambos

    si escribirmos HTML ordinario usamos getWriter para obtener un escritode caracteres

  • 8/9/2019 Fundamentos de Java Servlets

    37/43

    ahora a imprimir nuestra tabla HTML.

    hemos codificado la cabecera y los pies de

    pgina en las variables de cadena estticasPAGE_TOP Y PAGE_BOTTOM

    imprimimos la tabla mediante un bucle que

    afecta al intervalo de conversin

  • 8/9/2019 Fundamentos de Java Servlets

    38/43

    out.println(PAGE_TOP);

    el bucle for

    out.println(PAGE_BOTTOM);

  • 8/9/2019 Fundamentos de Java Servlets

    39/43

    for (double kmpl = 5 ; k mpl

  • 8/9/2019 Fundamentos de Java Servlets

    40/43

    para ejecutar el servlet, primero debemos

    compilarlo.

    podemos usar CLASSPATH.

  • 8/9/2019 Fundamentos de Java Servlets

    41/43

    despus, en funcin del motor de servlets,

    podramos necesitar describir el servlet en

    descriptor de despliegue de la aplicacin Web

    /WEB-INF/web.xml

    para un servlet sencillo, la descrpcin solo es una

    etiqueta con su etiqueta hija

    y elementos

  • 8/9/2019 Fundamentos de Java Servlets

    42/43

    para modificar el fichero web.xml necesitamos

    reiniciar el motor de servlets antes de que los

    cambios tengas efecto.

  • 8/9/2019 Fundamentos de Java Servlets

    43/43

    en Eclipse debemos guardar en

    D:\Archivos de programa\Apache SoftwareFoundation\Tomcat

    6.0\webapps\examples\WEB-INF\classes