Web核心之Request对象
HTTP协议中Request请求部分格式
//请求行(这种是POST类型的请求)
POST /HttpServleLogin.html HTTP/1.1
//请求头(User-Agent里有Firefox,说明是火狐浏览器)
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
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
Accept-Encoding: gzip, deflate
Referer: http://localhost/HttpServletDemoLogin.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
//请求体
something=英特纳雄耐尔
这种是谷歌浏览器下GET类型的请求

请求行:
请求方式(POST为例) 请求的url 协议/版本号
POST /HttpServleLogin.html HTTP/1.1
get请求时,请求参数是拼接在url后的。格式为:
?开始,参数以key=value拼接。多个参数之间用&符号连接
http://localhost:8080/xxx?username=xxx&password=xxx&xxx=hyy
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)

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



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

所以这里虚拟目录是空。
获取请求URI:String requestURI = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();
获取请求头信息


未演示俩重要方法:
getHeader()根据指定的请求头的key获取value
getHeaders()根据指定的请求头的key获取多个value值
获取请求体信息(仅POST方式):
getInputStream()
获取请求体中提交的数据的输入流
先获取流对象,然后再从流对象中获取参数。




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




获取参数时的乱码问题




get方式
tomcat8 获取参数时,已经把默认编码设置为utf-8了。所以不会乱码。无需解决。
tomcat7及以下版本,默认编码是ISO-8859-1。所以会出现乱码的情况。
解决方案:
先把乱码字符串还原为字节数组,再使用正确的字符集进行编码。
String param = new String(request.getParameter("paramName").getBytes("ISO-8859-1"),"UTF-8");
post方式
request.setCharacterEncoding("utf-8");
请求转发(页面跳转的一种方式):
api:request.getRequestDispatcher(path).forward(request,response);




特点:
- 转发只发送一次请求。
- 转发时地址栏不会发生变化。
- 转发只能访问当前项目内的资源,不能跳到pornhub什么的网站。
建议在页面跳转之后不要再编写其他业务逻辑,以防逻辑混乱。
共享对象:
域对象
概念:
具有一定作用范围的对象,一般用于存储数据。格式为key-value
作为域对象使用api
setAttribute(String key,Object value)
Object getAttribute(String key)
removeAttribute(String key)
request域




作用范围:一次请求。
创建:
当服务器接收到一次请求时,会创建一个request对象。
销毁:
当一个请求被响应之后,该请求被销毁,一次请求结束。
一般我们在转发时,使用request传递数据。
获取ServletContext
request.getServletContext()



Web核心之Request对象的更多相关文章
- Web核心之Response对象
http协议的响应部分 格式: HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 101 Date: Wed, ...
- JAVA-JSP内置对象之request对象的其他方法
相关资料:<21天学通Java Web开发> request对象的其他方法1.request对象除了可以用来获得请求参数,还可以用来获得HTTP标头及其他信息. 方法 ...
- JAVA-JSP内置对象之request对象参数
相关资料:<21天学通Java Web开发> request对象1.request对象不但可以用来设置和取得requset范围变量,还可以用来获得客户端请求参数请求的来源.表头.cooki ...
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Request对象 --web浏览器向web服务端的请求
一]Request对象常用方法 1)StringBuffer getRequestURL() url表示访问web应用的完整路径 2)Stri ...
- web计时机制——performance对象
前面的话 页面性能一直都是Web开发人员最关注的领域.但在实际应用中,度量页面性能的指标,是提高代码复杂程度和巧妙地使用javascript的Date对象.Web Timing API改变了这个局面, ...
- [转]web计时机制——performance对象
页面性能一直都是Web开发人员比较关注的领域.但在实际应用中,度量页面性能的指标,是javascript的Date对象.Web Timing API改变了这个局面,让开发人员通过javascript就 ...
- request 对象和 response 对象
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...
- JSP内置对象之request对象【学习笔记】
request对象是JSP中重要的对象,每个request对象封装着一次用户的请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径. 一.获取请求头与 ...
随机推荐
- QT5 QTreeView添加右键菜单
C++ QT5学习--QTreeView控件创建右键菜单 QTreeView是QWidget的子类,我们再改写QTreeView类的时候,注意的是继承关系. 1.TreeView.h class Tr ...
- IntelliJ IDEA中创建xml文件
1.file—setting,左上角输入template, 2.在左侧栏找到File And Code Templates 3.中间选中Files 4.点击+号,添加模板 5.输入模板名字:Nam ...
- windows mysql官方绿色版zip包安装教程
环境: 系统环境 Windows 10 64位 mysql版本 5.7.19 一.万变不离的下载 下载页面:https://dev.mysql.com/downloads/mysql/ 点击 Down ...
- MySQL 增删改语句
# DML语言 /* 数据操作语言: 插入:insert 修改:update 删除: delete */ 一.插入语句 insert /* 语法: 方式一: insert into 表名(列名,..) ...
- jQuery基础--CSS操作、class操作、attr操作、prop操作
1.1.1 css操作 功能:设置或者修改样式,操作的是style属性. 设置单个样式 //name:需要设置的样式名称 //value:对应的样式值 css(name, value); //使 ...
- “希希敬敬对”Alpha版本发布说明
Alpha版本的所有功能如下: 1.完成根据贴吧关键字检索的功能,通过用户输入的关键词或URL地址链接到对应的贴吧页面,并爬取到该贴吧前10页的相关数据.2.对爬取到的数据进行分析和整合,实现获取该贴 ...
- final、以及public、protected、(default)、private权限修饰符总结
package cn.learn.Final; /* 当final用来修饰类 1.该类不能有任何子类,成员方法均无法覆盖重写,但可以重写父类的方法 当final用来修饰方法 1.该方法不能被覆盖重写 ...
- Android 中三种启用线程的方法
在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Han ...
- Map3
map切片: 切片的数据类型如果是map,则我们称为 slice of map, map切片,这样使用则map个数就可以动态变化了. 案例演示:要求:会用一个map来记录monster的信息 name ...
- 重温位运算、原码、反码、补码、以及>>和<<<区别
一个例子说明原码,反码,补码: 下面进行5和-5的原码,反码,补码表示: 5的原码:0000 0101 5的反码:0000 0101 5的补码:0000 0101 -5的原码:1000 0101 -5 ...