可能是世界上最简单的web server的java实现 (源码)

J2EE 写了好些年,各种web容器都多多少少用过,却从未想过基本的web server是如何实现的。网上的文章多重于实用,官方文档又过于繁杂,若非机缘巧合,又怎想得到,神秘的web server,实现起来竟是如此简单!

首先,创建一个线程类,每个线程独立处理一个web browser request:

import java.io.*;
import java.net.*;

class WebServerConnection extends Thread {
Socket connection;
public WebServerConnection(Socket connection) {
super();
this.connection = connection;
this.setName("Request No. " + this.getId());
}

@Override
public void run() {
Writer response = null;
try {
Thread.sleep(1000);
response = new OutputStreamWriter(connection.getOutputStream());
response.write(this.getName(), 0, this.getName().length());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

一个简单的请求处理器就这样完成了,它的动作很简单,对任何一个浏览器请求,它的回应都是自己的线程名。接下来要跑一个daemon进程,监听一切来自9090端口的请求,每到达一个请求,都创建一个WebServerConnection线程去处理,然后继续监听端口。该进程只能处理一共threadLimit那么多的请求,数量一到,server 宕掉:

import java.net.*;

public class WebServer {
public static void main(String[] args) {
try {
int threadLimit = 5;
int threadCounter = 0;
ServerSocket sock = new ServerSocket(9090);
while ((threadCounter++) < threadLimit) {
//阻塞进程,直到新的request被侦测到
Socket connection = sock.accept();
//创建处理线程
Thread connect = new WebServerConnection(connection);
connect.start();
}
System.out.println("limit reached, server down!");
} catch (Exception e) {
e.printStackTrace();
}
}
}


运行WebServer,然后在浏览器里输入http://localhost:9090,怎样,看到线程名了不是?多刷几次试试?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值