HTTP协议中Request请求部分格式

  1. //请求行(这种是POST类型的请求)
  2. POST /HttpServleLogin.html HTTP/1.1
  3. //请求头(User-Agent里有Firefox,说明是火狐浏览器)
  4. Host: localhost
  5. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  7. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  8. Accept-Encoding: gzip, deflate
  9. Referer: http://localhost/HttpServletDemoLogin.html
  10. Connection: keep-alive
  11. Upgrade-Insecure-Requests: 1
  12. //请求体
  13. something=英特纳雄耐尔

这种是谷歌浏览器下GET类型的请求

请求行:

请求方式(POST为例) 请求的url 协议/版本号

  1. POST /HttpServleLogin.html HTTP/1.1

get请求时,请求参数是拼接在url后的。格式为:

?开始,参数以key=value拼接。多个参数之间用&符号连接

http://localhost:8080/xxx?username=xxx&password=xxx&xxx=hyy

  1. http://localhost/HttpServletDemo?something=%E8%8B%B1%E7%89%B9%E7%BA%B3%E9%9B%84%E8%80%90%E5%B0%94

GET(没有请求体):请求参数在请求行中,请求的url长度有限制,参数在url后,所以参数有长度限制

POST(有请求体):请求的url长度有限制,但请求参数在请求体中,所以参数有长度没有限制

请求头:

在请求时,客户端在传递数据的同时,通过请求头可以携带一些请求相关的额外配置信息。

这些信息通常是客户端自动封装提供的。

请求头的格式:

都是键值对。有的是一个key对应一个value,有的是一个可以对应多个value

key是固定的,协议中预定义的。不区分大小写。

user-agent:携带客户端的信息--操作系统型号、浏览器版本

referer:提供当前请求发送的位置信息。

请求体

get方式请求没有请求体,因为get的参数在请求行中。

只有post请求有请求体,用于传递提交的参数。

HTTP协议是网络中传输数据的协议,和语言无关。

request对象继承体系结构:

ServletRequest -- 接口

| 继承

HttpServletRequest -- 接口

| 实现

org.apache.catalina.connector.RequestFacade 类(tomcat)

  1. requestresponse对象并不是我们创建的,而是tomcat服务器接受到请求之后创建并通过service的调用传递给我们的。
  2. request中封装了客户端提供给服务器的数据,也就是HTTP的请求部分。我们可以获取这些数据。
  3. response对象封装了我们想要返回给客户端的数据,tomcat服务器会把我们提供的数据转为静态数据返给客户端。我们可以设置这些数据。

获取请求行信息







获取虚拟目录:String getContextPath(),由于我设置的是



所以这里虚拟目录是空。

获取请求URI:String requestURI = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();

获取请求头信息





未演示俩重要方法:

getHeader()根据指定的请求头的key获取value

getHeaders()根据指定的请求头的key获取多个value值

获取请求体信息(仅POST方式):

getInputStream()

获取请求体中提交的数据的输入流

先获取流对象,然后再从流对象中获取参数。







获取请求参数(通用方式):







获取参数时的乱码问题





get方式

  1. tomcat8 获取参数时,已经把默认编码设置为utf-8了。所以不会乱码。无需解决。
  2. tomcat7及以下版本,默认编码是ISO-8859-1。所以会出现乱码的情况。
  3. 解决方案:
  4. 先把乱码字符串还原为字节数组,再使用正确的字符集进行编码。
  5. String param = new String(request.getParameter("paramName").getBytes("ISO-8859-1"),"UTF-8");

post方式

  1. request.setCharacterEncoding("utf-8");

请求转发(页面跳转的一种方式):

api:request.getRequestDispatcher(path).forward(request,response);







特点:

  1. 转发只发送一次请求。
  2. 转发时地址栏不会发生变化。
  3. 转发只能访问当前项目内的资源,不能跳到pornhub什么的网站。

    建议在页面跳转之后不要再编写其他业务逻辑,以防逻辑混乱。

共享对象:

域对象

概念:

  1. 具有一定作用范围的对象,一般用于存储数据。格式为key-value
  2. 作为域对象使用api
  3. setAttribute(String key,Object value)
  4. Object getAttribute(String key)
  5. removeAttribute(String key)
  6. request









作用范围:一次请求。

创建:

当服务器接收到一次请求时,会创建一个request对象。

销毁:

当一个请求被响应之后,该请求被销毁,一次请求结束。

一般我们在转发时,使用request传递数据。

获取ServletContext

request.getServletContext()





Web核心之Request对象的更多相关文章

  1. Web核心之Response对象

    http协议的响应部分 格式: HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 101 Date: Wed, ...

  2. JAVA-JSP内置对象之request对象的其他方法

    相关资料:<21天学通Java Web开发> request对象的其他方法1.request对象除了可以用来获得请求参数,还可以用来获得HTTP标头及其他信息. 方法           ...

  3. JAVA-JSP内置对象之request对象参数

    相关资料:<21天学通Java Web开发> request对象1.request对象不但可以用来设置和取得requset范围变量,还可以用来获得客户端请求参数请求的来源.表头.cooki ...

  4. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. Request对象 --web浏览器向web服务端的请求

    一]Request对象常用方法        1)StringBuffer getRequestURL()            url表示访问web应用的完整路径            2)Stri ...

  6. web计时机制——performance对象

    前面的话 页面性能一直都是Web开发人员最关注的领域.但在实际应用中,度量页面性能的指标,是提高代码复杂程度和巧妙地使用javascript的Date对象.Web Timing API改变了这个局面, ...

  7. [转]web计时机制——performance对象

    页面性能一直都是Web开发人员比较关注的领域.但在实际应用中,度量页面性能的指标,是javascript的Date对象.Web Timing API改变了这个局面,让开发人员通过javascript就 ...

  8. request 对象和 response 对象

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...

  9. JSP内置对象之request对象【学习笔记】

    request对象是JSP中重要的对象,每个request对象封装着一次用户的请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径. 一.获取请求头与 ...

随机推荐

  1. [CSP-S模拟测试]:不等式(数学)

    题目描述 小$z$热衷于数学.今天数学课的内容是解不等式:$L\leqslant S\times x\leqslant R$.小$z$心想这也太简单了,不禁陷入了深深的思考:假如已知$L,R,S,M$ ...

  2. webApp 页面布局

    1. 流式布局 概念:流式布局是页面元素宽度按照屏幕分辨率进行适配调整,但是整体布局不变. 设计方法:布局都是通过百分比来定义宽度,但是高度大都是用px固定的. 弊端: 虽然可以让各种屏幕适配,但是显 ...

  3. 制作自己的win7系统

    每次安装完纯净版的系统,然后是漫长的打补丁,装驱动,装软件.不妨制作一个自己的系统光盘(也就是GHOST系统),再要重装系统时,直接用这个系统光盘,一键安装,方便省时. 制作GHOST系统,就是将本地 ...

  4. CentOS7.X安装FastDFS-5.10

    安装准备 yum install \ vim \ git \ gcc \ gcc-c++ \ wget \ make \ libtool \ automake \ autoconf \ -y \ 安装 ...

  5. 测开之路六十三:UI测试平台之视图层

    实现效果,在页面时配置 后台执行 蓝图结构 视图代码 from flask import jsonifyfrom flask import requestfrom flask import Bluep ...

  6. DELPHI之全局变量和局部变量

    http://www.cnblogs.com/Stwo/archive/2011/07/11/2102816.html DELPHI之全局变量和局部变量 全局变量: 如果我们在应用程序一个单元中的in ...

  7. (appium+python)UI自动化_02_appium启动手机app

    前提:需先安装配置好appium+python自动化环境,已配置好环境的小伙伴可以参考以下步骤启动Android app,具体步骤如下: 一.USB连接手机 (1)手机USB连接电脑 (2)手机打开开 ...

  8. Hexo-博客yilia主题创建分类(categories)和标签(tags)首页

    转载自:http://orzcss.com/posts/5a207d64/ 概述 默认安装的 hexo 本身是没有分类和标签首页的,例如:http://orzcss.com/categories/页面 ...

  9. JSP基础--九大内置对象

    JSP九大内置对象 Object findAttribute(String name):依次在page.request.session.application范围查找名称为name的数据,如果找到就停 ...

  10. org.hibernate.id.IdentifierGenerationException: Hibernate异常

    异常信息: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned b ...