»
S
I
D
E
B
A
R
«
Programado para la Red – Parte IV
Octubre 21st, 2009 by John Carlos Arrieta Arrieta


Creative Commons License


Creative Commons License



www.simbiotica.com.co


Contáctenos…

Esta sitio y todo su contenido  está protegida por
licencia de Creative Commons

Construyendo un Cliente HTTP Simple -Parte II

La gran diversidad de librerías escritas en lenguaje de programación Java nos permite escribir aplicaciones de con abundante funcionalidad, una de estas librerías es  HttpCliente de la fundación de software librea Apache, esta fundación está compuesta por una amplia comunidad de personas interesadas en el desarrollo tecnológico especializado en la construcciones de componentes de software generalmente escritos en lenguaje de programación Java. Apache es mundialmente conocida por sus aportes a la sociedad de la información y al sector empresarial, uno de estos aportes es el popular servidor de HTTP llamado Apache WebServer, el cual según estadísticas de centros especializados en tecnología informática, es el servidor http más utilizado en internet, seguido de su archí conocido rival IIS o Internet Información Server de Microsoft.

La librería httpclient puede ser descargada del sitio web de Apache pulsando clic en este enlace http://hc.apache.org/, donde además pueden encontrar abundante información sobre su uso.

El primer ejemplo que les mostrare básicamente realiza una conexión a al Servidor HTTP (recuerden que su nombre más común es Servidor Web) que ustedes deseen,  solicitara su fichero por índice (.html, .htm, .php, .jsp, .asp, .afp, etc) o archivo por defecto, recibirá su contenido y lo mostrar sin ningún tipo de interpretación, es decir, mostrar el código fuente generado como salida del fichero solicitado al servidor, en próximos ejemplos mostrare como procesar e interpretar el código fuente que envía el servidor en cada recurso, el objetivo de este simple ejemplo es mostrarles el uso básico de la librería httpcliente de apache y el método de petición GET utilizando dicha librería, toda esta teoría de petición, métodos de petición y respuesta la he explicado en detalle en el artículo anterior.

Para agilizar en gran medida el ejemplo utilizare el IDE NetBeans 6.7.1, sobre el que he realizado un primer artículo, que presenta una amplia instrucción del IDE, el cual pueden ver en este mismo sitio

y aquí pueden descargar código fuente del proyecto

Primero crean  un nuevo proyecto tipo aplicación de escritorio.

Le colocan el nombre de su preferencia, recordando las reglas de nombrado de proyectos en NB (sigla de NetBeans), clases, enumeraciones, interfaces, paquetes, métodos y variables en Java, yo por ejemplo le colocare como nombre clientehttpsimple.

Cambian (si lo desean) el nombre de las clases que NetBeans  genera automáticamente en el proyecto, yo les he colocado como siempre Principal a la clase del método main de arranque, ósea a la clase auto generada con nombre ClientehttpsimpleApp, VentanaPrincipal a la clase auto generada con nombre ClientehttpsimpleView, osea a la ventana o marco principal de proyecto, y por último cambio el nombre de la clase autogenerada llamada ClientehttpsimpleAboutBox por VentanaAcercaDe, recuerden que etas clases se encuentran en el paquete con el mismo nombre del proyecto ósea clientehttpsimple.

Opcionalmente pueden renombrar a los componentes GUI que conforman a la VentanaPrincial y a la VetanaAcercaDe, yo siempre lo hago, quedando la VentanaPrincipal con sus componentes renombrados así, panelDeEstados, barraDeProgreso, PanelCentral, barraMenu, menuSesion, menuAyuda, menuItemSalir, menuItemAcercaDe y la VentanaAcercaDe esta vez la dejo como esta.

Opcionalmente pueden proceder a cambiar el texto de los menús y sus respectivos item de menú de la VentanaPrincipal, asi como también el texto de las etiquetas informativas de la VentanaAcercaDe.

Ahora diseñan la VentanaPrincipal de tal forma que permita introducir una dirección de internet o URL (explicada en detalle en la primera parte de este articulo) desde un campo de texto en l aparte superior, justo debajo de la barraDeMenu y en el centro pueda mostrar en un panel de texto el contenido del recurso solicitado al pulsar clic en un botón llamado que diga  ir a, el cual se encuentra justo al final del campo de texto de la URL, también puede mostrar el resultado de la petición al dar enter  sobre este campo de texto.

image0021

Bosquejo de la GUI de nuestro primer ejemplo

Creado y personalizado el proyecto de aplicación Java de escritorio en NetBeans, procedemos a crear nuestra interfaz grafica, tal y como está como esta diseña en el boceto anterior, para ellos seguimos los siguientes pasos:

Seleccionar Trabajar en la VentanaPrincipal en modo de diseño.

1.    Ir al panel de proyectos

2.    Seleccionar el paquete raíz (clientehttpsimple)

3.    Hacer doble clic sobre la clase VentanaPrincipal.java, la cual es un formulario

4.    Dar clic en el panel de diseño.

Agregar una barra de herramientas para colocar el campo de dirección, su etiqueta y el botón Ir a…

1.    Ir al  Panel de Paletas GUI (Panel lateral Derecho, si no se encuentra ir al menú Ventanas y seleccionarlo)

2.    Cambiar el diseñador libre de la VentanaPrincipal por un diseñador de bordes, el diseñador (Layout) libre permite que los contenedores pueden mostrar otros componentes o contenedores en su interior ubicados en posiciones arbitrarias, elegidas por el programador, pero existen otros diseñadores (Layouts) que nos permiten colocar dentro de los contenedores otros componentes en lugares fijos, dando la posibilidad de que los componentes se ajusten al cambio de tamaño que en tiempo de ejecución pueda sufrir el contendor donde se encuentran, algunos de estos  diseñadores son,

a.    El diseñador de flujo, cuya clase es FlowLayout del paquete java.awt, el cual coloca de forma lineal a los componentes agregados a un contenedor.

image0041

b.    El diseñador de rejilla, cuya  clase es GridLayout de paquete java.awt, el cual divide al contendor en filas y columnas, permitiendo agregar y colocar componentes en las celdas deseadas por el programador, cada componente agregado toma el mismo tamaño de la celda donde fue ubicado.

image006

c.    El diseñador de Bordes, cuya  clase es BorderLayout de paquete java.awt, el cual divide al contendor en 5 partes, denominadas Norte, Sur, Este, Oeste, las cuales corresponden a sus respectivos bordes, la ultima es el Centro, que representa el centro del contenedor, este diseño nos permite agregar y colocar componentes solo en estas 5 ubicaciones del contenedor, cada componente agregado toma el mismo tamaño del borde donde fue ubicado, e el caso del componente que se agregue al centro, este toma el tamaño de todo el espacio que tenga el centro del componente.

image008

d.    Existen otros diseñadores para colocar los componentes dentro de los contenedores, entre los que se encuentran Diseñador de Cartas (CardLayout de java.awt) el cual es muy utilizado para realizar asistentes, agrupando a los componente agregados en el contenedor, cada grupo se le asigna un nombre o carta, pudiéndose mostrar solo los componentes de un grupo deseado y los otros dependiendo de la elección del usuario, igual que un manojo de cartas, el jugador solo muestra la carta deseada y oculta el resto, también se encuentra el diseñador de restricciones (GribBagLayout de java.awt), que al igual que el diseñador de rejilla coloca los componentes en filas y columnas, pero aplicando un conjunto de restricciones para mejorar la ubicación y presentación de los componentes agregados al contenedor, por motivos de tiempo y simplicidad, no explicare estos diseñadores y otros mas, lo dejo a investigación y lectura de ustedes.

Como lo había dicho al comienzo de este paso 2, seleccionaremos el diseñador de borde, de esta manera podremos anclar en la parte superior (borde Norte) de la ventana a la barra de herramientas de direcciones URL y en el centro de la ventana colocar el componente de texto que mostrar el contenido del fichero que solicitemos al servidor http.

Para cambiar el diseñador de la VentanaPrincipal daremos clic derecho sobre el panel central de la Ventana.

3.    Seleccionar la opción (Item) activar Gestor de distribución

4.    Hacer clic en la en el sub-item diseño de bordes, noten que NB utiliza por defecto el diseñador libre para todos los contenedores que colocamos desde la paleta GUI.

image010

Para verificar que se que la ventana tiene el diseñador de bordes escogido, podemos ir al panel de inspección y seleccionar el panel principal (mainPane) y vemos que pose un objeto tipo BorderLayout, el icono de este diseñador es muy representativo, es un panel dividido en sus bordes.

image0121

5.    Ir a la a paleta de componentes  GUI

6.    Seleccionar la lista de componentes tipo Contenedores Swing.

7.    Dar clic sobre el componente contenedor Barra de Herramientas, el cual está representado por la clase JToolPane del paquete javax.swing.

image0141

8.    Luego llevar el ratón hacia el panel de la VentanaPrincipal, con el puntero del ratón va incluido el componente seleccionado en la Paleta de componentes GUI, en nuestro caso una barra de herramientas, luego las soltamos el componente sobre la VentanaPrincipal pulsando un clic sobre el borde Norte de la ventana.

image0161

9.    Ir al panel de inspección y cambiarle el nombre (jToolBar1) al la barra de herramientas por barraDeDireccion.

10. Ir al Panel de Propiedades

11. Seleccionar la propiedad PreferredSize (Tamaño Preferido) y colocarle cambiarle el ancho y el alto por 100 y 35 respectivamente

image018

Lo que pasa es que las barras de herramientas cuando están vacías (con contenedores), son casi invisibles de de el panel de diseño, al cambiarles el tamaño  preferido esto hará más visible a la barraDeDirecciones tanto desde el panel de diseño como cuando se ejecute la VentanaPrincipal.

Ahora colocaremos que van dentro de la barra de herramientas algunos componentes GUI de la librería javax.swing,  estos controles son en su respectivo orden:

  • Una Etiqueta de Texto, cuya clase es JLabel, se utiliza para mostrar texto en una sola línea, este texto no es editable.
  • Un Campo de Texto, cuya clase es JTextField, se utiliza para introducir texto en una sola línea, este texto no es editable.
  • Un botón de Acción, cuya clase es JButton, se utiliza para solicitar la ejecución de una acción específica, contiene una etiqueta que muestra un muy breve texto (una o dos palabras cortas) en su interior, normalmente ese texto es nemotécnico, es decir, su lectura sugiere de forma muy precisa la acción que ejecuta, al igual que con otros componentes GUI de la Liberia Swing, a las etiquetas y botones se les puede agregar una imagen que actúa como icono

Para agregar estos componentes sobre la barra de Herramientas de direcciones URL, pueden seguir estos pasos:

1.    Ir a la paleta de GUI

2.    Seleccionar la lista de Controles Swing

3.    Dar clic sobre el control Etiqueta,

image020

4.    Igual que lo hicimos con la barra de herramientas, ana vez colocados sobre la barraDeDireccion desde el panel de diseño, hacemos clic sobre ella y la etiqueta se agregara de forma automática sobre la barraDeDireccion

image022

5.    Cambiar el texto (jLabel1) que aparece por defecto dentro de la nueva etiqueta agregada a la barraDeDireccion y colocar Direccion:, esto lo hacen dando seleccionado la etiqueta agregada y pulsan la techa de espacios en blanco, o yendo al panel de propiedades y buscar la propiedad Text de la etiqueta seleccionada.

Ahora colocaremos un campo de texto donde se podrá escribir la dirección URL del recurso que será solicitado al servidor HTTP.

6.    Ahora hacer lo mismo (paso 1 al 5) para agregar el campo de texto y con el Botón (Ir a)

image024

7.    Cambiarles el nombre por defecto a las variables (jLabel1, jTextFiel1 y jButton1) de los componentes agregados por etiquetaDireccionURL, campoDireccionURL y botonIrAURL respectivamente

8.    De la misma forma que se hizo para cambiar el texto de la etiqueta, así mismo se debe cambiar el texto del campoDireccionURL por nada (borrar o quitar el texto que tiene el componente) y para el botonIrAURL  colocar el texto Ir A.

Por último  debemos colocar un componente de texto de varias líneas,  para mostrar el contenido del archivo que será solicitado al Servidor HTTP, procedente desde la dirección URL que será colocada en el campo de texto campoDireccionURL, y solicitado al momento de pulsar clic sobre el botón botonIrAURL.

Java pose muchos componentes para mostrar, introducir y editar texto matrilineal, pero en librería swing de GUIs que se incluye dentro del SDK de Java, solo podemos encontrar dos:

  • Caja de Texto, cuya clase JTextArea, la cual permite editar (mostrar, borrar, recorrer, copiar, cortar y pegar) texto en varias líneas, este componente solo acepta texto plano, es decir, el texto no posee ninguna especie de formato de estilo, negritas, color, tamaño, cursiva, justificación, fuente, etc..
  • Panel de Texto, cuya clase JTextPane, es similar a la Caja de Texto anteriormente descrita, la diferencia es que este componente además de permitir editar texto sin formato, también nos permite agregarle otros otro componentes (campos de texto, botones, combox, radios, etc..), algo imposible en una JTextArea.
  • Panel Editor de Texto , cuya clase JEditorPane, es similar a Panel de Texto anteriormente descrito, de hecho esta clase en realidad hereda todos los atributos (variables globales protegidas y publicas ) y la mayoría de operaciones (método o funciones protegidas y publicas) que posee la clase JTextPane, es decir que un JEditorPane hereda JTextPane, siendo más simple, se peude decir que un Panel Editor de Texto es un Panel de Texto especial, la especialidad que este pose con respecto su padre, es que este componente si permite editar texto con formato, soportando muchos estilos, como la Negrita, cursiva, subrayado, justificaciones a la izquierda, derecha, centrado y parejo, todas las fuentes que estén registradas en el Sistema Operativo, etc…, pero además, JEditorPane también soporta algunos texto en formato HTML y RTF, incluyendo por supuesto el texto sin formato, si así como lo leen, un objeto de esta clase es capaz de interpretar texto editado mediante aplicaciones como MS-Word, MS-Word-Pad, OpenOffice Write, de igual forma, también puede mostrarnos paginas que solo estén elaboradas con código HTM, un poco de CSS e imagines en formato .gif, jpg o png.


Pasos para agregar el componente de texto que mostrar el contenido del archivo solicitado al servidor HTTP.

1.    Vamos a la Paleta de GUIs.

2.    Seleccionamos la lista de componentes Controles Swing

3.    Damos clic sobre componente Panel Editor.

image026

4.    Llevar el ratón hasta el panel de diseño y ubicarlo sobre el centro del panel de la VentanaPrincipal.

5.    Pulsar clic sobre dicho panel para colocar el Panel Editor de Texto, recordar que el panel de la VentanaPrincipal le hemos colocado un diseñador de bordes (BorderLayout), lo cual implica que podemos colocar ese Panel editor en el centro del panel de la VentanPrincipal,

6.    Para garantizar que está en el centro, un vez colocado el JEditorPane sobre la VentanaPrincipal, vamos  al Panel de Inspección y seleccionamos el panel principal de la VentanaPrincipal,

7.    Vemos que existe un componente que no hemos agregado nosotros, se trata de un Panel de Desplazamiento, el cual es de la clase JScrollPane  de javax.swing,  además noten que también que dentro de este panel de desplazamiento se encuentra el Panel Editor que colocamos sobre la ventana Principal, esto sucedió porque NetBeans  sabe que deseamos utilizar un componente de texto multilineal, entonces coloca de forma automática este componente dentro de un componente desplazable, esto permite ver todo el contenido  que se encuentre dentro del componente de texto.

Los JScrollPane son muy utilizados para movernos dentro de componentes cuyos contenidos son más grandes que el tamaño visible del mismo, por ejemplo para ver una imagen muy grande dentro de una ventana pequeña, o en este caso para ver un texto muy grande dentro de un componente de texto lineal relativamente pequeño.

8.    Seleccionamos el Panel de desplazamiento desde el panel de inspección

9.    Luego vamos al panel de propiedades de dicho panel seleccionado

10. Buscamos la propiedad Dirección, en el grupo de propiedades Gestor de Distribución

11. Seleccionamos la opción Centro  de la lista la opción desplegables

image028

12. Ahora cambiamos el nombre  por defecto de la variables (jScrollPane1 y jEditorPane1) de los nuevos componentes agregados a la VentanaPrincipal, ahora se llamaran panelDeDesplazamiento y panelDeContenido.

13. Luego deshabilitamos la posibilidad de editar el contenido que se mostrara en el panelDeContenido, esto lo hacemos seleccionando el panelDeContenido

14. Vamos al panel de propiedades

15. Buscamos la propiedad editable y quitamos la verificación de su cajita (quitamos el chulito de la caja de verificación).

image030

16. Damos un tamaño preferido al panelDeContenido, yendo a al panel de propiedades, buscamos la propiedad PreferredSize y colocándole valores deseados, en esta caso le he colocado

17. Volvemos al panel de de proyectos y seleccionamos el el Nodo Raiz (el primero, el que tiene el mismo nombre del proyecto con una tasita de café), pulsamos clic derecho sobre el

18. Damos clic sobre la opción Propiedades, o simplemente damos clic en el menú Archivo y luego clic en la opción Propiedades del Proyecto (clientehttpsimple)

19. En categorías seleccionamos Aplicación

20. Luego procedemos a cambiar  variables de la aplicación tales como, el Titulo, El Propietario, La descripción y la imagen que será mostrada en el Splash

image032

También podemos cambiar otros aspectos del aplicativo relativos su proceso en el Administrador de Tareas del Sistema Operativo tales como, el ID del Propietario, El ID de la Aplicación, por ultimo podemos cambiar también la apariencia (Skin o LookAndFeel) que tomaran los componentes GUI de la aplicación al ejecutarse, pudiendo seleccionar, GUIs nativas del SO, independiente del SO como por ejemplo Meltal, Motif y Nimbus LookAndFeel.

image034

Si se en panel de diseño la VentanaPrincipal  antes de ser ejecutada la aplicación

image036

Y así se ve una vez se encuentra en ejecución la aplicación

image038

Agregar las librerías commons-httpclient de apache al proyecto

Bueno teniendo lista la vista de la aplicación, tareas que según  el patrón de arquitectura MVC se realizan como segunda fase del desarrollo,  pero como uno de los objetivos de este artículo es enseñar a utilizar el IDE NetBeans,  por este motivo inicie primero con la capa V (vistas) y no con la capa M (modelo), ahora lo que sigue es agregar las librerías de la ApacheHTTPCLientCommon al proyecto.

Para ello realizamos los siguientes pasos:

1.    Descargar las librerías desde aqui

2.    Crear un directorio donde gudarlas librerías, recomiendo que este directorio se encuentre  dentro del directorio raíz del proyecto, para crearlo  utilizando el Panel de Archivos

image040

Al pulsar clic sobre la opción Otro NB nos muestra la ventana de creación de nuevo recurso, procedemos  a seleccionar la opción Otro que se encuentra al final de la lista de categorías

image042

Seleccionamos la opción Carpeta, le damos un nombre, en mi caso le he colocado el nombre librerías

image044

3.    Ahora vamos a la carpeta donde se guardaron las librerías necesarias que descargamos  y  las copiamos  todas

4.    Volvemos al Panel de Archivos y seleccionamos la el directorio que creamos, damos clic derecho sobre él y luego pegamos las librerías .jar que descargamos.

image046

5.    Ir al Panel de Proyectos

6.    Seleccionar la opción (item) Bibliotecas

7.    dar clic derecho sobre él y  seleccionar  la opción Agregar Archivo JAR/Carpeta

image048

8.    Aparece una ventana para navegar  por el sistema de archivos del S.O (JFileChooser), desde la cual ubicamos la carpeta de nuestro proyecto, que en mi caso la he guardado el directorio por defecto par los proyectos de NetBeans, llamada NetBeansProyect ubicada generalmente en el directorio mis documentos, estando dentro de este directorio abrimos el directorio librerías y seleccionamos todos los ficheros .jar que aquí se encuentran y pulsamos abrir

image050

Mediante esta operación NetBeans agrega cualquier librería de clases al proyecto que estemos desarrollando.

Para establecer comunicación  con

Utilizar las clases de la librería commons-httpclient

image052

Teniendo en nuestro proyecto las librerías adecuadas para poder establecer comunicación con  un Servidor HTTP, solo nos queda utilizar las clases necesarias para interactuar con el servidor, algunas de esas clases con:

Este es un ejemplo de petición HTTP mediante el método GET mediante apache-commons-httpclient:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;

// el siguiente codigo puede ir dentro de algún método o función de la clase
HttpClient clienteHttp = null;
GetMethod metodoGet = null;
int codigoEstado = 0;
String respuesta = null;
String url =”www.ingeniosarrieta.com;
try {
      clienteHttp = new HttpClient();
      metodoGet = new GetMethod( url );
      codigoEstado =  clienteHttp.executeMethod(metodoGet);
      if (metodoGet.getStatusCode() == HttpStatus.SC_OK) { // == 200
                   respuesta = metodoGet.getResponseBodyAsString();
    }
   else{
    // realizar alguna acción si  el código de respuesta es diferente a 200, que es igual a
    }      
} catch (MalformedURLException error ) {
    String infoError = error.getMessage();
    // realizar algo cuando ocurra un error.
}
finally{
    metodoHttp.releaseConnection();
}

Voy a explicar las  líneas de código escrita en este ejemplo.

Líneas 1: Declara una variable tipo referencia de objeto de la clase HttpClient llamada clienteHttp, esta referencia será utilizada para establecer conexión al Servidor HTTP utilizando el método GET.

Línea 2: Declara una variable tipo referencia de objeto de la clase GetMethod llamada metodoGet, esta referencia será utilizada para formatear la petición según el estándar HTTP GET.

Línea 3: Declara una variable entera llamada metodoGet codigoEstado, esta variable se utilizara para almacenar el código de respuesta que entrega el Servidor como parte de la respuesta HTTP vinculada a la petición hecha mediante el método GET.

Línea 4: Declara una variable referencia del tipo cadena (String) llamada respuesta, será utilizada para almacenar el contenido de la respuesta que envía el Servidor como parte de la respuesta HTTP vinculada a la petición hecha mediante el método GET.

Línea 5: Declara e inicializa una variable referencia de tipo String (Cadena), esta variable contiene la dirección URL del Servidor HTTP al que se le realizara la  petición GET

Línea 6: Inicia un bloque Try (vigilar) que notifica si llegase a ocurrir un error al realizar la petición o recuperar la respuesta HTTP.

Línea 7: Crea un objeto HttpClient para establecer conexión al Servidor y realizar la petición HTTP.

Línea 8: Crea un objeto GetMethod que recibe como parámetro la variable que contiene la dirección url, este objeto prepara la petición para que se pueda realizar mediante el método GET.

Linea 9: Realiza una llamada la función (método) executeMethod del objeto clienteHttp de la clase HttpClient, esta función recibe como parámetro un objeto de la clase HttpMethod, que en este caso dicho objeto fue creado a partir de la clase GetMethod, la cual  hereda de HttpMethod, esta función executeMethod realiza la conexión al Servidor HTTP y espera la respuesta de la petición, retornando el código de estado, que determina si  la respuesta fue satisfactorio o tubo algún problema.

Línea 10: Verifica mediante un condicional si el código de estado es el código de satisfacción HTTP 200, esto se hace llamado al método getStatusCode() del objeto metodoGet de la clase GetMethod, y lo compra con la variable SC_OK de la enumeración HttpStatus, esta enumeración tiene una variable por cada código de estado especificado por el protocolo HTTP

Línea 11: Si es así, entra al bloque del condicional SI y almacena en la variable respuesta el contenido del recurso solicitado  al Servidor HTTP, esto se realiza llamando al método getResponseBodyAsString() del objeto metodoGet de la  clase GetMethod, este método retornan el contenido (cuerpo) de la respuesta del servidor en formato cadena.

Línea 12: cierra el bloque del condicional SI

Línea 13: inicio del bloque del condicional SINO vinculado al anterior condicional SI.

Línea 14: Si por el contrario el código de estado es diferente al 200 (OK), entonces entra al bloque del condicional SINO y realiza la acción correspondiente

Línea 15: Cierre del bloque del condicional SINO.

Línea 16: Cierre del bloque try e inicio del bloque catch vinculado al bloque try anterior, este catch ( MalformedURLException ex ) captura una posible excepción (error inesperado en tiempo de ejecución) del tipo MalformedURLException, que ocurre cuando la dirección URL no está bien formada, es decir, no cumple con la estructura estándar de URL, la información sobre esta excepción se almacena en la variable referencia error, todos los errores en tiempo de ejecución heredan de la clase Exception,

Línea 17: Esta clase contiene un método (función) llamada getMessage(), el cual retorna una cadena con información sobre el error ocurrido.

Línea 19: cierre del bloque del catch

Línea 20: Inicio del bloque finally vinculado al bloque try anterior, el cual se ejecuta siempre, ocurra o no ocurra error

Línea 21: llamada al método  releaseConnection() del objeto metodoGet de la case GetMethod, este método cierra la conexión y libera recursos de la memoria del PC cliente, borrando datos generados y recibido durante la petición HTTP.

Línea 22: Cierre del bloque finally

Agregar evento al botón Ir a

Teniendo nuestra interfaz grafica lista, ahora solo tenemos que colocar el código necesario para realizar la petición al servidor.

Lo primero que vamos a realizar es colocar un evento al botonIrAURL, de tal forma que al pulsarlo se ejecute el código que realiza la petición, a continuación se encuentran los pasos a seguir para colocar un evento sobre un componente:

1.    Ir al panel de Diseño

2.    Seleccionar el botonIrAURL ya sea desde el panel de diseño o desde el panel de inspección.

3.    Dar clic derecho sobre el botón Ir a y seleccionar eventos

4.    Aparece un submenú donde se clasifican los tipos de eventos disponibles para el control seleccionado, en este caso para un JButton.

5.    Seleccionar el evento Action

6.    Dar clic sobre el método actionPerformed

image054

7.    Netbeans genera de forma automática dentro del método private void initComponents() de la ventana actual el código necesario para ejecutar el evento con las acciones que nosotros le indiquemos.

image056

Se puede ver que a la variable botonIrAURL se le agrega un escuchador del evento ActionEvent del paquete java.awt.event, dicho escuchador es un objeto de la clase ActionListener del paquete java.awt.event, el cual se crea y define dentro de los parámetros del método addActionListener del objeto botonIrAURL de la clase JButton.

Dentro de la definición de la clase ActionListener se redefine el método

1
2
3
public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonIrAURLActionPerformed(evt);
 }

El cual recibe como parámetro un objeto de la clase ActionEvent referenciado en la variable evt, este método realiza una llamada del método botonIrAURLActionPerformed(evt) pasándole el objeto ActionEvent evt, el método actionPerformed es ejecutado de forma automática cada vez que se pulsa clic sobre el botonIrAURL.

El método botonIrAURLActionPerformed está definido fuera del método initComponents.

image058

Es aquí donde tenemos que colocar el código que deseamos que se ejecute al pulsar clic sobre el botonIrAURL, en nuestro caso la acción que se deben ejecutar son:

Recuperar la dirección URL que el usuario ingreso en el campoDireccionURL

1
direccionURL = campoDireccionURL.getText();

Crear un objeto Httpcliente

1
clienteHttp = new HttpClient();

Crear un objeto GetMethod  metodoGet pasándole la dirección URL recuperada del campoDireccionURL

1
metodoHttp = new GetMethod( direccionURL );

Ejecutar la petición con el método GET y Recuperar el código de estado que envía el Servidor HTTP

1
codigoEstado = clienteHttp.executeMethod( metodoGet );

Verificar que el código de estado sea 200, es decir OK, Si el código de estado es OK, recuperar el cuerpo de la petición como formato cadena y colocar el cuerpo de la petición dentro del panelDeContendo que es de tipo JEditorPane

1
2
3
4
5
6
7
8
9
10
11
12
if( metodoGet.getStatusCode() == HttpStatus.SC_OK) { // == 200
    respuesta = metodoGet.getResponseBodyAsString();
    panelDeContendo = new JEditorPane("text/html", respuesta);
    JViewport visor = panelDesplazamiento.getViewport();
    visor.add(htmlVisor);
}
//Si el código de estado no es 200, notificar sobre el problema
else{
     JOptionPane.showMessageDialog(panelDeContendo, "No se pudo obtener el recurso solicitado");
}
//Liberar los recursos de la conexión
metodoGet.releaseConnection();

Todo este código se encierra dentro de un bloque  try cath para vigilar un posible error de ejecución, el cual puede ser generado por la URL mal escrita, por falta de conexión a la red, entre otros.

image060

Ahora ejecutamos la aplicación, introducimos una URL y pulsamos el botón Ir A, de inmediato se ejecuta el código escrito en el método botonIrAURLActionPerformed, realizando la petición al servidor y colocando el cuerpo de la petición en el editor, al cual le he quitado la propiedad editable.

image062

Este sería el mensaje de error si no se indica el protocolo en la URL

image064

Este sería el mensaje de error si no se indica un protocolo diferente a http en la URL

image066

Este sería el mensaje de error si no se indica una dirección URL desconocida en internet, es decir que no existe en la red o simplemente si el PC no tiene conexión a la red.

image068

Pasar por un servidor Proxi

Como dato importante les puedo decirles que apache-commons-httpclient posee mecanismos para almacenar cookies, hacer peticiones que envíen ficheros adjuntos al servidor (algo conocido como upload), trabajar con cabecearas, y también nos permite hacer peticiones desde PC que estén conectados a la red atreves de un Servidor Proxi, para ellos solo tenemos que indicarle los datos de la dirección IP o nombre de dominio del Servidor Proxi y el puerto de atención de conexiones, aquí les coloco un ejemplo del código que pueden utilizar.

1
2
3
4
5
String direccionIPservidorProxi = campoDireccionServidorProxi.getText();
String puertoServidorProxi = campoPuertoServidorProxi.getText();
Int puertoProxi = Integer.parseInt(puertoServidorProxi);
HostConfiguration proxiConfigurador = clienteHttp.getHostConfiguration();
proxiConfigurador.setProxy( direccionIPservidorProxi, puertoProxi );

En el siguiente artículo, les mostrare como hacer una petición HTTP mediante el Método POST y GET, la cual envié datos al Servidor HTTP desde un formulario escrito con la librería Swing de Java, esta operación normalmente se realiza mediante formularios  escritos en lenguaje HTML, pero como les decía apache-commons-httpclient ofrecer toda la funcionalidad necesaria para trabajar construir aplicaciones que realicen peticiones con o sin parámetros a un servidor HTTP.

Sin más, me despido por ahora, voy a dedicarme un buen tiempo a mis estudios de doctorado, los cuales he dejado de atender un poco por el exceso de trabajo que tengo.

Que descansen y sigan leyendo mucho

813 Visitas hoy

Comparte en tu Web:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • email
  • Reddit
  • RSS
  • StumbleUpon

Por favor deje sus Comentarios aquí:

© Gurpo de Investigacion DEARTICA