一、学习请求

学习如何获取请求行, 请求头,请求体。

1. 获取请求行

获取请求方法

String method = request.getMethod();
System.out.println(method);

获取请求资源

StringBuffer requestURL = request.getRequestURL();
String requestURI = request.getRequestURI();System.out.println(requestURL);
System.out.println(requestURI);

获取应用名称

String contextPath = request.getContextPath();
System.out.println(contextPath);

获取get查询参数

String queryString = request.getQueryString();
System.out.println(queryString);

2. 获取请求头

获取所有的请求头名称

// 获取所有请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
// 取出所有请求头名称 并打印
while(headerNames.hasMoreElements()) {System.out.println(headerNames.nextElement());
}

获取指定的头信息

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

打印所有的请求头和请求头内容

// 获取所有请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
// 取出所有请求头名称 并打印
while(headerNames.hasMoreElements()) {String name = headerNames.nextElement();String value = request.getHeader(name);System.out.println(name +" : "+value);
}

referer

  • 告诉服务器我是从哪个页面链接过来的

  • 注意事项
    • 通过以下方式发送请求才会获取referer

      • 直接用<a href="">
      • 用Submit或<input type="image">提交的表单(POST或GET)
      • 用JAvaScript提交的表单(POST或GET)
    • 通过以下方式不会有referer
      • 从收藏夹链接
      • 单击主页或自定义的地址
      • 在浏览器中直接输地址

3. 获取请求体

1. 获取一个值

String parameter = request.getParameter("名称");
System.out.println(parameter);

2. 获取多个值

返回的是一个数组

String[] parameterValues = request.getParameterValues("名称");
System.out.println(Arrays.toString(parameterValues));

3. 获取所有请求参数名称

Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()) {System.out.println(parameterNames.nextElement());
}

4. 获取所有请求参数

Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {System.out.println(entry.getKey());System.out.println(Arrays.toString(entry.getValue()));
}

5. 把获取的请求参数封装成对象

需要将 commons-logging-1.1.1.jar 和 commons-beanutils-1.8.3.jar 导入到 lib 目录下

request.setCharacterEncoding("UTF-8");
Map<String, String[]> parameterMap = request.getParameterMap();User user = new User();
try {BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();
}
System.out.println(user);

6. 解决中文乱码问题

什么时候使用get方式与post方式
  1. 发送的参数不需要写到数据库当中使用get
  2. 发送的参数需要保存到数据库当中使用post
  3. form一般提交数据的数据为post
造成乱码的原因

发送请求时, 会对参数进行编码,编码使用的是ISO8859-1 不支持中文,所以乱码

通用解决办法:
  • 获取对应的参数
  • 通过iso8859-1转回二进制位,再以utf-8的形式转成字符串
  • 存在的问题,每一个参数都必须得要转回二进制位,再转为字符串
String parameter = request.getParameter("名称");
System.out.println(parameter);byte[] bytes = parameter.getBytes("ISO8859-1");
String string = new String(bytes,"UTF-8");
System.out.println(string);
request方法解决中文乱码 只适用于post
request.setCharacterEncoding("UTF-8");
String parameter = request.getParameter("名称");
System.out.println(parameter);

4. 请求转发

重定向与请求转发的区别

重定向
  • 找servlet1,通过设置响应,告诉浏览器, 再让浏览器发送请求到servlet2
  • 发两次请求
  • 地址栏会发生变化
请求转发
  • 请求转发只需要发送一次直接,找servlet1,在servlet1当中直接转发给servlet2,不要再告诉浏览器
  • 只发送一次请求
  • 浏览器地址栏当中还是servlet1,不会发生变化

实现转发

1. 通过请求对象获取一个转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
2. 通过转发器进行转发

调用转发器的forward方法进行转发

dispatcher.forward(request, response);

5. request域对象

  • 在一次请求过程当中
  • request是共享的。在一个servlet当中设置的参数,转发到另外一个servlet,取出来的是同一个
  • 生命周期
    • 创建:发送一个请求时创建一个request对象
    • 销毁:请求结束,浏览器给出响应时,销毁
    • 作用范围:一次请求当中

5. 客户端地址与服务器端地址

客户端地址

  • 客户端访问服务器使用的地址
  • 服务器外部地址
  • 在写的时候要写上web应用的名称 /应用名称/资源

服务器地址

  • 在服务内部当中使用的地址
  • 不需要写web应用名称 /资源名称

转载于:https://www.cnblogs.com/xzh0717/p/10651938.html

request (请求对象)相关推荐

  1. Servlet的学习之Request请求对象(2)

    在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...

  2. php request对象,PHP 中TP5 Request 请求对象的实例详解

    PHP 中TP5 Request 请求对象 public/index.php app\index\controller\Index.php <?php namespace app\index\c ...

  3. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

  4. Python Flask Web 第八课 —— request 请求对象

    from flask import request 请求对象包含客户端发出的所有请求信息. 1. request.headers request.headers.get('User-Agent') 获 ...

  5. javaweb:request请求对象(5)

    1.请求和响应的概述: 什么请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程. 什么响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示,这个过程就称之为响应. ...

  6. JavaWeb—Request请求对象

    目录 一.概述 二.Request对象 2.1 Request继承体系 小结 2.2 Request获取请求数据 2.2.1 获取请求行数据 2.2.2 获取请求头数据 2.2.3 获取请求体数据 小 ...

  7. $.post把表单对象传递过去_第二章 第三节 Request请求对象详解

    Request对象和Response对象是必须熟悉的. Request对象负责请求的构造和处理 Response对象负责返回资源的解析和处理 一.Request对象参数 Request(url[, c ...

  8. Request请求对象

    一.Request对象由服务器创建,我们使用 浏览器访问服务器资源原理: 二.Request体系结构 其中,servlet 的service()方法参数列表是 servletRequest对象, Ht ...

  9. Flask框架——请求钩子与request请求对象

    目录 请求钩子 request对象 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接 在请求开始时,根据需求进行权限校验 在请求结束时,指定 ...

  10. ThinkPHP5.0中Request请求对象的使用和常用的操作

    request的使用 第一种方法 在控制器头部添加request引用 然后在方法里调用 'instance'类 然后在调用方法: public function index($name='name') ...

最新文章

  1. “OMP: Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized“ error
  2. DataSet转换为实体(函数)
  3. 集中式整合之加入springsecurity
  4. MQTT Client软件-MQTTBox
  5. iOS 高效 Mac 配置
  6. 保密检查便携式计算机,Lyaept关于便携式计算机和移动存储介质保密管理制度.doc...
  7. 软件质量保证与测试(什么是图灵测试)
  8. python做爬虫 怎么样效率最高_公认8个效率最高的爬虫框架
  9. 【渝粤教育】电大中专电子线路作业 题库
  10. 谷歌浏览器离线更换皮肤-安装谷歌浏览器插件与问题解决
  11. 简历javaweb项目描述怎么写_简历上的项目描述(JAVA)怎么写
  12. UPC、EAN、ISBN的编码介绍
  13. window 获取cpu型号_教你如何修改电脑上的CPU型号信息!
  14. 【Python】实现B站MP4格式音频与视频合并,ffmpeg一个命令即可
  15. JAVA 将图片转换成pdf文件
  16. 记录:起个撒名了, 就叫 《方向》 吧....
  17. U盘启动模式USB-HDD/HDD+/ZIP/ZIP+/CDROM/FDD的区别
  18. JAVA 接入微信扫码(Native)支付
  19. 核函数在SVM的应用,核函数到底是什么
  20. 数据分析思维|数据指标异动分析

热门文章

  1. RabbitMQ学习——基本概念
  2. 来自Comsenz产品团队的声音
  3. 网络博客营销之博客设置和优化
  4. NMF(非负矩阵分解)的场景应用
  5. andriod stdio 如何通过按钮保存textview的内容到txt文件中_信不信由你|手把手教你制作视频中的逐行显示字幕,超实用啊!...
  6. mysql57数据库命令_centos7.2下安装mysql5.7数据库的命令详解
  7. 机器学习分类算法_Python机器学习之K近邻分类算法(四)
  8. 百度竞价点击器_同等预算,百度竞价托管如何让您的点击量高于您同行?
  9. 三维旋转矩阵_线性代数的本质(4)--矩阵乘法与复合变换
  10. Ros简单程序编写及使用类Hello World