不说话,直接上代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
public class HttpServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket();
InetSocketAddress sa = new InetSocketAddress(9090);
ss.bind(sa);
do{
Socket socket = ss.accept();
InputStream ins = socket.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(ins));
String line = bf.readLine();
while(line != null && !"".equals(line)){
System.out.println(line);
if(line .startsWith("GET")){
String[] head = line.split(" ");
String fileName = "C:/Documents and Settings/Administrator/workspace/Test"+ head[1];
System.out.println(fileName);
File f = null;
FileInputStream fin = null;
try{
f = new File(fileName);
fin = new FileInputStream(f);
}catch(Exception e){
//e.printStackTrace();
//404
OutputStream os = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
writeHeader(os, 404, "NOT FOUND:"+head[1]);
bw.write("<h1>Not found!</h1>");
bw.flush();
bw.close();
socket.close();
break;
}
OutputStream os = socket.getOutputStream();
writeHeader(os, 200, "OK");
int c = 0;
byte[] b = new byte[1024];
c = fin.read(b);
while(c != -1){
os.write(b, 0, c);
c = fin.read(b);
};
fin.close();
os.flush();
os.close();
socket.close();
break;
}else{
HttpHeader header = new HttpHeader(line);
System.out.println(header);
}
line = bf.readLine();
}
if(socket.isClosed())continue;
OutputStream os = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
//line = "hello world";
writeHeader(os, 200, "OK");
String body = "<h1>This is hello world !The time is:"+new Date().toLocaleString()+"。世界你好!"+"<h1>";
bw.write(body);
bw.flush();
bw.close();
os.close();
socket.close();
}while(true);
}
public static void writeHeader(OutputStream os, int httpStatus, String statusDesc) throws IOException{
String header = "HTTP/1.1 "+httpStatus+" "+statusDesc+"\n" +
"Server: wbs\n" +
"Content-Type: text/html;charset=utf-8\n" +
"Content-Language: zh-CN\n" +
"Date:"+new Date()+"\n\n";
os.write(header.getBytes());
}
}
class RequestHeader{
private String method;
private String file;
private String protocal;
}
class HttpHeader{
private String key;
private String value;
public HttpHeader(String header){
header = header.trim();
this.key = header.split(": ")[0];
this.value = header.split(": ")[1];
}
public HttpHeader(String key, String value) {
this.key = key;
this.value = value;
}
public String toString(){
return this.key + ": "+this.value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}