07. marts 2013 - 22:44Der er
36 kommentarer og 1 løsning
Http webserver - tutorials/hints
Sidder og vil prøve at lave en webserver i java. Den skal kunne forstå http/1.0 og GET requests. Derudover skal den gerne kunne tilbyde at vise filer fra et www directory og sende en http 200 besked tilbage, samt filens indhold. i 200 requestens header skulle der også gerne være nogle linjer der viser filtype og filstørrelse. Man skulle gerne kunne tilgå filerne via browseren, men har ikke rigtig nogen ide om hvordan eller hvad der skal skrives i browseren for at gøre dette.
Jeg synes virkelig jeg har ledt over alt for at finde nogle guides/tutorials, men kan kun finde færdige løsninger uden forklaringer. Så håber at nogen herinde ligger inde med noget der kunne hjælpe mig på vej
det er for at lære noget. og skulle gerne ende op med ovenstående. det ville være super med guide til socket(thread) programmering der bygger op til at lave en webserver.
når du siger et simpelt design, hvordan mener du så?
main med serversocket og en loekke som accepterer en socket og saa starter en traad til at haandtere request (hvis request faar sit eget objekt og socket sendes med over i constructor).
Det kan laves rimeligt simpelt.
Start med at lade alle request modtage "OK" tilbage og byg saa ovenpaa dette.
hmm okay.. hvordan ville det se ud? ved ikke hvordan man laver det fordi jeg ikke kan finde nogle eksempler eller guides der beskriver det fra bunden af.
Hvad gør en request helt præcis? er det noget med at spørger om en fil finde og så få en fejl eller informationer retur?
public class SimpelHttpServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(88); while(true) { Socket s = ss.accept(); (new RequestHandler(s)).start(); } } catch (IOException e) { e.printStackTrace(); } } }
Fedt! Hvordan ville klient siden se ud til den? er jeg også ret meget i tvivl om hvordan skal se ud og hvilken slags input der ind. Er også i tvivl om: - hvor man skal placerer sine filer hvis der f.eks. skal spørges efter en html side e.l.?
- Hvad man skal skrive i sin browser for at få adgang til java serveren? er det en ip adresse eller portnummer eller noget helt tredje?
men ovenstående returnerer OK 200 uanset hvad man spørger efter ikke?
okay min #8 kommentar var jeg vist lige lidt for hurtig med at skrive. jeg prøver igen: - Hvordan ville klient siden/programmet til den se ud? - Hvilken slags input skal den have? altså fra klienten - Hvor skal man placerer de filer man vil spørge efter? f.eks. html sider osv.? - Hvordan får man adgang til serveren gennem browseren? er det ved at skrive ip, portnummer eller noget helt tredje i adresse feltet?
hvor ville man så typisk returnere filer fra ? prøvede lige at lave lidt om i det der skulle skrives til browseren i dit eksempel(det hvor der står path oscv.), hvor jeg tilføjede lidt html, men det kunne den ikke vise i browserer. Den udskrev bare html koden. Men det kan den måske godt hvis man tager indholdet fra en html fil og udskriver det i browseren med sin java server? kan man få indholdet fra en html fil ved at bruge FileInputStream? eller er det ikke det mest hensigtsmæssige?
hvordan kan jeg få den til at vise et billede i browseren. Det går helt fint med at læse html filer ind i browseren. Har forstået at der ved billeder skal bruges image/jpg istedet for text/html, men det er vel ikke det eneste der skal gøres. Har læst noget med at man skal læse bytes ind og på en eller anden måde smide det videre, men kan ikke helt finde ud af hvordan det skal gøres.
Prøvede først at gøre sådan her, men det virkede selvfølgelig ikke med billedet:
nu viser den et "knækket billed ikon", som om den prøver at hente et billede der ikke findes. Men har tjekket den path der bliver brugt og den passer. Kan ikke helt finde ud af hvad der er galt med koden.
File f = new File("C:/javaServer/"+path); String fString = f.getPath();
if (!f.isFile() && !f.canRead()) { f = new File("C:/javaServer/errorPage.html"); }
kan ikke helt finde ud af hvad OutputStream skal have som input. man kan nemlig ikke bare skrive: os = new OutputStream(); i eclipse siger den noget med "cannot instantiate the type OutputStream".
hvad betyder det 0 forresten? er der hvor den skal starte med at læse fra i byte arrayet?
nej det har du da ret i. men prøvede lige at tilføje det til visning af html filer pw.printf("Content-Type: text/html"); String pageContent = ""; pageContent = getContent.getHtmlContent(f); pw.printf(pageContent);
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.