Avatar billede gedebuk Nybegynder
02. oktober 2002 - 13:42 Der er 9 kommentarer og
2 løsninger

Problemer med URLConnection.getLastModified()

Hejsa!

Jeg har brug for (fra en applet) at finde ud af, hvornår en fil sidst er blevet ændret på en webserver. Det gør jeg ved følgende:
URL url = new URL("http://enelleranden/minfil.txt");
URLConnection urlCon = url.openConnection();
long modified = urlCon.getLastModified();
System.out.println("Ændret: " + new Date(modified));

Problemet er bare, at denne getLastModified()-metode af og til returnerer 0, hvilket betyder 0 ms fra epoken 1. jan. 1970. Og det er jo åbenlyst en fejl!

Efter at have søgt lidt på nettet, har jeg fundet ud af, at det simpelthen (eller sandsynligvis) er en bug (jf. http://forum.java.sun.com/thread.jsp?forum=11&thread=17057).

Er der nogen, der kender til en anden måde at finde ovenstående tidspunkt på, eller at komme uden om bug'en?

På forhånd tak,
Mads
Avatar billede disky Nybegynder
02. oktober 2002 - 13:55 #1
Hvis jeg husker rigtigt kan datoen også findes i Headeren fra den request der bliver sendt.

Ellers kig evt. på sourcekoden til den metode og se om du kan finde fejlen.
Avatar billede gedebuk Nybegynder
02. oktober 2002 - 14:15 #2
Jeg er ikke helt med på, hvad du mener med det første, du skriver...

Jeg har været inde og kigge på sourcekoden for getLastModified-metoden. Den ser ud som følger:
    public long getLastModified() {
    return getHeaderFieldDate("last-modified", 0);
    }

getHeaderFieldDate-metoden ser sådan ud:
    public long getHeaderFieldDate(String name, long Default) {
    try {
        return Date.parse(getHeaderField(name));
    } catch(Throwable t) {}
    return Default;
    }

Det ser alt sammen tilforladeligt ud. Jeg kan ikke lige se, hvad der skulle være galt i hvert fald. (Bruger i øvrigt SDK 1.3.1, hvis det skulle have interesse).
Avatar billede disky Nybegynder
02. oktober 2002 - 14:46 #3
Hmmm siden den returnerer '0' må det skyldes at den Date.parse laver noget ged i det :(


Det jeg mente med det første var det som getLastModified faktisk gør.
Avatar billede gedebuk Nybegynder
02. oktober 2002 - 15:05 #4
Jep, det minder om denne bug: http://developer.java.sun.com/developer/bugParade/bugs/4701742.html , men den skulle tilsyneladende være rettet, så jeg kan ikke rigtigt forstå det.
Avatar billede gedebuk Nybegynder
02. oktober 2002 - 15:08 #5
Øhhh, undskyld, der står faktisk, at ovenstående bug vil IKKE blive rettet... :-(
Avatar billede disky Nybegynder
02. oktober 2002 - 15:23 #6
nedtur :(
Avatar billede gedebuk Nybegynder
02. oktober 2002 - 20:55 #7
Ingen andre, der har et godt forslag?
Avatar billede gedebuk Nybegynder
04. oktober 2002 - 08:21 #8
Ja, jeg har jo ikke helt fået løst mit problem, men jeg vil gerne give dig lidt point alligevel for forsøget, disky. Jeg håber, at det er i orden med dig?
Avatar billede disky Nybegynder
04. oktober 2002 - 10:18 #9
Det er bare okay. :-)
Avatar billede gedebuk Nybegynder
04. oktober 2002 - 11:02 #10
Fino :o)
Avatar billede gedebuk Nybegynder
23. oktober 2002 - 10:55 #11
Jeg kan lige give en status på, hvordan jeg har løst problemet. Problemet viste sig sådan set at ligge et helt andet sted. Gennem en hel del System.out.println's fandt jeg ud af, at getLastModified returnerer 0, når min HttpURLConnection (i modsætning til den tidligere URLConnection) vha. getResponseCode returnerer 403 (betyder 'access forbidden').
Problemet er simpelthen løst ved at slå 'Keep alives' fra på min webserver (IIS). Dette betyder, at jeg hver gang, jeg connecter til webserveren, får HTTPResponseCode 200 (ok), og alt fungerer efter hensigten :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester