Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[Java] Controleren of een file op een webserver bestaat

RobertV
20 antwoorden
  • Ik wil in een Java applet kijken of een bepaalde URL bestaat.
    Ik moet iets met java.net.HttpURLConnection.getResponseMessage doen of zoiets, maar ik kom er niet echt uit. :sad:
    Ik heb al op Internet gezocht, maar niks gevonden.
    Weet iemand wat ik moet doen?
  • niet goed genoeg gezocht :wink:
    http://www.rgagnon.com/javadetails/java-0059.html
  • Zo'n soort code ben ik al tegengekomen, maar hij wilt maar niet werken.

    [code:1:b2bb91b2eb]
    try
    {
    HttpURLConnection con = HttpURLConnection) (new URL("http://www.server.com/file.txt";)).openConnection();
    } catch (Exception ex)
    {
    TextArea.print(ex.getMessage());
    }
    [/code:1:b2bb91b2eb]

    Elke keer zegt ex.getMessage(): "com/ms/net/wininet/http/HttpURLConnection"

    Ontzettend vaag dus.
  • kijk ten eerste naar de cast naar HttpURLConnection, daar mis je een haakje.
    ten tweede gebruik je jvc om te compileren?
  • [quote:075986b0f7]
    Op 28-02-2002 15:31, schreef cim:
    kijk ten eerste naar de cast naar HttpURLConnection, daar mis je een haakje.
    ten tweede gebruik je jvc om te compileren?
    [/quote:075986b0f7]

    Dat haakje was een typefout tijdens het overtypen op het forum. :wink:
    Hij compileerde zonder problemen.

    Ik gebruik JDK 1.3 om te compileren.
  • indien je dit probleem met msie(4) ervaart: het schijnt dat de msvm een instantie van com.ms.net.wininet.http.URLConnection aflevert bij het aanroepen van de openConnection() methode, en om de één of andere reden (waarschijnlijk door de cast) een ClassCastException opgooit. probeer deze uitzondering eens expliciet te vangen en de stack trace hiervan uit te printen.
  • [quote:29c87daf69]
    Op 28-02-2002 15:27, schreef RobertV:
    Zo'n soort code ben ik al tegengekomen, maar hij wilt maar niet werken.

    [code:1:29c87daf69]
    try
    {
    HttpURLConnection con = HttpURLConnection) (new URL("http://www.server.com/file.txt";)).openConnection();
    } catch (Exception ex)
    {
    TextArea.print(ex.getMessage());
    }
    [/code:1:29c87daf69]
    [/quote:29c87daf69]

    Je doet hier iets met een cast van een URL.

    De API zegt dit:
    HttpURLConnection(URL u)

    Ik zou dus zeggen dat
    [code:1:29c87daf69]
    HttpURLConnection con = new HttpURLConnection(new URL("http://www.server.com/file.txt";));
    con.connect();
    [/code:1:29c87daf69]
    genoeg zou moeten zijn.

    Misschien klopt dit niet helemaal, maar allicht lost het iets op.
  • Dat had ik al geprobeerd, maar HttpURLConnection is een abstracte class dus dat kon niet.
  • Ik kreeg al vanaf het begin een exception.

    [code:1:48c9cc90e5]
    try
    {
    HttpURLConnection conn = (HttpURLConnection) new URL("http://members1.chello.nl/~h.lai/landscape.jpg";).openConnection();

    TextArea.print("ok";);
    } catch (Exception ex)
    {
    TextArea.print(ex.getMessage() + " " + ex.toString());
    }[/code:1:48c9cc90e5]

    "ok" werd nooit bereikt. Elke keer zegt TextArea:
    com/ms/net/wininet/http/HttpURLConnection java.lang.ClassCastException: com/ms/net/wininet/http/HttpURLConnection
  • lees ook m'n eerdere post

    probeer eens op deze manier te casten
    [code:1:de32af25c0](java.net.HttpURLConnection)new URL("http://…";).openConnection();[/code:1:de32af25c0]
    of anders
    [code:1:de32af25c0](com/ms/net/wininet/http/HttpURLConnection)new URL("http://…";).openConnection();[/code:1:de32af25c0]
    en kijk wat er gebeurt.
    nogmaals, ik denk dat dit een *bug* (of feaure, hoe je wil) is binnen de msvm. test ook eens in appletviewer of een andere vm.

    [ Dit Bericht is bewerkt door: cim op 2002-02-28 19:31 ]
  • com.* paketten worden niet ondersteund in JDK.
  • third-party klassen in (com.*) packages worden wel degelijk ondersteund, zolang ze voor de compiler te vinden zijn. je kan de locatie van deze klassen o.a. middels de classpath switch in javac/java aangeven.

    de standaard ms packages zijn te vinden onder windows/java/packages (het zijn zip bestanden)

    wetenschap hiervan zal je probleem echter niet oplossen daar het feitelijke probleem ligt bij de msvm die om de één of andere duistere reden ipv java.net.URLConnection com.ms.net.wininet.http.HttpURLConnection aflevert bij aanroep van openConnection(). na enig onderzoek schijnt deze klasse ook nog eens private te zijn.

    mijns inziens een loeier van een bug (of wederom, een feature :wink:)
    ik zie op dit moment geen oplossing voor deze bizarre situatie, behalve een andere vm te (laten) gebruiken.

    iig success.
  • TripleE: Embrace, Extend, Exterminate.

    Maar goed, die Java applet die ik maak is sowieso alleen bedoeld voor mensen die Windhoos draaien met MSJVM.
  • Ik heb
    set CLASSPATH=C:WINDOWSJAVAPackages;.
    gedaan, maar dan kan javac com.* nog steeds niet vinden.
  • nogmaals, het gaat hier volgens mij om een bug!

    de msvm levert een instantie van com.ms.net.wininet.http.HttpURLConnection af bij aanroep van URL.openConnection(). dus niet zoals de documentatie van de ms sdk (of, uiteraard, de jdk van sun) zou doen vermoeden een instantie van java.net.URLConnection (of zelfs java.net.HttpURLConnection). de ClassCastException die volgt is dan niet meer zo moeilijk te verklaren: door de cast van klasse com.ms.net.wininet.http.HttpURLConnection naar (ongerelateerde klasse) java.net.HttpURLConnection wordt de uitzondering gegenereerd.

    een expliciete import van klasse com.ms.net.wininet.http.HttpURLConnection geeft tijdens compilatie met jvc de volgende fout: "Cannot access 'HttpURLConnection' – only public classes and interfaces in other packages can be accessed." (jvc zou bij het écht onvindbaar zijn van een klasse of package op een andere manier reageren).

    de statement urlInstantie.openConnection instanceof HttpURLConnection resulteert bij gebruik v/d msvm in de waarde false
    urlInstantie.openConnection().getClass().getName() resulteert echter in 'com.ms.net.wininet.http.HttpURLConnection…'

    zeg jij het maar….
  • je moet trouwens één v/d zip bestanden importeren (de grootste). ook kun je in je register te weten komen waar jvc/msvm z'n standaard klassen vandaan *tovert*. HKEY_LOCAL_MACHINESOFTWAREMicrosoftClasspathClasses op de machine waar ik nu achter zit (win2k)

    maar ik raad je aan om voor ms specifieke extensies etc. de ms sdk voor java of visual j++ te gebruiken.
  • Ik begin onderhand zoiets te krijgen van waarom doe je het niet gewoon zelf? Schrijf een socket, verbind die met de juiste website, verstuur een GET en luister in het antwoord of je een 200 (OK) terugkrijgt… :wink:

    Ik heb even gezocht in de API of ik er iets over kon vinden, maar er stat me iets bij dat alleen JavaServlets verbindingen konden maken en applets dus niet. Dit vanwege veiligheid van de gebruiker ofzo. Ik ben er niet helemaal zeker van, maar ik meen me dit te herinneren van een hoorcollege…

    [ Dit Bericht is bewerkt door: greffov op 2002-03-02 10:03 ]
  • Misschien omdat ik niet weet hoe HTTP precies werkt? :smile:
    Nou ja, ik ga het proberen. Bedankt.
  • [quote:9cfec268d6]
    Op 02-03-2002 9:53, schreef greffov:
    Ik heb even gezocht in de API of ik er iets over kon vinden, maar er stat me iets bij dat alleen JavaServlets verbindingen konden maken en applets dus niet. Dit vanwege veiligheid van de gebruiker ofzo. Ik ben er niet helemaal zeker van, maar ik meen me dit te herinneren van een hoorcollege…[/quote:9cfec268d6]

    Klopt, normale applets kunnen dat ook niet.
    Dat kunnen alleen applets met een handtekening (maar daarvoor moet je natuurlijk weer tonnen geld betalen aan een of ander bedrijf).
    Maar ik heb een enorme Java-beveiligingsgat (of een Java-"feature" :wink: ) in Windows gevonden: (w)jview.exe
    Een applet kan werkelijk alles doen zonder dat de beveiliging een rol speelt.
  • [quote:4f68f8a23a]
    Op 02-03-2002 11:55, schreef RobertV:
    *sinp* …. Maar ik heb een enorme Java-beveiligingsgat (of een Java-"feature" :wink: ) in Windows gevonden: …. *snip*
    [/quote:4f68f8a23a]

    nee, ms-increased-productivity-feature :wink:

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.