手写简易版Tomcat第一天

本文详细介绍了如何通过Java编程,利用socket、多线程、I/O文件编程等技术创建一个简单的HTTP服务器,使得浏览器能访问8080端口,并处理基本的HTTP请求,如显示静态页面。

前言

        这次需要用到的技术:socket网络编程,多线程,I/O文件编程,反射,Http协议,集合等技术。以及我们自定义一套Servlet规范。

代码实现

首先要实现通过浏览器访问到自己的服务器,就像Tomcat一样,访问8080端口会展示的那个默认页面一样。

public class MyTomCat {

    public static void main(String[] args) {
        try {
            //监听8080端口
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("我的服务器启动成功...");
            //socket没接收到关闭事件之前不退出循环
            while (!serverSocket.isClosed()) {
                System.out.println("等待连接...");
                //等待连接,该事件会阻塞线程
                Socket socket = serverSocket.accept();
                System.out.println("连接成功...");
                //获取与该浏览器的输入流
                InputStream inputStream = socket.getInputStream();
                //设置编码为UTF-8,并以字符的形式读取
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
                String msg = null;
                //循环读取
                while ((msg = bufferedReader.readLine()) != null) {
                    if (msg.length() == 0) {
                        break;
                    }
                    //讲读取的信息打印在控制台上
                    System.out.println(msg);
                }

                //读取完毕后,进行一个简单响应
                OutputStream outputStream = socket.getOutputStream();
                String responseHead = "HTTP/1.1 200\n" +
                        "Content-Type: text/html;charset=utf-8\r\n\r\n";
                String responseBody = "这是一个简单的展示页面";
                String response = responseHead + responseBody;
                //将数据展示给浏览器
                outputStream.write(response.getBytes());
                outputStream.close();
                inputStream.close();
                socket.close();
                System.out.println("断开连接...");
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("服务器启动失败");
        }
    }
}

 使用浏览器访问localhost:8080地址

观察控制台输出 

由于我使用的是Edge浏览器,他除了访问8080端口外还访问了另一个地址

/favicon.ico,该请求似乎是访问收藏夹等按钮的个性图标,并无大碍,介意的可以使用火狐浏览器,火狐只会访问8080端口。

 至此,实现了浏览器与服务器之间的通信

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmbwcx2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值