做为java文本开发人员对开发web应用并不陌生,那么有人去研究过我们使用的http中间件服务器tomat是用用什么原理开发的呢?
我们能不能自己开发一个tcp服务器呢,答案时可以的:
我们简要分析下http服务器需要哪些东西:
1、能够开端口接收请求
2、能够获取请求的url和参数
3、处理请求参数内容
4、输出请求的结构
5、处理大并发里面的请求
这里我们用sun公司的com.sun.net.httpserver.HttpServer类实现以上功能
1、开端口接收请求
HttpServer httpServer = HttpServer.create(new InetSocketAddress(8088), 0);
2、获取请求url和参数
httpExchange.getRequestURI().getPath();
String paramStr = "";
if (httpExchange.getRequestMethod().equals("GET")) {
// GET请求参数
paramStr = httpExchange.getRequestURI().getQuery();
} else {
// POST请求参数
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(httpExchange.getRequestBody(),
"utf-8"));
StringBuilder requestBodyContent = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
requestBodyContent.append(line);
}
paramStr = requestBodyContent.toString();
}
return paramStr;
3、获取请求参数内容和输出文本,这里以读取文件为例:
OutputStream out = null;
FileInputStream in = null;
File file = new File(filePath);
in = new FileInputStream(fileDir + filePath);
httpExchange.getResponseHeaders().add("Content-Type:",
"text/html;charset=utf-8");
httpExchange.sendResponseHeaders(200,file.length());
out = httpExchange.getResponseBody();
int len = 0;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.flush();
out.close();
5、并发,后续文章再处理
详细代码见github