Inicio » Informática profesional. » Programación » Curso de J2EE » Información enviada al servidor

Curso de J2EE

Información enviada al servidor

Cuando un cliente web invoca a un servlet ubicado en un servidor J2EE compatible, se le envía la siguiente información:

  • Primero, una línea principal de encabezamiento de petición que consta de tres partes:

Comando del protocolo http//Ruta URI del recurso solicitado al servidor//Versión del protocolo

Ejemplo:

GET || /servlet/ServletPrueba || 1.0

  • A continuación, los encabezados de petición. Almacenan información sobre el cliente desde el que se ha realizado la petición. El servlet accede a la misma mediante métodos adecuados. Se estudiarán más adelante. Por ahora se muestran algunos de ellos

Ejemplos:

accept: indica los tipos MIME soportados por el cliente.

referer: indica el URL del recurso web del que proviene la petición actual.

accept-lenguage: indica los idiomas preferidos del cliente.

content-type: indica el tipo MIME asociado al envío de la petición del cliente. En este caso es el asociado a un formulario html.

content-length: indica el tamaño en bytes de los datos enviados en la petición. Sólo disponible en peticiones basadas en post.

user-agent: indica el tipo de cliente que ha realizado la petición al servlet. En este caso un navegador web. Puede ser utilizado para enviar diferentes respuestas en función de tipo de cliente. El “Mozilla” que aparece está asociado a una versión de Netscape que se necesita soportar por cuestiones de compatibilidad con JavaScript.

cookie: utilizado para devolver las cookies que el servidor envió con anterioridad al cliente.

  • Por último, el cuerpo de la petición, que contendrá, en este caso, los datos en forma de pares name/value que procesará el servlet. Recordar que para peticiones GET no existe cuerpo y los datos se agregan al final del URL.

Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de J2EE y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Interfaces importantes

Las propiedades de las interfaces a las que pertenecen las instancias que se les pasan a los métodos de servicio doXXX(..) de gestión de petición y generación de respuesta se resumen así:

  • HttpServletRequest y su superinterface inmediata ServletRequest: declaran métodos que permiten la comunicación en el sentido cliente-servidor y la obtención de datos del cliente que realiza la petición tales como parámetros pasados, protocolo empleado, nombre del host desde el que se hace la petición, etc. Ir a la API para ampliar información. Algunos de los más usados son:
  • String getParameter(String name): devuelve el value asociado al name que se le pasa al argumento. Recordar que el servlet recibe datos de los clientes mediante pares name/value. Devuelve null si no se encuentra el name que se le pasa. Este método es el mismo que se empleó en los applets cuando se querían capturar parámetros desde el código html del applet. MUY USADO.
  • String[] getParameterValues(String name): devuelve un array de String que contiene todos los values asociados al name que se le pasa al método. Si el name no existe, devuelve null.

Suele emplearse en las casillas de verificación, los botones de opción o radio-button, en las listas desplazables y en las listas desplegables con el fin de conocer las opciones seleccionadas por el usuario. Todas las opciones de elección comparten un name común.

  • Enumeration getParameterNames(): devuelve una Enumeration que contiene todos los names asociados a la petición del cliente.

Esta Enumeration se recorrerá mediante los métodos conocidos boolean hasMoreElements() y Object nextElement()

Suele emplearse cuando se desconocen los nombres de los names de la petición o son muchos y se necesitan capturar todos.

  • String getProtocol(): devuelve el protocolo empleado en la comunicación cliente-servidor y viceversa.
  • String getRemoteAddr(): devuelve la dirección ip del cliente que realiza la petición.
  • String getRemoteHost(): devuelve el nombre del cliente que realiza la petición. El contenedor web puede devolver la dirección ip en vez del nombre de dominio, si no puede resolverlo o si elige no hacerlo con el fin de mejorar su rendimiento.
  • int getRemotePort(): devuelve el número de puerto por el que el cliente realiza la petición.
  • String getRemoteUser(): devuelve la contraseña del usuario que realiza la petición si el acceso al servlet precisa de autentificación. Si no, devuelve null.
  • String getContentType(): devuelve el tipo MIME empleado en el cuerpo de la petición. Si es desconocido por el cliente, devuelve null.
  • String getMethod(): devuelve el tipo de petición. Habitualmente get o post.

Para explicar los siguientes métodos, considerar que se invoca a PrimerServlet tecleando en la barra de direcciones del cliente http://localhost:8080/servlets-examples/PrimerServlet?nombre=Jesus. Antes de explicarlos, conviene tener clara la diferencia entre URI y URL.

URI (Uniform Resource Identifier): identifica a cualquier recurso. No indica cómo acceder al mismo. Ejemplo: para identificar a PrimerServlet, se emplea el contenido de la etiqueta <url-pattern> (/PrimerServlet) en el descriptor de despliegue

Podría haberse empleado otro URI para el servlet, como /cursofer/javaprofe/PrimerServlet. Verificarlo agregando al descriptor

 e invocando a PrimerServlet mediante el siguiente URL

http://localhost:8080/servlets-examples/cursofer/javaprofe/PrimerServlet?nombre=Jesus

URL (Uniform Resource Locator): URIs que trabajan con típicos protocolos de Internet como http, ftp, etc. y que indican cómo acceder al recurso. Ejemplo: http://localhost:8080/servlets-examples/PrimerServlet?nombre=Jesus

  • String getQueryString(): devuelve la cadena de parámetros de la petición siempre y cuando la petición sea get. Si no, null. En el ejemplo, nombre=Jesus
  • String getRequestURI(): devuelve la ruta URI de la petición, es decir, la cadena situada entre el host y el puerto, y los parámetros. En el ejemplo, /servlets-examples/PrimerServlet
  • String getServletPath(): devuelve la ruta URI del servlet relativa al directorio raíz de la aplicación. No tiene en cuenta la cadena de parámetros. En el ejemplo, /PrimerServlet
  • Enumeration getHeaderNames(): devuelve una Enumeration que contiene los names de los encabezados de petición enviados por el cliente.
  • String getHeader(String encabezadoPeticion): devuelve el valor del encabezado de petición que se le pasa al método. Se analizará con más detenimiento en temas posteriores.

Estos tres últimos métodos pertenecen a HttpServletRequest, el resto a su superinterface inmediata ServletRequest. Se aconseja al lector que consulte la API para conocer más métodos de estas interfaces.

  • HttpServletResponse y su superinterface inmediata ServletResponse: declara métodos que permiten la comunicación en el sentido servidor-cliente y la generación de las respuestas a las peticiones de los clientes. Ir a la API para ampliar información. Por el momento se explican los métodos básicos:
  • PrintWriter getWriter(): devuelve un objeto de la clase java.io.PrintWriter que representa el flujo de salida que permite la escritura de caracteres. Se utiliza para generar la respuesta que se envía al cliente.

PrintWriter cuenta con métodos adecuados para escribir dicha respuesta. Habitualmente se emplea println(String s). El uso de este método provoca que deba importarse el paquete java.io, además de los dos propios de los servlets. MUY USADO.

  • void setContentType(String tipoMIME): especifica el tipo MIME de la respuesta y el código de caracteres empleado para definirla. Por defecto, su valor es text/plain;ISO-8859-1
  • ServletOutputStream getOutputStream(): devuelve un objeto de la clase ServletOutputStream que modela un flujo de salida que permite la escritura de datos a nivel de bytes. Lanza una IOException que debe capturarse. Se hará un ejercicio al final del tema.
  • void addCookie(Cookie cookie): agrega un objeto de la clase Cookie en el código de la respuesta que permite obtener información del cliente que ha realizado la petición. Se verá más adelante.
  • void encodeURL(String s): se estudiará más adelante en el tema de sesiones.
  • void sentRedirect(String s): ídem anterior.
  • void sendError(int n): ídem anterior.

Estos tres últimos métodos pertenecen a HttpServletResponse

Ahora se aconseja encarecidamente realizar el ejercicio 1 de la lección, siguiendo los dos recordatorios indicados en su enunciado.


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de J2EE y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Si desea obtener un acceso sin restricciones a los contenidos del curso de J2EE y disfrutar de todas las herramientas del aula virtual (Videos explicativos streaming, acceso a los foros, chat, ejercicios resueltos, la ayuda del tutor, audioconferencia, estudio de grabación, test y actividades de autoevaluación, etc...) puede inscribirse completamente gratis y comenzar a realizar de forma inmediata el curso.