• 如何建立自己的简易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

  • 相关阅读:
    【统计学概念】初学者指南:了解置信区间
    面试经验分享
    如何使用“Search quesries“报表数据
    带你Java入门(Java系列1)
    微服务(SpringCloud)使用汇总
    交换机和路由器技术-19-HSRP和PVSTP综合实验
    智能合约语言(eDSL)—— wasmtime实现合约引擎补充
    如何监测 Linux 的磁盘 I/O 性能
    [机缘参悟-73]:深度思考:心智提升的七个阶段
    微信支付密码忘了怎么办
  • 原文地址:https://blog.csdn.net/luobanggreat/article/details/125428889