实现一个简易版的Tomcat(五)

前言

此版本测试给客户端响应一个页面回去

在这个版本中我们要了解两个知识点:
1:HTML页面的基本语法。
2:HTTP响应的格式定义。因为只有基于该格式要求才能给客户端发送响应。


实现:

一、创建页面

  1. 在项目目录下新建一个目录webapps.
    这个目录用于保存服务端所有的网络应用(webapp),每个网络应用在
    webapps下单独以一个目录形式保存。目录命名就作为网络应用的名字。

    注意:每个网络应用相当于一个"网站",会包含如:页面、素材、以及用于
    处理业务的逻辑代码。

  2. 在webapps下新建第一个子目录作为第一个网络应用取名为:myweb(如上图)
  3. 在myweb目录下新建第一个页面:index.html 通过该页面我们了解HTML页面的基本语法和结构。
  4.  页面如下(页面不是重点,比较简陋^_^):
    <html>
        <head>
            <meta charset="UTF-8">
            <title>我的首页</title>
        </head>
        <body>
        <center>
            <h1>百度</h1>
            <input type="text" size="32">
            <input type="button" value="百度一下" onclick="alert('别点了!')">
        </center>
        </body>
    </html>

     

二、响应回复

在ClientHandler中的第三步响应客户端中,将刚刚定义的页面通过发送一个标准的HTTP响应回复给客户端。

并测试浏览器在请求服务端后是否可以正确收到响应并将该页面展示到浏览器上。
(响应的具体格式参照第一篇文章)

上代码:

File file = new File("webapps/myweb/index.html");

            OutputStream out = socket.getOutputStream();
            //发送一个响应
            //1.发送状态行
            String line = "HTTP/1.1 200 OK";
            out.write(line.getBytes("ISO8859-1"));
            out.write(13);
            out.write(10);

            //2.发送响应头
            line = "Content-Type: text/html";
            out.write(line.getBytes("ISO8859-1"));
            out.write(13);
            out.write(10);

            line = "Content-Length: "+file.length();
            out.write(line.getBytes("ISO8859-1"));
            out.write(13);
            out.write(10);

            //单独发送CRLF表示响应头发送完毕
            out.write(13);
            out.write(10);

            //3.发送响应正文
            FileInputStream fis = new FileInputStream(file);
            int len;
            byte[] data = new byte[1024 * 8];
            while ((len = fis.read(data)) != -1) {
                out.write(data, 0, len);
            }

            System.out.println("响应客户端完毕!");

 


此版本到此结束,下个版本完成根据客户端请求的页面进行响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值