Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » URL-Combine

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.12.2005, 18:13 Uhr
~Prince
Gast


Giebt es in JAVA eine kompfortabele möglichkeit

eine "Base-URL" mit der dazugehörigen "Link-URL" zu Verbinden?

Ich habe z.B.: "http://www.mySite.com/bilder/1999/sommerfreien/gallarie/1/index.html" als "Base-URL".
Und auf dieser Seiter habe ich den Link "../../../2004/silverster/gallarie/1/bild001.jpg" o.ä., jedenfalls eine relative Angabe als "Link-URL" ausgelesen.

Nun möchte ich testen:
1. Ob "Link-URL" eine Host Angabe hat.
2. Ob es sich um einen neuen Host handelt.

wenn "Link-URL".getHost(); "" liefter ist kein host angegeben (Oder?). Sonder eine Datei, die ja auf dem selben Host liegen muss (Oder?).

Und wenn kein neuer Host und auch nicht der selbe Host angeben ist möcht ich die beiden Angaben "Base-URL" und "Link-URL" verbinden.
Weil es sich ja nur um einer relative URL-Angabe handel kann.

Hat jamand erfahrungen. kann das mit "Link-URL".getHost(); so funktionieren?
Zur Not kann ich mir auch eine funktion zur verbindung selber schreiben ("../" und "./" auswerten evtl "/" am Anfang und den Dateinamen am Ende von "Base-URL" abschneiden usw. mehr fällt mir gerade auch nicht ein. :-) )
Nur schöner und sicher auch bug-sicherer wäre schon eine Befehl o.ä.

Kann wer helfen?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.12.2005, 16:03 Uhr
~Prince
Gast


Habe in der zwischenzeit einen lösungsansatz geschrieben.
Funktioniert auch ausser:
wenn der Link nicht mit dem Protokoll anfängt wird der Link als Relative Angabe itapretiert obwohl er Absolut ist
zb. www.host.link wird nicht als absolut erkannt.

einfach nur http:// als protokoll oder ftp:// ect. voranzusetzen geht auch nicht weil dann auch eine
relative angabe zb. ../verz/datei zu http://../verz/datei wird und als absolute angabe erkannt wird was aber in diese, fall falsch ist weil .. nicht der host sonder das eltern-verzeichnis ist.

Soviel zu Proble hoffe ihr / du hast es verstanden.
Hier mein Lösungsansatz:

Code:
import java.net.*;
public class u
{
   public static void main( String[] args ) throws Exception{
      String sBase = "http://www.Host.Base:-1/verz1/verz2/datei";
      
      System.out.println(sCombine(sBase, "http://www.Host.Link"));
      System.out.println(sCombine(sBase, "../Datei.Link(..)"));
      System.out.println(sCombine(sBase, "./Datei.Link(.)"));
      System.out.println(sCombine(sBase, "/Datei.Link()"));
      System.out.println(sCombine(sBase, "/Datei.Link()"));
        
      System.out.println(sCombine(sBase, "www.Host.Link") + " !!!   (Der Sonderfall)");
  }
  
  public static URL sCombine(String sBase, String sLink){
      
     URL uBase = null;    // Basis-URL
     String sProtokoll;
     String sHost;
     int iPort;
     String sFile;
      
     URL uLink = null;    // Link-URL
     int iErr = 0;    // Fehler?
    
     try{ // Base-URL erzeugen
        uBase = new URL(sBase);
        sProtokoll = uBase.getProtocol();
        sHost = uBase.getHost();
        iPort = uBase.getPort();
     }
     catch(MalformedURLException e){
        return null; // Fehler aufgetreten
     }
      
     do{
        try {
             if(iErr == 0){
                uLink = new URL(sLink);        // Link-URL erzeugen (Absolute)
             }
             if(iErr == 1){
               uLink = new URL(uBase, sLink);    // Link-URL erzeugen (Relative)
             }
       }
       catch(MalformedURLException e){
          iErr++;                // Fehler aufgetreten
       }
       finally{
          if(uLink != null)            // Prüfen ob URL vorhanden ist
             iErr = 0;            
       }
    }while(iErr != 0);
    return uLink;
  }
}



Findet ihr das dies wenigsten schon mal der richtige weg ist oder ist der ansatz mein vorhaben zu realiesieren schon falsch gewähtl.
mir fällt keine möglich keit mehr ein..

Wie lösten die Brower-Programierer diesen problem?

Dieser Post wurde am 26.04.2014 um 21:57 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.12.2005, 22:08 Uhr
~Prince
Gast


Hoffe ihr ignoriert mich nur weil ihr selbst keine Antwort habt oder euch keine Gedanken machen möchtet ???

Habe mir aber weiter Gedanken gemacht.
Sagt ihr mir bitte ob meine Lösung richtig ist oder ob man das so nicht ausdrücken kann?


Code:

import java.net.*;
public class u
{
  public static void main( String[] args ) throws Exception{
    String sBase = "http://www.Host.Base:-1/verz1/verz2/datei";
      
    System.out.println(sCombine(sBase, "ftp:/???/www.Host.Link"));
    System.out.println(sCombine(sBase, "http:/???/www.Host.Link"));
    System.out.println(sCombine(sBase, "../Datei.Link(..)"));
    System.out.println(sCombine(sBase, "./Datei.Link(.)"));
    System.out.println(sCombine(sBase, "/Datei.Link()"));
    System.out.println(sCombine(sBase, "Datei.Link()") + "\n");
        
    System.out.println(sCombine(sBase, "www.Host.Link")); // Der Problemfall !!!
    System.out.println(sCombine(sBase, "www.Host.Link/")); // Der Problemfall !!!
    System.out.println(sCombine(sBase, "www.Host.Link/Datei.Link")); // Der Problemfall !!!

  }
  
  
  public static URL sCombine(String sBase, String sLink){
      
    URL uBase = null;    // Basis-URL
    String sProtokoll;
    String sHost;
    int iPort;
    String sFile;

    URL uLink = null;     // Link-URL
    int iErr = 0;       // Fehler?
    
    try{ // Base-URL erzeugen
       uBase = new URL(sBase);
    }
    catch(MalformedURLException e){
       return null; // Fehler aufgetreten
    }
      
    do{
       try{
             if(iErr == 0){ // Link-URL erzeugen (Absolute)
                if(sLink.length() > 3)                            // länger als 3 Zeichen?
                   if(sLink.substring(0, 4).equals("www."))    // fängt das erste Verz. fängt mit www. an?
                      /* Ja! Es ist also eine Domain ohne Protokoll-Angabe.
                       * Da das erste Verzeichniss nicht mit www. beginnen darf,
                       * weil es dann als eine Domain verstanden wird.
                       */
                      sLink = uBase.getProtocol() + "://" + sLink;
                uLink = new URL(sLink);
             }
             if(iErr == 1){ // Link-URL erzeugen (Relative)
                uLink = new URL(uBase, sLink);
             }
       }
       catch(MalformedURLException e){
          iErr++; // Fehler aufgetreten
       }
       finally{
             if(uLink != null)
             iErr = 0;
       }
    }while(iErr != 0);
    return uLink;
  }
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: