/*
* 全世界最简单的Http服务器
*/
package httpserver;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
/**
*
* @author Robin
*/
public class Main {
/**
* 默认端口
*/
private static int port = 80;
/**
* 页面存放文件夹
*/
public static String pageHome = null;
/**
* 只能接收一个port参数
*/
public static void main(String[] args) {
if (args.length > 1) {
port = Integer.valueOf(args[0]);
// pageHome = args[1];
}
pageHome = "d:/pages";
execute();
}
/**
* 处理http请求
* @param port
*/
public static void execute() {
System.out.println("服务器已启动,端口:" + port);
while (true) {
try {
ServerSocket server = new ServerSocket(port);
Socket httpConn = null;
try {
httpConn = server.accept();
//获取请求的第一行数据
BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String firstLine = reader.readLine();
if (firstLine == null) {
System.out.println("请求信息不格式不正确");
return;
}
//取请求的页面路径
String[] firstLineArray = firstLine.split(" ");
String pagePath = firstLineArray[1];
//输出流,返回给客户端的信息
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(httpConn.getOutputStream()));
writer.write("HTTP/1.1 200 OK");
writer.write("\r\n");
writer.write("Date:" + new Date().toGMTString());
writer.write("\r\n");
writer.write("\r\n");
//取文件信息
BufferedReader pageReader = new BufferedReader(new InputStreamReader(new FileInputStream(pageHome + pagePath)));
int b = pageReader.read();
while (b != -1) {
writer.write(b);
b = pageReader.read();
}
writer.flush();
} catch (Throwable t) {
t.printStackTrace();
} finally {
if (httpConn != null) {
httpConn.close();
server.close();
}
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}