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

  • 相关阅读:
    矩阵的概念
    【油猴脚本】00006 案例 Tampermonkey油猴脚本自定义表格列名称,自定义表格表头,自定义表格的thead里的td
    stable-diffusion-webui安装与使用过程中的遇到的error合集
    28、Flink 的SQL之DROP 、ALTER 、INSERT 、ANALYZE 语句
    GFS 分布式文件系统
    React+Vis.js(01):实现基本的网络图
    asp.net core mvc 路由
    【JVM调优实战100例】02——虚拟机栈与本地方法栈调优五例
    Mysql高级语句(视图表 、存储过程、条件语句、循环语句)
    lodash已死?radash最全使用介绍(附源码说明)—— Array方法篇(3)
  • 原文地址:https://blog.csdn.net/luobanggreat/article/details/125428889