package com.chen; import java.io.IOException; import java.io.InputStream; public class Request { private InputStream input ; private String uri; public Request(){} public Request(InputStream input){ this.input = input; } public void parse(){ byte by[] = new byte[2048]; int len = 0; StringBuilder sb = new StringBuilder(); try { //while(len!=-1){ len =input.read(by); System.out.println("len="+len); if(len>0){ sb.append(new String(by,0,len)); } //} } catch (IOException e) { e.printStackTrace (); } this.uri = parseUri(sb.toString()); } private String parseUri(String str) { int index1 , index2 ; index1 = str.indexOf(' '); if(index1!=-1){ index2 = str.indexOf(' ',index1+1); if(index2>index1) return str.substring(index1+1,index2); } return null; } public String getUri() { return uri; } public void setUri { this.uri = uri; } }
Response.java
package com.chen; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; public class Response { private static final int BUFFER_SIZE=1024; private OutputStream output; private Request request ; public Response(){} public Response(OutputStream output){ this.output = output; } public Request getRequest() { return request; } public void setRequest(Request request) { this.request = request; } public void sendStaticResource() throws IOException{ byte[] bytes = new byte[BUFFER_SIZE]; FileInputStream fis = null; try{ System.out.println("uri:"+request.getUri()); File file = new File(HttpServer.WEB_ROOT,request.getUri()); if(file.exists()){ fis = new FileInputStream(file); int ch = fis.read(bytes,0,BUFFER_SIZE); while(ch!=-1){ output.write(bytes,0,ch); ch = fis.read(bytes, 0, BUFFER_SIZE); } }else{ String errorMessage="HTTP/1.1 404 File Not Found\r\n" + "Content-Type:text/html\r\n" + "Content-Length:23\r\n" + "\r\n" + "<h1>File Not Found!</h1>"; output.write(errorMessage.getBytes()); } }catch(Exception e){ e.printStackTrace (); }finally{ if(fis!=null){ fis.close(); } } } }
HttpServer.java
package com.chen; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class HttpServer { public static final String WEB_ROOT=System.getProperty("user.dir") +File.separator+"webroot"; public static final String SHUTDOWN_COMMAND="/SHUTDOWN"; public static void main(String[] args) { HttpServer server = new HttpServer(); server.await(); } private boolean shutdown = false; public void await(){ ServerSocket serverSocket = null; int port = 8080; try{ serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1")); }catch(Exception e){ e.printStackTrace (); System.exit(1); } while(!shutdown){ Socket socket = null; InputStream input = null; OutputStream output = null; try{ socket = serverSocket.accept(); input = socket.getInputStream(); output = socket.getOutputStream(); Request request = new Request(input); request.parse(); Response response = new Response(output); response.setRequest(request); response.sendStaticResource(); socket.close(); }catch(Exception e){ e.printStackTrace (); System.exit(1); } } } }