首页 > 编程语言 >java 实现简单的http服务器

java 实现简单的http服务器

时间:2023-04-21 11:45:42浏览次数:34  
标签:outputStream java socket import 服务器 http String

1、废话不多说,代码如下

package com.linhuaming.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * http服务器 测试
 */
public class HttpServerTest {

    public static void main(String[] args) throws IOException {
        // ServerSocket指定端口port
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("启动服务---port:8080");

        while(true){
            // 阻塞到有连接访问,拿到socket
            Socket socket = serverSocket.accept();
            System.out.println("get socket from:"+socket.hashCode());

            // STEP. 启动线程
            new Thread(()->{
                try {
                    // STEP. 获取输入流、输出流
                    OutputStream outputStream = null;
                    InputStream inputStream = null;
                    inputStream = socket.getInputStream();
                    outputStream = socket.getOutputStream();

                    // STEP. 获取输入内容
                    byte[] bytes = new byte[inputStream.available()];
                    int result = inputStream.read(bytes);
                    if (result != -1) {
                        System.out.println(new String(bytes));
                    }

                    // STEP. 响应内容
                    // http 状态
                    String httpStatus = "200 OK";
                    // String httpStatus = "404 Not Found";
                    // String httpStatus = "500 Internal Server Error";

                    // 状态行、响应头部、空行、响应信息
                    String body = "<h1>hello</h1>";
                    String responseStatusLine = "HTTP/1.1 "+httpStatus+"\r\n";
                    String responseHeader = "";
                    responseHeader += "Content-Length: " + body.getBytes().length + "\r\n";
                    responseHeader += "Content-Type: text/html; charset-utf-8\r\n";
                    String responseLine = "\r\n";
                    String responseBody = body + "\r\n";
                    String response = responseStatusLine + responseHeader +responseLine + responseBody;

                    // 输出响应内容、关闭流
                    outputStream.write(response.getBytes());//按照协议,将返回请求由outputStream写入
                    outputStream.flush();
                    socket.shutdownInput();
                    socket.shutdownOutput();
                    socket.close();
                }catch (Exception e){
                    e.printStackTrace();
                }

            },String.valueOf(socket.hashCode())).start();
        }
    }

}


2、打开postman、chrome浏览器都可以,访问http://127.0.0.1:8080/test 即可,如下图所示

postman 访问

chrome 访问

标签:outputStream,java,socket,import,服务器,http,String
From: https://www.cnblogs.com/linhuaming/p/17339833.html

相关文章

  • JAVA wait(), notify(),sleep详解
    开了博客后,一直也没在上面发布过文章,直到前一段时间与一位前辈的对话,才发现技术博客的重要,立志要把博客建好。但一直没有找到好的开篇的主题,今天再看JAVA线程互斥、同步的时候又有了新的体会,就以他作为开篇吧。   在JAVA中,是没有类似于PV操作、进程互斥等相关的方法的。JAVA的......
  • Java transient关键字
    Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。     Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的......
  • Socks5代理与HTTP代理:基本概念、工作原理和在网络应用中的应用
      在互联网上,代理服务器是一种非常重要的技术手段,可以实现许多网络应用的高效和安全运行。Socks5代理和HTTP代理是两种常见的代理服务器类型,它们在网络应用中都有着重要的作用。本文将介绍Socks5代理和HTTP代理的基本概念、工作原理以及在网络应用中的应用。第一部分:Socks5代理......
  • 在Java代码中更优雅地调用Kotlin
    -Kotlin与Java良好的互操作性是其能够快速普及的原因之一。从Java虽然可以访问Kotlin,但是通过下面这些技巧可以让对Kotlin的访问变得更加友好和地道@JvmStaticKotlin中可以使用objectclass创建单例objectAnalytics{funinit(){...}funsend(event:Event){...}......
  • JAVA中的规则
    是看的尚硅谷的教材粘贴过来的,只是自己记录。如何看懂UML类图?没有好记性就多看几遍UML(UnifiedModelingLanguage,统一建模语言),用来描述软件模型和架的图形化语言。常用的UML工具软件有PowerDesinger、Rose和EnterpriseArchitect.UML工具软件不仅可以绘制软件开发中所......
  • 检查java的class文件版本
     packagetest;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;publicclassCheckClassVersion{publicstaticvoidmain(String[]......
  • java堆栈方法区
    原文地址zhuanlan.zhihu.comjava堆栈方法区残枫cps​目录收起栈区堆区方法区栈区栈区描述的是方法执行的内存模型。每个方法在执行时都会创建一个栈帧(存放存储局部变量、操作数栈、动态链接、方法出口等)JVM为每个线程创建一个栈,栈属于线程私有,不能实现线程间的共享!用......
  • 服务器填表用到的一些名词
    https://www.yzktw.com.cn/post/315161.html数据名称是什么意思是指创建数据库时所命名的标识名字,用户名和密码登录数据库软件的凭证。数据库用户即使用和共享数据库资源的人。database_name数据库的名称。数据库名称在服务器中必须唯一,并且符合标识符的规则。database_name最......
  • JavaScript 测试及效验工具
    JavaScript是一款强大的广泛运用于现代Web站点及应用的脚本语言。作为一个技艺精湛的Web开发者,掌握JavaScript可以增强用户的使用体验,提供交互及富客户端等功能。尽管JavaScript的语法非常简单,但对于写程序而言仍然是困难重重,就是因为它的运行环境:基于Web浏览器。以下您可以看......
  • Java技术_基础技术(0003)_类执行顺序详解+实例(阿里面试题)+详细讲解+流程图
    一、总体原则列出执行顺序的原则(这里本人出了简化,比较明了。可能有漏的,请帮忙补充,但应付该实例足以):  ==父类先于子类;  ==静态先于非静态;  ==变量和块先于构造方法;  ==变量声明先于执行(变量赋值、块执行);(这一点是根据数据在内存中是如何存储的得出的,基本类型、对象、......