一、学习请求

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

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应用名称 /资源名称

request (请求对象)的更多相关文章

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

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

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

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

  3. JSP内置九个对象Request请求对象

    jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...

  4. opa gatekeeper笔记:AdmissionReview input.request请求对象结构

    官方:https://v1-17.docs.kubernetes.io/zh/docs/reference/access-authn-authz/extensible-admission-contro ...

  5. request请求对象实例

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoRequest.as ...

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

    在本篇中开始对Servlet中的HttpServletRequest请求对象进行学习,请求对象同响应对象一样,我们可以根据该对象中的方法获取例如请求行,请求头和请求实体数据的方法. 在本篇中先对Htt ...

  7. FastAPI(54)- 详解 Request 请求对象

    背景 前面讲了可以自定义 Response,那么这里就讲下请求对象 Request 可以通过 Request 来获取一些数据 获取请求基础信息 @app.get("/base") ...

  8. django 获取request请求对象及response响应对象中的各种属性值

    django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...

  9. Request请求对象

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

  10. TP5.1:request请求对象(使用四种方式获取)

    准备: 在index/controller下创建一个名为requests.php的文件(注意:不要起名为request,因为它是关键字,不被允许起名) 动态方法和静态方法的区别: 静态方法:publi ...

随机推荐

  1. python学习笔记(五)数值类型和类型转换

    Python中的数值类型有: 整型,如2,520 浮点型,如3.14159,1.5e10 布尔类型 True和False e记法: e记法即对应数学中的科学记数法 >>> 1.5e1 ...

  2. MSSQL备份脚本

    ) ) ) ),),':',''),' ',''),'-',''),'.','') set @name=N'DEMO'+@temp+'-完整 数据库 备份' set @disk=N'F:\Backup ...

  3. 微信小程序滑动选择器

    实现微信小程序滑动选择效果 在wxml文件中,用一个picker标签代表选择器,bindchange是用户点击确定后触发的函数,index是picker自带的参数,用户点击确定后,bindchange ...

  4. bzoj 2730 割点

    首先我们知道,对于这张图,我们可以枚举坍塌的是哪个点,对于每个坍塌的点,最多可以将图分成若干个不连通的块,这样每个块我们可能需要一个出口才能满足题目的要求,枚举每个坍塌的点显然是没有意义的,我们只需要 ...

  5. windows下 nginx安装 使用

    介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络 ...

  6. Linux静态库和共享库【转】

    转自:http://www.cnblogs.com/zlcxbb/p/6806269.html 1.什么是静态库 静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Wi ...

  7. 【openjudge】C15C Rabbit's Festival CDQ分治+并查集

    题目链接:http://poj.openjudge.cn/practice/C15C/ 题意:n 点 m 边 k 天.每条边在某一天会消失(仅仅那一天消失).问每一天有多少对点可以相互到达. 解法:开 ...

  8. (转)opencv 代替caffe.io.load_image

    self.net.blobs[, , self.image_resize, self.image_resize) #image = caffe.io.load_image(image_file) im ...

  9. [hadoop][会装]zookeeper安装

    1.简介 分布式场景下的各个进程间的协调运作离不开zookeeper, zookeeper已经是大数据领域提供分布式协调服务的事实标准. 本文只介绍zookeeper的安装方法. 2. 节点规划如下: ...

  10. C++中string类的方法

    C++ string类的方法 具体每个方法怎么使用,可以参考相应的链接. 总的链接为http://www.cplusplus.com/reference/string/string/(C++参考文档) ...