Donar med ett länkarkiv. Finns det något användbart i Javas Klassbibliotek som man kan kontrollera så att en URL leder någon vart? Brustna länkar är ju ingen höjdare, och det börjar bli jobbigt att kolla dem manuellt när länkarna börjar komma upp i ett par tusen stycken.
Det ända du kan göra är att göra ett externt program som hämtar alla länkar (antar att de ligger i en databas) och testar och öppnar dem (URL class kombinerat med lite internet saker antar jag). Om den får ett 404:file-not-found svar i headern så kan du flytta den till en annan tabell så kan du kontrollera alla sedan manuellt...
Jag har inte gjort något liknande, men jag antar att du får göra en "web-browser" i miniformat.
Men kolla URL klassen. Tror du kan kolla headern där.
Url myUrl = new Url("http://www.webforum.nu");
if(myUrl.getHeader().getCode().equals("404"))
{
//Fel, flytta på det
}
else
{
//Rätt
}
Detta kommer dock leda till att om en server inte hittas kommer den kanske vara kvar.
Detta blir ju en liten minibrowser eftersom det kommer skickas ett HTTP GET kommando till sidan och hela sidan kommer hämtas. Att öppna sidan som en FileStream eller liknande fungerar då inte.
OBS!!! Koden ovan fungerar inte, men om du kollar javadocen så kan finns det nog funktioner som gör liknande saker
import java.net.HttpURLConnection;
import java.net.URL;
public class LinkChecker {
public boolean checkLink(String linkUrl) {
try {
URL url = new URL(linkUrl);
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
return (urlConn.getResponseCode() != HttpURLConnection.HTTP_NOT_FOUND);
} catch(Exception e) {
return false;
}
}
public static void main(String args[]) {
LinkChecker foo = new LinkChecker();
System.out.println(foo.checkLink("http://www.google.com/nothing.html"));
}
}
Denna funktion returnerar dock alltid true så länge webbservern svarar med någon annan returkod än 404 (HTTP_NOT_FOUND) och inget undantag slängts. Vissa sajter (t.ex webforum) svarar t.ex 302 (HTTP_MOVED_TEMP) och visar en felsida, så detta bör man också räkna som en felaktig länk.
Andra statuskoder som t.ex 500 (HTTP_INTERNAL_ERROR) vill man kanske också räkna som en trasig länk, men det beror på omständigheterna, det kan ju vara ett tillfälligt fel.