HTTP协议之Request

HTTP-Request笔记

1.HTTP协议

  • HTTP:超文本传输协议
  • HTTP协议:是客户端和服务端交互时,数据的格式规范
    • HTTP请求:客户端发送给服务端的数据
    • HTTP响应:服务端发送给客户端的数据
      • 响应行
      • 响应头
      • 响应体
    • 先有请求,再有响应;没有请求就没有响应
      • 请求行
      • 请求头
      • 请求体

2.HTTP请求

2.1请求行
  • 本次请求的基本信息
  • 格式:请求方式 请求资源 协议版本
  • 例如:POST /web/web01 HTTP/1.1
2.2 请求头
  • 本次请求的附加信息
  • 格式:一行一个键值对,一个键值对是一个请求头,一次请求可以有多个请求头
  • 例如:Referer:http://localhost:8080/web/http.html
2.3 请求体
  • 本次请求的正文数据,是提交的表单参数
  • 格式:表单数据的提交格式 name=value&name=value&…
  • 注意:
    • 只有是POST提交,必须有带name属性的表单项,这时候请求体里才有数据;否则没有请求体

二、request

  • request:
    • 什么是request对象:代表HTTP请求的对象。ServletRequest、HttpServletRequest
    • request对象有什么用处:用来接收客户端提交的所有数据(接收HTTP请求里的所有数据)
    • request对象的原理:
      • 服务器软件 帮我们初始化request对象,把HTTP请求数据封装进去了
      • 我们Servlet里得到的request,就是服务器封装好的对象

1. 接收请求数据

1.1 获取请求行数据
获取请求方式
  • API:request.getMethod()
  • 什么样的请求是GET?什么样的请求是POST?默认是GET;除非特定指定了是POST,才是POST
获取项目路径
  • API:request.getContextPath()
  • 在实际开发中,不能有写死的项目路径硬编码,必须要动态获取
    • 如果是在Servlet里:直接使用request.getContextPath方法
    • 如果是在HTML里:
      • 使用JSP代替HTML,JSP里可以嵌套Java代码。用Java代码动态获取
      • 使用相对路径代替绝对路径。相对路径的写法技巧:
        1. 写出来当前资源的完整url路径
        2. 写出来目标资源的完整url路径
        3. 可以根据目标资源和当前资源的相对位置,写相对路径
其它了解的API
  • 获取url:request.getRequestURL()
  • 获取uri:request.getRequestURI()
  • 获取客户端的ip:request.getRemoteAddr()
1.2 获取请求头数据
获取请求头
  • API:request.getHeader(headerName)
1.3 获取请求参数
获取参数的API
  • 获取单值参数:String value = request.getParameter(String name)
  • 获取多值参数:String[] values = request.getParametreValues(String name)
  • 获取所有参数:Map<String, String[]> map = request.getParameterMap()
解决中文乱码的问题
  • GET方式:Tomcat8(或更高版本)已经帮我们解决了
  • POST方式:
    • 在第一次接收参数之前,增加一行代码:request.setCharacterEncoding("utf-8")

2. 其它作用

2.1 是一个域对象
什么是域对象
  • 由Servlet规范提供的,能够存取数据的对象,在其作用范围里可以共享数据。
  • 不同域对象的区别:作用范围不同
  • 域对象存取数据的方法:
    • 存数据:setAttribute(String name, Object value)
    • 取数据:getAttribute(String name)
    • 删数据:removeAttribute(String name)
  • request域对象的作用范围:
    • 何时创建:一次请求开始
    • 何时销毁:一次请求结束
    • 作用范围:一次请求期间
2.2 实现请求转发跳转
请求转发和重定向的区别(面试题)
  • 重定向跳转:有2次请求;请求转发:1次请求
  • 重定向跳转:浏览器地址栏会变;请求转发:地址栏不变
  • 重定向跳转:是客户端(浏览器)跳转;请求转发:是服务端跳转
什么时候使用请求转发?什么时候使用重定向?
  • 跳转时,如果有数据要传递给下一个资源,要使用请求转发跳转:
    • 把数据放到request对象里
    • 请求转到下一个资源,把request对象传递过去
  • 跳转时,如果没有数据要传递给下一个资源,可以使用重定向跳转
请求转发的API

request.getRequestDispatcher(String path).forward(request, response);

注意:

  • 重定向跳转时,跳转的路径前要加:项目路径。因为重定向是浏览器跳转,是应用外跳转
  • 请求转发跳转时,跳转的路径前不要加项目路径。因为请求转发是服务器跳转,是应用内跳转
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值