JavaWebDay02

HTTP协议概述

  • HTTP(HyperText Transfer Protocol):超文本传输协议

  • 作用:用于浏览器与服务器之间的数据传输,规定了浏览器和服务器的传输格式

  • 组成:

    • 请求:浏览器发送数据到服务器的过程

    • 响应:服务器返回数据到浏览器的过程

  • 特点:

    • 无状态

      协议对客户端没有状态存储,对事务处理没有“记忆”能力

    • 无连接

      HTTP/1.1之前,由于无状态的特点,每次请求都需要通过TCP三次挥手四次握手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。

    • 基于请求和响应

      基本的特性,由客户端发起请求,服务器响应

    • 简单快速、灵活

    • 通信使用明文、请求和响应不会对通信方进行确实、无法保护数据的完整性。

HTTP请求概述

组成

请求行,请求头,请求体

请求行概述

  • 请求行格式

    POST请求:POST /day02/login HTTP/1.1

    GET请求:GET /day02/login?username=jack&pwd=111 HTTP/1.1

  • 请求行组成

    • 请求方式

    • 请求地址

    • 协议和版本

      POST方式 GET方式
    地址栏 数据在请求体中发送,所以不在地址栏上显示 数据在请求行上发送,所以在地址栏上可以看见参数
    大小 理论上没有限制 不同的浏览器有区别,1k
    安全性 更高 更低
    缓存 POST邮寄,发送数据不使用本地缓存 GET从服务器上获取数据,会使用缓存。如果本地浏览器已经缓存了页面,而且服务器的数据也没有修改,不再从服务器上得到数据

    获取请求行相关方法

    HttpServletRequest对象的方法 功能说明
    String getMethod() 获得请求方式
    String getRequestURI() 获得统一资源标识符
    StringBuffer getRequestURL() 获得统一资源定位符:网址
    String getProtocol() 获得协议和版本
    String getContextPath() 获取项目访问路径
    String getRemoteAddr() 获取客户端IP地址

    请求头概述

    常见请求头 作用
    Referer 服务器端获取浏览器上一次访问的地址
    If-Modified-Since 服务器端获取浏览器缓存页面的时间
    User-Agent 服务器端获取客户端操作系统类型和浏览器类型
    Connection 获得HTTP协议连接状态 保持连接 keep-alive 断开连接 close
    Host 获取服务器的地址和端口

    获取请求头相关方法

    HttpServletRequest对象的方法 功能描述
    String getHeader(String headName) 根据请求头名获得值
    Enumertion<String> getHeaderNames() 获得所有请求头的名 返回一个迭代器 hasMoreElement:判断是否还有下一个元素 nextElement:获得下一个元素

    请求体概述

    用户输入的内容

    只要用户输入的并提交给服务器的数据都可以统称为请求参数(请求体)

    POST才有请求体,GET没有

    HttpServletRequest对象的方法 描述
    String getParameter(String name) 根据参数名获得参数值
    String[] getParameterValues(String name) 根据参数名获得多个参数值 返回是数组
    Enumeration<String> getParameterNames() 获得所有请求参数的名字 返回迭代器对象
    Map<String,String[]> getParameterMap() 获得所有请求参数信息 返回map集合 key:参数名 value:参数值

    BeanUtils工具使用-封装参数

    BeanUtils常用方法 作用
    void populate(Object bean, Map<String, Object> properties) 将map集合的数据封装到指定的bean对象 简单记忆:后付钱(后面的参数赋值给前面的对象)

    使用条件

    • 类必须是public修饰的

    • 类必须有public的无参构造方法

    • 成员变量必须有对应的getter和setter方法

    参数的乱码问题

    乱码原因:Tomcat默认使用欧洲码表(ISO-8859-1:不支持汉字)解码参数

    解决办法:

    在获取请求参数之前通过请求对象的方法设置解码使用的码表,

    代码:request.setCharacterEncoding("utf8");

    Tomcat8.0开始,GET方式请求不需要考虑乱码问题了,如果使用Tomcat8.0之前的版本,则也需要手动处理乱码问题,详情参考:https://blog.csdn.net/lxf512666/article/details/52939573/

    转发与重定向

     转发和重定向的作用:实现页面的跳转
         
     实现转发和重定向的方法
          转发的方法:request.getRequestDispatcher("要转发的页面地址").forward(request,response);
          重定向方法:response.sendRedirect("重定向方法")
    区别 转发 重定向
    地址栏 不会变化 会变成重定向的页面地址
    跳转位置 服务器内部 浏览器
    请求次数 1次 2次
    请求域数据 不会丢失 会丢失
    • 面试题:转发或重定向后续代码还会执行吗?

      会,但没有意义了

    • 面试题:什么时候使用转发,什么时候使用重定向?

      如果需要共享请求域的数据,则只能使用转发,否则可以随便选择。

    Servlet作用域概述

    • 作用域就是服务器端的一小块内存区域,底层结构就是一个map集合,用于Servlet之间共享数据

    • Servlet的三个作用域:

      请求域、会话域、上下文域

    • 请求域的相关方法

      请求域相关方法 作用
      Object getAttribute("键") 根据键从请求域中获得值
      void setAttribute("键",Object数据) 往请求域中存储键值对数据
      void removeAttribute("键") 根据键从请求域中删除键值对数据

    关于根目录使用说明

    根目录 /

    服务器端根目录( / ):http://localhost:8080/项目访问地址/

    浏览器端根目录( / ):http://localhost:8080/

    这就是为什么有些地方需要"/login"这样写,有些地方"login"这样写

    JavaWeb HTTP协议概述与request

相关文章:

  • 2022-02-27
猜你喜欢
  • 2021-04-27
  • 2021-06-01
  • 2021-12-10
  • 2021-12-10
相关资源
相似解决方案