百度空间 | 百度首页 
 
查看文章
 
全世界最简单的HTTP服务器
2009-05-02 19:48

/*
* 全世界最简单的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();
            }
        }
    }
}


类别:java基础 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2009-05-16 12:03 | 回复
呵呵,有意思!
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu