Java实现一个简易HTTP服务器 -- 多线程

Posted 臭蛋1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现一个简易HTTP服务器 -- 多线程相关的知识,希望对你有一定的参考价值。

Java实现一个简易HTTP服务器 (二) -- 多线程

运行方法:新建项目后在目录下创建index.html.

favicon为可选项,作为网站图标

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(80);
        System.out.println("Server started at " + new Date() + "\n");
        try {
            while (true) {
                // 通信socket的获得
                Socket socket = serverSocket.accept();
                new Thread(new Handler(socket)).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
            serverSocket.close();
        }
    }
}
public class Handler implements Runnable {

	public Socket socket;
	public static int BUFFERSIZE = 2048;

	public Handler(Socket socket) {
		this.socket = socket;
	}

	public void run() {
		try {
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			byte[] buf = new byte[BUFFERSIZE];

			// 读取数据
			int len = in.read(buf);
			String s = new String(buf, 0, len);
			Request request = new Request(s);
			Logger logger = new Logger(System.out);
			logger.writelog(request.toString()+"\n");
			
			//返回数据
			String path = request.path;
			if (path.equals("/"))
				path = "index.html";
			if (path.equals("/favicon.ico"))
				path = "favicon.ico";
			File file = new File(path);
			InputStream fin = new FileInputStream(file);
			out.write(("HTTP/1.1 200 OK\n" + "Content-Type: text/html" + "\n\n").getBytes());
			while ((len = fin.read(buf)) > 0)
				out.write(buf, 0, len);

			// 关闭连接
			socket.close();
			fin.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

以上是关于Java实现一个简易HTTP服务器 -- 多线程的主要内容,如果未能解决你的问题,请参考以下文章

简易HTTP代理的实现

Java实现一个简易HTTP服务器-- socket

Java实现一个简易HTTP服务器

多线程服务器(简易)

Java 实现一个的基于 NIO 的多线程Web服务器

Java实现阻塞队列简易线程池计时器