[código] Manipulación de URLs en Java
Introduciendonos de manera breve al tema de redes en Java, veamos un pequeño ejemplo de manipulación de URLs desde los Applets. Si se utiliza una URL que haga referencia a una página Web en concreto como un argumento para el método showDocument de la interfaz AppletContext, el navegador en el que se ejecuta el Applet mostrará el recurso URL especificado.
Además, en el Applet que desarrollaremos más adelante, se utilizará una forma de paso de parametros, especificados dentro del documento HTML que invoca al Applet. Esto es muy útil puesto que permite a los Applets ser más dinámicos, y nos ofrece posibilidades para crear RIAs básicas.
El resultado…

El código…
Veamos el archivo HTML que invocará el Applet, y nota cómo se declaran parámetros que serán utilizados desde el programa:
<html>
<title>Selector de sitios</title>
<body>
<applet code = "SelectorSitios.class" width = "300" height = "100">
<param name = "titulo0" value = "UbuntuLife">
<param name = "ubicacion0" value = "http://ubuntulife.net/">
<param name = "titulo1" value = "El blog de Casidiablo">
<param name = "ubicacion1" value = "http://casidiablo.net/">
<param name = "titulo3" value = "elhacker.net">
<param name = "ubicacion3" value = "http://www.elhacker.net/">
<param name = "titulo4" value = "hac.kers">
<param name = "ubicacion4" value = "http://hac.kers.net/">
<param name = "titulo5" value = "NPC">
<param name = "ubicacion5" value = "http://nopuedocreer.com/">
<param name = "titulo7" value = "Malaciencia">
<param name = "ubicacion7" value = "http://malaciencia.info/">
</applet>
</body>
</html>
El documento HTML posee 12 etiquetas param; éstas deben estar siempre entre las etiquetas de apertura y de cierre del Appelt. El Applet puede leer estos valores y utilizarlos dentro del programa Java. Cada etiqueta param posee dos datos: un nombre y un valor. El método getParameter de Applet recupera el valor asociado con un nombre específico, y devuelve el valor como una cadena. El argumento que se le pasa a getParameter es el nombre del parámetro que se quiera recuperar. En este caso los parametros contienen información del nombre y URL de ciertos sitios web que el usuario puede seleccionar del JList.
El siguiente Applet (SelectorSitios.java) usa los métodos mencionados, y a partir de los datos obtenifos genera un objeto JList en donde el usuario puede seleccionar una página Web. La clase SelectorSitios utiliza un objeto HashMap (paquete java.util), para almacenar los nombres y URL de los sitios (un objeto HashMap almacena pares clave/valor):
// Este programa utiliza un botón para cargar un documento a partir de un URL.
import java.net.*;
import java.util.*;
import java.awt.*;
import java.applet.AppletContext;
import javax.swing.*;
import javax.swing.event.*;
public class SelectorSitios extends JApplet
{
private HashMap sitios; // nombres y URLs de los sitios
private Vector nombresSitios; // nombres de los sitios
private JList selectorSitios; // lista de sitios a elegir
// leer parámetros de HTML y configurar GUI
public void init()
{
// crear HashMap y Vector
sitios = new HashMap();
nombresSitios = new Vector();
// obtener los parámetros del documento HTML
obtenerSitiosDeParametrosHTML();
// crear componentes de GUI y preparar distribución de la interfaz
Container contenedor = getContentPane();
contenedor.add( new JLabel( "Seleccione un sitio para navegar" ),
BorderLayout.NORTH );
selectorSitios = new JList( nombresSitios );
selectorSitios.addListSelectionListener(
new ListSelectionListener() {
// ir al sitio que seleccionó el usuario
public void valueChanged( ListSelectionEvent evento )
{
// obtener nombre del sitio seleccionado
Object objeto = selectorSitios.getSelectedValue();
// usar nombre del sitio para localizar URL correspondiente
URL nuevoDocumento = ( URL ) sitios.get( objeto );
// obtener referencia al contenedor de subprogramas
AppletContext navegador = getAppletContext();
// indicar al contenedor de subprogramas para cambiar de página
navegador.showDocument( nuevoDocumento );
}
} // fin de la clase interna
); // fin de la llamada a addListSelectionListener
contenedor.add( new JScrollPane( selectorSitios ),
BorderLayout.CENTER );
} // fin del método init
// obtener parámetros del documento HTML
private void obtenerSitiosDeParametrosHTML()
{
// buscar parámetros del subprograma en documento HTML y agregarlos a HashMap
String titulo, ubicacion;
URL url;
int contador = 0;
titulo = getParameter( "titulo" + contador ); // obtener título del primer sitio
// iterar hasta que no haya más parámetros en el documento HTML
while ( titulo != null ) {
// obtener ubicación del sitio
ubicacion = getParameter( "ubicacion" + contador );
// colocar titulo/URL en HashMap y titulo en Vector
try {
url = new URL( ubicacion ); // convertir ubicacion a URL
sitios.put( titulo, url ); // colocar titulo/URL en HashMap
nombresSitios.add( titulo ); // colocar titulo en Vector
}
// procesar formato incorrecto de URL
catch ( MalformedURLException excepcionURL ) {
excepcionURL.printStackTrace();
}
++contador;
titulo = getParameter( "titulo" + contador ); // obtener título del siguiente sitio
} // fin de instrucción while
} // fin del método obtenerSitiosDeParametrosHTML
} // fin de la clase SelectorSitios
6 Comentarios | deja el tuyo





Hola muy buena la pagina la verdad y me interesa el manejo de URL, tengo una pregunta como puedo hacer para que la URL reconozca el pipe line “|” en una URL http://localhost/hola.php?uno=1&dos=2|tres|cuatro
Si le quito los | corre correctamente.
He intentado con:
Desktop.getDesktop().browse(new URI(uri));
Y me sale un mensaje de erro como el siguiente:
java.net.URISyntaxException: Illegal character in query at index 142: http://localhost:8080/crystal/ReportViewer.jsp?debug=off&report=reports//A4/01_CostCentreDefinitions_A4.rpt&prompt0=Test+Plan+PHS+COA&prompt1=|||||||||||1300
at java.net.URI$Parser.fail(URI.java:2809)
at java.net.URI$Parser.checkChars(URI.java:2982)
at java.net.URI$Parser.parseHierarchical(URI.java:3072)
at java.net.URI$Parser.parse(URI.java:3014)
Umm… no creo que puedas hacerlo tan sencillo. Por lo que veo usas Java; lo que yo intentaría hacer es crear una clase que extienda de URI, y le sobrecargas el método que realiza el parse. Si te fijas es ése método el que genera el error, por lo que podemos deducir que allí no se acepta ése tipo de URI. Bueno, es solo una idea, siento no poder explicarte más a fondo.
Un saludo.
hola lo veo con los dos ojos
me ayudo de mucho el documento, explican muy bien, se les agradese..