设为首页 加入收藏

TOP

day02-实现01(三)
2023-07-25 21:33:32 】 浏览:90
Tags:day02- 实现
.这里先考虑get请求 */ public class MyRequest { private String method; private String uri; //存放参数列表 参数名-参数值=>HashMap private HashMap<String, String> parametersMapping = new HashMap<>(); private InputStream inputStream = null; //构造器==>对http请求进行封装 //在构造 MyRequest对象的时候,将关联的socket的InputStream传进来 // 这样就可以拿到该http请求的数据 public MyRequest(InputStream inputStream) { this.inputStream = inputStream; packageHttp(); } /** * 将http请求的相关参数进行封装,然后提供相关的方法,进行获取 */ public void packageHttp() { System.out.println("MyRequest packageHttp()被调用..."); try { //将字节流转成字符流 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); /** * GET /myCalServlet?num1=11&num2=12 HTTP/1.1 * Host: localhost:8080 * User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0 * ...... */ //1.先读取第一行(请求行) String requestLine = bufferedReader.readLine(); //第0组:GET 第1组:/myCalServlet?num1=11&num2=12 第2组:HTTP/1.1 String[] requestLineArr = requestLine.split(" "); //2.得到method method = requestLineArr[0]; //3.解析得到uri=/myCalServlet //先看看uri有没有参数列表 int index = requestLineArr[1].indexOf("?");//找到?号的索引 if (index == -1) {//没有问号,说明uri没有参数列表 uri = requestLineArr[1]; } else { //截取到?号的前一位,即为uri uri = requestLineArr[1].substring(0, index); //获取参数列表 String parameters = requestLineArr[1].substring(index + 1);//parameters => num1=11&num2=12 String[] parametersPair = parameters.split("&");//parametersPair=["num1=11","num2=12",...] //防止浏览器的提交的地址为 /myCalServlet? if (null != parametersPair && !"".equals(parametersPair)) { //再分割 for (String parameterPair : parametersPair) { //parameterVal=["num1","10"] String[] parameterVal = parameterPair.split("="); if (parameterVal.length == 2) { //放入到parametersMapping中 parametersMapping.put(parameterVal[0], parameterVal[1]); } } } } //这里不能关闭流inputStream,因为inputStream和socket关联, // 如果关闭了inputStream则socket也会一起关闭 } catch (Exception e) { e.printStackTrace(); } } //request有一个特别重要的方法-getParameter() public String getParameter(String name) { if (parametersMapping.containsKey(name)) { return parametersMapping.get(name); } else { return ""; } } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public String getUri() { return uri; } public void setUri(String uri) { this.uri = uri; } @Override public String toString() { return "MyRequest{" + "method='" + method + '\'' + ", uri='" + uri + '\'' + ", parametersMapping=\n" + parametersMapping + '}'; } }

3.2.2MyResponse

package com.li.MyTomcat.http;

import java.io.OutputStream;

/**
 * @author 李
 * @version 1.0
 * 1.MyResponse可以封装OutputStream(和socket关联)
 * 2.即可以通过 MyResponse对象返回http响应给浏览器或客户端
 * 3.MyResponse的作用等价于原生的Servlet的HttpServletResponse
 */
public class MyResponse {
    private OutputStream outputStream = null;

    //写一个http的响应头
    public static final String respHeader = "HTTP/1.1 200 OK\r\n" +
            "Content-Type: text/html;charset=utf-8\r\n\r\n";

    //在构造 MyResponse 对象的时候,将关联的socket的OutputStream传进来
    pub
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java8 (jdk 1.8) 新特性——Lambda 下一篇Seata 1.5.2 源码学习(Client端)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目