Java>网络编程、ServerSocket、Thread、Runnable 案例:简易版Tomcat

《 所需前端文件 》
链接:https://pan.baidu.com/s/1iOJWnagvSUSipU8wkCxDlQ
提取码:6666
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V5的分享
视频讲解地址
https://www.bilibili.com/video/BV1uJ411k7wy?p=418


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TomcatDome {
    
    
    public static void main(String[] args) throws IOException {
    
    
        // create network socket object
        // 创建一个server socket对象
        ServerSocket server_socket = new ServerSocket(2323);

        while (true){
    
    
            // get inputStream object
            // 获取socket对象
            Socket socket = server_socket.accept();

            // 创建多线程,当出现请求时,开辟一条新的线程
            new Thread(new Runnable() {
    
    
                @Override
                public void run() {
    
    
                    try {
    
    
                        // get request data
                        // 获取请求的数据
                        InputStream inputStream = socket.getInputStream();
                        byte[] html_data = new byte[1024];
                        int len = 0;
                        // 将字节输入流转换为 字符缓冲输入流
                        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

                        // get top line data
                        // 获取第一行数据
                        String string_line = bufferedReader.readLine();
                        // split data
                        // 将数据进行切割
                        String[] split_after = string_line.split(" ");
                        // continue split  , get path
                        // 接续切割,获取需要访问的文件路径
                        String result_path = split_after[1].substring(1);

                        // show path
                        // 显示路径信息
                        System.out.println(result_path);


                        // return data
                        // 返回数据
                        // create fileInputStream object , write path
                        // 创建文件输入流,将路径信息下的文件信息读取到内存中
                        FileInputStream fileInputStream = new FileInputStream(result_path);

                        // get outputStream object
                        // 创建网络输出流对象
                        OutputStream os = socket.getOutputStream();

                        // creat head file
                        // 编写头文件,使浏览器可以解析一下数据
                        os.write("HTTP/1.1 200 OK\r\n".getBytes());
                        os.write("Content-Type:text/html\r\n".getBytes());
                        os.write("\r\n".getBytes());

                        // every time read size
                        // 设置每次返回数据的大小
                        byte[] return_data = new byte[1024];
                        len = 0;
                        // ergodic write browser
                        // 将数据遍历写入浏览器
                        while ((len = fileInputStream.read(return_data)) != -1) {
    
    
                            // show get data
                            // 显示数据
                            // System.out.println(new String(return_data));

                            // will data write browser
                            // 将数据写入浏览器
                            os.write(return_data);
                        }
                        // close stream
                        // 关闭流
                        fileInputStream.close();
                        socket.close();
                        // server_socket.close();
                    }catch (IOException e){
    
    
                        // e.printStackTrace();
                    }

                }
            }).start();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43309893/article/details/116239404