miércoles, 9 de octubre de 2013

Servlet: Funciones extendidas



Objetivos:

  • Escribir servlets que recuperen datos de formularios.
  • Comprender la cooperación entre servlets.
  • Comprender la comunicación entre servlets.
  • Implementar sesiones HTTP.

Equipos, Materiales, Programas y Recursos:

  • PC con Sistema Operativo con soporte a Java.
  • IDE para Java
  • Navegador Web (recomendable Firefox)
  • Contenedor de Servlets (recomendable Tomcat)

Introducción:

Los contenedores de Servlets son los servidores donde se ejecutarán los Servlets. Los Servlets son los componentes de Java que se ejecutan en el servidor y construyen páginas Web. En el presente laboratorio se escribirán los primeros servlets que nos permitirán conocer su estructura.

Preparación:

El alumno debe haber revisado previamente el texto del curso, así como también, las presentaciones dadas en la clase de teoría.

Procedimiento y Resultados:


1.    recuperar parámetros POR POST

ingreso.html
<html>
<body>
     <form action="RecuperaPostServlet" method="post">
           Nombre : <input name="nombre" type="text"/>
          Apellidos:<input name="apellido" type="text"/>
          <input type="submit" name="aceptar" value="Aceptar"/>
      </form>
</body>
</html>

RecuperaPostServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");

        String nom = request.getParameter("nombre");
        String ape = request.getParameter("apellido");

        out.println("Bienvenido "+ nom +" "+ ape);

        out.println("</body>");
        out.println("</html>");
        out.close();
}
...


2.    recuperar parámetros por GET

    RecuperaGetServlet.java
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println("<html><body>");
      out.println("param1: " + request.getParameter(“param1”));
      out.println("param2: " + request.getParameter(“param2”));
      out.println("param3: " + request.getParameter(“param3”));
      out.println("</body></html>");
  }

            Nota: Ejecutar el servlet escribiendo en la dirección URL:
http://localhost:808_/................../RecuperaGetServlet?param1=java&param2=php&param3=net



  1. servlet de suma

    operaciones.html
<html>
  <body>

    <form method="post" action="SumaServlet">
        Operador 1: <input type="text" name="operador1" size="4" maxlength="4"/><br/>
        Operador 2: <input type="text" name="operador2" size="4" maxlength="4"/><br/>
        <input type="submit" name="operacion" value="Realizar la suma"/>
    </form>
   
    </body>
</html>


SumaServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       
        String op1 = request.getParameter("operador1");
        String op2 = request.getParameter("operador2");
       
        double d1 = Double.parseDouble(op1);
        double d2 = Double.parseDouble(op2);
       
        double resultado = d1 + d2;
       
        PrintWriter pw = response.getWriter();
        pw.println("<html><body>");
        pw.println("El resultado es: " + resultado);
        pw.println("</body></html>");
      
}


  1. ejercicio: servlet de operaciones aritméticas




  1. SERVLET DE ENCUESTA: Recuperando valores múltiples

encuesta.html
<html>
    <body>
    <h2>Encuesta</h2>
        <form action="RecuperaEncuestaServlet" method="post">
            <h4>¿Qué deportes practicas?</h4>
            <input type="checkbox" name="deporte" value="f"/>Fútbol
            <input type="checkbox" name="deporte" value="b"/>Basquet
            <input type="checkbox" name="deporte" value="t"/>Tenis
            <h4>¿Qué sistema operativo conoces?</h4>
            <select name="so" multiple>
                <option value="win">Windows
                <option value="lin">Linux
                <option value="mac">MacOSX
            </select>
            <br/>
            <input type="submit" value="Enviar encuesta"/>
        </form>
    </body>
</html>


RecuperaEncuestaServlet.java
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
       
        // Recuperando deportes
        String[] deportes = request.getParameterValues("deporte");
        for(int i=0; i<deportes.length; i++){
            out.println("Te gusta el " + deportes[i] + "<br/>");
        }
       
        // Recuperando sistemas operativos
        String[] sos = request.getParameterValues("so");
        for(int u=0; u<sos.length; u++){
            out.println("Usas " + sos[u] + "<br/>");
        }
       
        out.println("</body></html>");
    }





  1. cooperación entre servlet’s

·         incluyendo una petición

PrincipalServlet.java
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h3>Pagina principal</h3>");
        RequestDispatcher rd = request.getRequestDispatcher("/TablaServlet");
        rd.include(request, response);
        out.println("</body></html>");
        out.close();
    }

TablaServlet.java
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("<table border='1'>");
        out.println("<tr><th>Nombre</th><th>Clave</th>");
        out.println("<tr><td>drodriguez</td><td>tecsup</td></tr>");
        out.println("</table>");
        out.close();
    }

·         reenviando una petición

PrincipalServlet.java
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h3>Pagina principal</h3>");
        RequestDispatcher rd = request.getRequestDispatcher("/TablaServlet");
        rd.forward(request, response);
        out.println("</body></html>");
        out.close();
    }

TablaServlet.java
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("<table border='1'>");
        out.println("<tr><th>Nombre</th><th>Clave</th>");
        out.println("<tr><td>drodriguez</td><td>tecsup</td></tr>");
        out.println("</table>");
        out.close();
    }
  1. comunicaciÓn entre servlet’S

UnoServlet.java
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // Guardando datos en CONTEXT (APPLICATION)
        ServletContext sc = this.getServletContext();
        sc.setAttribute("curso", "programacion3");
       
        // Guardando datos en REQUEST
        request.setAttribute("ciclo", "quinto");

        RequestDispatcher rd = request.getRequestDispatcher("/DosServlet");
        rd.forward(request, response);
    }

DosServlet.java
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       

        // Recuperar el dato del CONTEXT (APPLICATION)
        ServletContext sc = this.getServletContext();
        String curso = (String)sc.getAttribute("curso");
       
        // Recuperar el dato del REQUEST
        String ciclo = (String)request.getAttribute("ciclo");
       
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("El curso es: " + curso);
        out.println("<br/>");
        out.println("El ciclo es: " + ciclo);
        out.println("</body></html>");
       
        out.close();
    }
        

  1. redireccionamiento DE SERVLET’S

RedireccionaServlet.java
public void doGet (HttpServletRequest req, HttpServletResponse res)  throws ServletException, IOException {
       response.sendRedirect("http://www.cnn.com");
}


  1. ENVIANDO CÓDIGOS DE ERROR

    EnviaErrorServlet.java
public void doGet(HttpServletRequest req, HttpServletResponse res)  throws ServletException, IOException {
       response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
       // Luego probar:
       // response.sendError(401);
       // response.sendError(403, “Eres un intruso”);
}
     

           
  1. Servletconfig: VALORES DE INICIO EN LOS SERVLETS

·         Orden de las etiquetas del web.xml.

<!ELEMENT web-app (icon?, display-name?, description?, distributable?, context-
param*, filter*, filter-mapping*, listener*, servlet*, servlet-mapping*,
session-config?, mime-mapping*, welcome-file-list?, error-page*,
taglib*, resource-env-ref*, resource-ref*, security-constraint*, login-config?,
security-role*, env-entry*, ejb-ref*, ejb-local-ref*)>

·         Orden de las etiquetas dentro de <servlet>

<!ELEMENT servlet (icon?, servlet-name, display-name?,
description?, (servlet-class|jsp-file), init-param*,
load-on-startup?, security-role-ref*)>


LeerValoresInicioServlet.java
package lab2.servlets;


public void doGet (HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
       ServletConfig config = getServletConfig();
       String region              = config.getInitParameter("region");
       String limit                  = config.getInitParameter("limit");

        PrintWriter pw = response.getWriter();
        pw.println("<html><body>");
        pw.println("La región es: " + region);
        pw.println("El límite es: " + limit);
        pw.println("</body></html>");
        pw.close();
}


Agregar en el web.xml
<servlet>
    <servlet-name>peru-sales</servlet-name>
    <servlet-class>lab2.servlets.LeerValoresInicioServlet </servlet-class>
    <init-param>
       <param-name>region</param-name>
       <param-value>PERU</param-value>
    </init-param>
    <init-param>
       <param-name>limit</param-name>
       <param-value>200</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>usa-sales</servlet-name>
    <servlet-class>lab2.servlets.LeerValoresInicioServlet </servlet-class>
    <init-param>
       <param-name>region</param-name>
       <param-value>USA</param-value>
    </init-param>
    <init-param>
       <param-name>limit</param-name>
       <param-value>550</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

  <servlet-mapping>
    <servlet-name>peru-sales</servlet-name>
    <url-pattern>/VentasPeru</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>usa-sales</servlet-name>
    <url-pattern>/VentasUSA</url-pattern>
  </servlet-mapping>



  1. ServletContext - GETrESOURCE()

EnviarPDFServlet.java
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=texto.pdf" );    
OutputStream os = response.getOutputStream();
//1K buffer
byte[] bytearray = new byte[1024];
ServletContext context = getServletContext();
URL url = context.getResource("/texto.pdf");
InputStream is = url.openStream();
int bytesread = 0;
while( (bytesread = is.read(bytearray) ) != -1 ) {
    os.write(bytearray, 0, bytesread);
}
         os.flush();
is.close();
}
12.  SERVLETCONTEXT – GETINITPARAMETER()

Agregar en el web.xml
  <context-param>
    <param-name>autor</param-name>
    <param-value>esaavedra@peru.edu.pe</param-value>
  </context-param>

LeerParametroDelContextServlet.java
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
    ServletContext sc = getServletContext();
    String autor = sc.getInitParameter("autor");

    PrintWriter out = response.getWriter();
    out.println("El autor es: " + autor);
    out.flush();
  }

No hay comentarios:

Publicar un comentario