Download ESCOM Escuela Superior de Cómputo Materia: Desarrollo de

Document related concepts
no text concepts found
Transcript
ESCOM Escuela Superior de Cómputo
Materia:
Tema:
Desarrollo de Aplicaciones Web.
Uso de GET, POST, doGet(), doPost().
Introducción.
Un servlet una clase que implanta la interfaz Servlet, que se encuentra dentro del paquete javax.servlet, que hereda
de la clase GenericServlet. GenericServlet es independiente del protocolo utilizado, si el servlet solamente va
a utilizar HTTP se puede heredar de la clase HttpServlet. Los servlets generan páginas web de forma dinámica a
partir de los parámetros de la petición que envíe el navegador web:
 Un usuario solicita una página JSP o un servlet.
 El servidor carga e inicializa el servlet, llamando a init().
 El servlet maneja cero o más peticiones del cliente, llamando a doGet (), doPost (), u otro.
 Se crea una cookie (pero se pueden utilizar otros métodos) en el navegador del usuario, con un identificador aleatorio.
 En el JSP o servlet se pueden guardar valores cualesquiera que podrán ser vistos por las demás páginas JSP o servlets
de la aplicación que visite el usuario.
 Si el usuario visita otra de las páginas se puede obtener el valor que se guarda en la sesión.
 El servidor elimina el servlet, llamando a destroy().
PARTE I.
Para iniciar con el código del servlet, se indican los paquetes necesarios:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
La clase que implante el servlet debe heredar de
javax.servlet.http.HttpServlet, de la siguiente manera:
javax.servlet.HttpServlet,
o
de
public class ServletBasico extends HttpServlet{
:
public void init(){
System.out.println(“Se inicializa el servlet”);
}
public void init(ServletConfig conf) throws ServletException{
super.init(conf);
}
:
}
En esta clase se debe codificar al menos un método, por ejemplo doGet():
public void
IOException{
:
}
doGet(HttpServletRequest
req,
HttpServletResponse
res)
throws
ServletException,
Los dos parámetros representan los streams de datos intrínsecos de petición y respuesta.
Se define una clase PrintWriter para asociar el flujo de salida:
PrintWriter out = response.getWriter();
String a, b;
int x, y, resultado;
a = request.getParameter(“a”);
b = request.getParameter(“b”);
M. en C. Alejandro Cifuentes A.
Página 1
ESCOM Escuela Superior de Cómputo
, donde getParameter() regresa una cadena. Para manejar los resultados:
try{
x = Integer.parseInt(a);
y = Integer.parseInt(b);
resultado = x + y;
} catch(Exception e){
e.printStackTrace();
out.println(“Error al recibir parámetros con GET”);
out.print(e);
out.close();
return;
}
Se indica el tipo de contenido MIME con “text/html”, “images.jpeg” o “application/x-gzip”:
response.setContentType(“text/html”);
Para la apariencia de la página web se utiliza el método println():
out.println(“<html>”);
out.println(“<head><title>Un servlet básico</title></head>”);
out.println(“<body>”);
out.println(“<h1>Esta es una prueba de un servlet con GET</h1>”);
out.println(“<h1>La suma de “ + x + “ + “ + y + “ = “ + resultado + “</h1>”);
out.println(“</body></html>”);
out.close();
}
El código de doPost() es el siguiente:
public void
doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException{
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
String a, b;
int x, y, resultado;
a = request.getParameter(“a”);
b = request.getParameter(“b”);
try{
x = Integer.parseInt(a);
y = Integer.parseInt(b);
resultado = x - y;
} catch(Exception e){
e.printStackTrace();
out.println(“Error al recibir parámetros con POST”);
out.print(e);
out.close();
return;
}
out.println(“<html>”);
out.println(“<head><title>Un servlet básico</title></head>”);
out.println(“<body>”);
out.println(“<h1>Esta es una prueba de un servlet con POST</h1>”);
out.println(“<h1>La resta de “ + x + “ - “ + y + “ = “ + resultado + “</h1>”);
out.println(“</body></html>”);
out.close();
}
Los métodos se pueden utilizar desde un archivo HTML.
Para el método GET, el código de doGet.html es:
M. en C. Alejandro Cifuentes A.
Página 2
ESCOM Escuela Superior de Cómputo
<html>
<head><title>Servlet con GET</title></head>
<body>
<h1>Suma de dos enteros</h1>
<form action=”/ServletBasico” method=”GET”>
<p>Numero a = <input type=”text” name=”a”></p>
<p>Numero b = <input type=”text” name=”b”></p>
<p><input type=”submit” value=”Hacer suma”></p>
</form>
</body></html>
Para el método POST, el código de doPost.html es:
<html>
<head><title>Servlet con POST</title></head>
<body>
<h1>Suma de dos enteros</h1>
<form action=”/ServletBasico” method=”POST”>
<p>Numero a = <input type=”text” name=”a”></p>
<p>Numero b = <input type=”text” name=”b”></p>
<p><input type=”submit” value=”Hacer resta”></p>
</form>
</body></html>
Es importante que el valor del atributo name sea el mismo utilizado en el método getParameter() en el servlet.
También en el código del servlet se sobrecargan los siguientes métodos:
public String getServletInfo(){
return “Descripcion sencilla del servlet”;
}
public void destroy(){
System.out.println(“Servlet destruido”);
}
Se configura un descriptor de despliegue en un archivo web.xml, que indica los servlets de la aplicación web y la URL en
la cual se atienden las peticiones.
<?xml versión=”1.0” encoding=”ISO-8859-1”?>
<!DOCTYPE web-app
PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”
“http://java.sun.com/dtd/web-app_2_3.dtd”>
<?--Información -->
<web-app>
<description>Configuración de un servidor de aplicaciones</description>
<display-name> Ejemplo de un Servlet</display-name>
<servlet>
<servlet-name>ServletBasico</servlet-name>
<servlet-class>ServletBasico</servlet-class>
</servlet>
<servelt-mapping>
<servlet-name>ServletBasico</servlet-name>
<url-pattern>/servlet/ServletBasico</url-pattern>
</servlet-mapping>
</web-app>
La etiqueta <servlet-mapping> indica que para llamar al servlet se hace a través de un directorio virtual
/servlet/, por ejemplo, <url-pattern>/servlet/ServletBasico</url-pattern>.
M. en C. Alejandro Cifuentes A.
Página 3
ESCOM Escuela Superior de Cómputo
Tomcat buscará el archivo ServletBasico.class dentro de la carpeta classes. Ahora, se compila el archivo
ServletBasico.java:
C:\...\javac –cp ${CATALINA_HOME}/lib/servlet-api.java;.ServletBasico.java
Donde ${CATALINA_HOME} es el directorio del servidor Tomcat, por ejemplo G:/apache-tomcat-6.0.24
Se copia el archivo ServletBasico.class a la carpeta:
${CATALINA_HOME}/webapps/ROOT/WEB-INF/classes.
Si la carpeta no existe en ese directorio, se debe crear manualmente.
Antes de arrancar el servidor, copiar los archivos doPost.html y doGet.html dentro de la carpeta:
${CATALINA_HOME}/webapps/ROOT/
Ejecución del servlet:
El servlet se puede acceder en las siguientes formas:
http://servidor:8080/ServletBasico
para el archivo JSP
Si el servlet se guarda en otra carpeta:
http://localhost:8080/servlets/servlet/ServletBasico
Si el servlet se invoca desde una página HTML:
http://servidor:8080/doGet.html
http://servidor:8080/doPOst.html
para el archivo HTML
para el archivo HTML
Algunos métodos de la clase HttpServlet son:
init(), llamado solamente en la inicialización del servlet.
destroy(), llamado cuando se destruye la instancia del servlet.
service(), no se puede sobrecargar.
doGet(), doPost(), doPut(), doDelete(), doOptions(), doTrace(), llamados según el tipo de petición HTTP.
getServletInfo(), regresa información sobre el servlet.
getServletName(), regresa el nombre del servlet, independientemente del nombre de la clase.
getInitParameter(), regresa los parámetros de inicialización.
getInitParameterNames(), regresa una enumeración de los nombres de esos parámetros.
PARTE II.
Para facilitar el uso de Java desde la consola de comandos se puede modificar el PATH del sistema agregando la ruta del
kit de desarrollo.
Opción 1:
i. seleccionando Equipo o Mi PC y digitar clic derecho.
ii. Seleccionar las Propiedades>Seleccionar Opciones avanzada del sistema>Propiedades del
sistema>Variables de entorno:
M. en C. Alejandro Cifuentes A.
Página 4
ESCOM Escuela Superior de Cómputo
iii. Ahora, se modifica o agrega la variable PATH:
 Si la variable PATH existe, se selecciona y luego se digita en Editar o Modificar. En el campo de texto se
ingresa, al inicio, la ruta del entorno Java y enseguida se le separa con punto y coma (;) como se indica:
C:\Program Files\Java\jdk1.6.0_23\bin;restoDeLosValores...

Si la variable PATH no existe, se selecciona Nueva y en el campo Nombre de la variable se ingresa PATH
y en Valor de variable se ingresa la ruta del entorno Java, como se indica:
C:\Program Files\Java\jdk1.6.0_23\bin
M. en C. Alejandro Cifuentes A.
Página 5
ESCOM Escuela Superior de Cómputo
Seleccionar Aceptar para guardar los cambios y también cerrar las ventanas abiertas.
Opción 2:
Dependiendo de la versión del sistema operativo Windows instalado, otra opción de configuración es la creación de la
variable de entorno JAVA_HOME y CATALINA_HOME, la primera con la ruta del JDK que se instaló previamente y la
segunda con la ruta de Tomcat:
Se ejecuta el archivo startup.bat localizado en la carpeta bin localizado en los subdirectorios de la instalación de
Tomcat, por ejemplo dentro de C:\Tomcat\bin.
Para compilar, en el CLASSPATH debe estar el archivo servlet.jar, en el cual se encuentra el paquete
javax.servlet y se encontrará en el subdirectorio lib de Tomcat, cuya ruta es similar a C:\Tomcat\lib\.
Para la ejecución del servlet, éste se debe agregar al contenedor de servlets; es decir, copiar el
ServletBasico.class
a
la
ruta
de
las
clases
compiladas
C:\Tomcat\webapps\servlets\WEB_INF\classes
(o
~\Tomcat\webapps\servlets\WEBINF\classes).
Dentro de la carpeta C:\Tomcat\webapps\ pueden existir varias aplicaciones con servlets y lo que las distingue es
este nombre junto con los dos parámetros WEB-INF\classes, los cuales deben incluirse al final. Por ejemplo, la ruta
puede ser C:\Tomcat\webapps\MiCarpeta\WEB-INF\classes.
Para comprobar que el compilador y la máquina virtual de Java funcionan correctamente, en una ventana de consola se
ingresa:
javac –version
java – versión
NOTA: Desarrollar un reporte completamente documentado y detallado, incluyendo las pantallas, con todas las
incidencias del desarrollo de la práctica. Incluir las razones por las cuales se eligió cierto tipo de instalación,
configuración y ejecución en su equipo en particular.
M. en C. Alejandro Cifuentes A.
Página 6