码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何建立自己的简易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

  • 相关阅读:
    重磅!2022最新SCI影响因子发布,三大名刊NCS及国内期刊TOP10排名有变化(内附2022年最新影响因子)
    【低代码开发_RuoYi_框架】RuoYi框架_前端页面部署/搭建
    保健用品智慧供应链管理系统:精细化管理供应商与采购环节,打造敏捷型供应链
    基于Dockerfile制作镜像
    PHP知识大全
    Vue——webpack项目(没有安装vue-cli脚手架时)解决请求项目启动问题、跨域问题和请求转发报404的问题
    首批48所高校大模型开课“尝鲜”,AI教学赋能计划合作名单公布
    java学习步骤-谷粒商城-个人总结
    《已解决 Go Error: panic: runtime error: index out of range BUG 》
    JavaScript-内置对象
  • 原文地址:https://blog.csdn.net/luobanggreat/article/details/125428889
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号