设为首页 加入收藏

TOP

day02-实现01(四)
2023-07-25 21:33:32 】 浏览:89
Tags:day02- 实现
lic MyResponse(OutputStream outputStream) { this.outputStream = outputStream; } //当我们需要给浏览器返回数据时,可以通过MyResponse的属性获得输出流 public OutputStream getOutputStream() { return outputStream; } }

3.2.3修改RequestHandler

package com.li.MyTomcat.hander;

import com.li.MyTomcat.http.MyRequest;
import com.li.MyTomcat.http.MyResponse;

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

/**
 * @author 李
 * @version 1.0
 * RequestHandler是一个线程对象
 * 用来处理一个http请求
 */
public class RequestHandler implements Runnable {
    //定义一个Socket
    private Socket socket = null;

    //在创建RequestHandler对象的时候,将主线程的socket传给线程对象来使用
    public RequestHandler(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        //对客户端进行交互

        try {
            System.out.println("当前线程=" + Thread.currentThread().getName());

            InputStream inputStream = socket.getInputStream();

            MyRequest myRequest = new MyRequest(inputStream);
            String num1 = myRequest.getParameter("num1");
            String num2 = myRequest.getParameter("num2");
            String name = myRequest.getParameter("name");
            String email = myRequest.getParameter("email");
            System.out.println("请求的参数num1= " + num1);
            System.out.println("请求的参数num2= " + num2);
            System.out.println("请求的参数name= " + name);
            System.out.println("请求的参数email= " + email);
            System.out.println(myRequest);

            //这里我们可以通过myResponse对象返回数据给客户端
            MyResponse myResponse = new MyResponse(socket.getOutputStream());
            String resp = MyResponse.respHeader + "<h1>Hello,我是myResponse返回的信息</h1>";
            //这里的应用场景是:为了将来在Servlet中使用response对象,可以获取到输出流
            OutputStream outputStream = myResponse.getOutputStream();
            outputStream.write(resp.getBytes());
            outputStream.flush();
            outputStream.close();

            inputStream.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //一定要确保socket关闭
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

MyTomcatV2类保持不变。

3.2.4测试

运行MyTomcatV2,在浏览器中输入如下请求:

http://localhost:8080/myCalServlet?num1=100&num2=200&name=jack&email=jack@qq.com

浏览器输出:

image-20221116224126564

后台输出:

image-20221116224012344
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java8 (jdk 1.8) 新特性——Lambda 下一篇Seata 1.5.2 源码学习(Client端)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目