Java-1020

Http请求结构

请求消息数据格式:对应request 4部分

  1. 请求行

    请求方式	请求URL				请求协议/版本
    GET			 /login.html 	HTTP/1.1
    
    
    1. 请求方式: HTTP有7中,常用两种:POST GET
      1. GET:
        1. 请求参数在请求行中(url后)
        2. 请求的url长度有限制
        3. get请求不太安全(参数太显眼)
      2. POST:
        1. 请求参数在请求体中(表单中)
        2. url长度没有限制的
        3. 相对安全
  2. 请求头(键值对的形式)请求头名称:请求头值

    1. Host:localhost

    2. User-Agent: 浏览器告诉服务器,我访问你使用的浏览器版本信息
      1. 可以在服务器端获取该头的信息,来解决浏览器的兼容性问题
    3. Accept:告诉服务器,浏览器可以响应什么样的信息格式

    4. Accept-Language:可以接受的语言格式

    5. Referer:告诉服务器我(当前请求)从哪里来
      1. 作用一:防盗链
      2. 作用二:统计工作
    6. Connection:表示自己链接是否还活着

  3. 请求空行

    就是单纯的一个空行,用于分割POST请求头和请求体

  4. 请求体. get是没有请求体的,post有请求体

    1. 作用:封装post请求消息的请求参数的

Request

接收响应请求的五步:
请添加图片描述

  1. request对象和response对象的原理

    1. request和response由服务器创建的,我们只是使用
    2. request对象是来获取请求消息,response对象是来设置响应消息
  2. request对象继承的体系结构:

    1. ServletRequest对象:
    2. HttpServletRequest对象:(继承ServletRequest)
    3. tomcat对httpServletRequest的实现类:RequestFacade
  3. request:,获取Http请求格式里面的四个部分信息

    1. 获取请求消息

      1. 获取请求行数据

        1. 请求行的格式: GET /java2022/demo1?username=marx HTTP/1.1
        2. 方法:
          1. 获取请求方式: String getMethod() ——> GET
            1. 内部已经用于判断方法并进行分发,我们基本用不上
          2. *获取虚拟目录: String getContextPath() ——> /java2022
            1.
          3. 获取Servlet路径 : String getServletPath() ——> /demo1
          4. 获取get方式的请求参数: String getQueryString() ——> username=marx
          5. *获取请求URI :
            1. String getRequestURI() ——> /java2022/demo1
            2. String getRequestURL() ——> http://localhost/java2022/demo1
            3. URL:统一资源定位符
            4. URI:统一资源标识符
          6. 获取协议及版本: String getProtocol() ——> HTTP/1.1
          7. 获取客户机的IP地址 :String getRemoteAddr() ——>
      2. 获取请求头数据

        1. 方法:

          1. (*)String getHeader(String name) : 通过请求头的名称获取请求头的值
          2. Enumeration<String> getHeaderNames( ) :获取所有请求头名称
          //1.获取所有请求头名称
                  Enumeration<String> headerNames = request.getHeaderNames();
          
                  while (headerNames.hasMoreElements()){
                      String name = headerNames.nextElement();
          
                      //2.通过请求头的名称获取请求头的值
                      String value = request.getHeader(name);
                      System.out.println(name+" : "+value);
                  }
          

          一般常用第一个方法:因为常用的请求头我们是知道的。

          //  演示获取请求头数据:user-agent
                  String agent = request.getHeader("user-agent");
                  System.out.println(agent);
          
                  // 判断agent浏览器版本
                  if(agent.contains("Chrome")){
                      System.out.println("谷歌浏览器");
                  }else if(agent.contains("Firefox")){
                      System.out.println("火狐浏览器");
                  }else if(agent.contains("Safari")){
                      System.out.println("safari浏览器");
                  }
              }
          

          获取referer,可以实现防盗链

          String referer =  request.getHeader("referer");
          System.out.println(referer);
          

          防盗链操作里面:新建了一个项目,并且创建了新的tomcat服务器实现同时启动,修改两个端口,然后右上角分别将两个启动起来

      3. 获取请求体数据

        1. 只有post才有请求体,在请求体中封装了POST请求参数
        2. 步骤:
          1. 获取流对象
            1. 字符数据:字符流
              1. BufferedReader getReader() :获取自负输入流,只能操作字符数据
            2. 文件图片等字节流数据:字节流
              1. ServletInputStream getInputStream() : 获取字节输入流,可以操作所有类型的数据,操作字符数据也可以,但是不方便
          2. 再从流对象中拿数据
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值