模拟Tomcat Web Server服务对象工作原理

Http请求头和响应头

说明:HTTP 请求报文由3部分组成(请求行+请求头+请求体)

解析上图

  • 1是请求方法,常用的有增(post)删(delete)改(put)查(get)

  • 2是请求对应的URL地址,他和报文头的Host属性,组合起来是一个完整的请求URL

  • 3是协议名称和协议版本号

  • 4是报文头,有若干个属性,形式为key:val,服务端据此获取客户端信息

  • 5是报文体,它将一个页面表单中的组件值通过param1=val1&parma=2的键值对形式编码成一个格式化串,它承载多个请求参数的数据,不但报文头可以传递请求参数,URL也可以通过/chapter15/user.html? param1=value1&param2=value2”的方式传递数值

  • 自行理解:报文行和报文头就是好比一个人的名字,报文体就好比叫完人名对这个人说的内容,通过url请求叫那个人的名字,也可以带上内容去叫那个人的名字,看那个人,也就是那个服务会响应什么信息给你.

常见的http状态码

  • 200 OK 表示成功

  • 303 重定向,把你重定向到其他页面

  • 304 资源并未修改,可以直接使用本地的缓存

  • 404 找不到页面(页面被删除或其他)

  • 500 服务端错误

开始模拟tomcat web server服务

说明:通过上面的学习认识到http传输协议的书写格式,开始模拟

package com.jt.net;

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**本类用于模拟Tomcat Web Server服务对象工作原理*/
public class Tomcat {
    /*main方法是一个主线程,用来运行webServer*/
    public static void main(String[] args) throws IOException {
        /*ServerSocket是java中服务端对象,括号内写服务器的端口(我们的端口是设置到配置文件中),
        * 并监听端口9999*/
        ServerSocket server=new ServerSocket(9999);
        /*tomcat服务器启动成功提示*/
        System.out.println("server start ok");
        /*添加无限循环*/
        while(true){
            /*server.accept()这个方法是一个阻塞方法,等待客户端连接
            * 在接收到请求localhost:9999的时候才会执行下一步
            * 当没有请求的时候这个方法就会放弃cpu给别的线程使用*/
            Socket client = server.accept();
            /*当有请求发送来的时候会打印客户端对象socket*/
            System.out.println("client="+client);
            /*使用流对象中的输出流对象,后端向客户端发送hello信息*/
            OutputStream out = client.getOutputStream();
            /*浏览器接收后端输出的数据需要遵循http协议,因此需要根据http协议传输数据
            * \r表示回车,把光标移动到左边,\n表示换行,在下一行开始输入*/
            String data="HTTP/1.1 200 OK \n\r"+//响应行
                    "Content-Type: text/html;charset=UTF-8 \n\r"+//响应头
                    "\n\r"+//空行(格式需要,分开消息头和消息体)
                    "hello";//响应体
            /*使用输出流方法响应请求*/
            out.write(data.getBytes());
            /*清空输出流缓冲区*/
            out.flush();
        }

    }
}

启动main方法,在浏览器中输入 localhost:9999,如下图效果则为测试成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值