• 如何建立自己的简易httpserver服务器


    做为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

  • 相关阅读:
    【编译原理】概述
    STM32定时器深入学习
    Dijkstra算法详解
    输入延迟切换系统的预测镇定控制
    Transformer学习路线
    Druid介绍
    通过API爬取到的淘宝商品详情数据展示(api测试入口)
    SpringBoot banner 样式 自动生成
    请问如何在proteus里画出电压器两边的箭头?
    笔记1.4 计算机网络性能
  • 原文地址:https://blog.csdn.net/luobanggreat/article/details/125428889