Request.java
Response.java
HttpServer.java
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(String uri) {
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);
}
}
}
}