request (请求对象)
一、学习请求
学习如何获取请求行, 请求头,请求体。
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
- 从收藏夹链接
- 单击主页或自定义的地址
- 在浏览器中直接输地址
- 通过以下方式发送请求才会获取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方式
- 发送的参数不需要写到数据库当中使用get
- 发送的参数需要保存到数据库当中使用post
- 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 (请求对象)的更多相关文章
- Servlet的学习之Request请求对象(3)
本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...
- Servlet的学习之Request请求对象(2)
在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- opa gatekeeper笔记:AdmissionReview input.request请求对象结构
官方:https://v1-17.docs.kubernetes.io/zh/docs/reference/access-authn-authz/extensible-admission-contro ...
- request请求对象实例
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoRequest.as ...
- Servlet的学习之Request请求对象(1)
在本篇中开始对Servlet中的HttpServletRequest请求对象进行学习,请求对象同响应对象一样,我们可以根据该对象中的方法获取例如请求行,请求头和请求实体数据的方法. 在本篇中先对Htt ...
- FastAPI(54)- 详解 Request 请求对象
背景 前面讲了可以自定义 Response,那么这里就讲下请求对象 Request 可以通过 Request 来获取一些数据 获取请求基础信息 @app.get("/base") ...
- django 获取request请求对象及response响应对象中的各种属性值
django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...
- Request请求对象
一.Request对象由服务器创建,我们使用 浏览器访问服务器资源原理: 二.Request体系结构 其中,servlet 的service()方法参数列表是 servletRequest对象, Ht ...
- TP5.1:request请求对象(使用四种方式获取)
准备: 在index/controller下创建一个名为requests.php的文件(注意:不要起名为request,因为它是关键字,不被允许起名) 动态方法和静态方法的区别: 静态方法:publi ...
随机推荐
- 【zoj3645】高斯消元求解普通线性方程
题意: 给你一个方程组(含有12个方程),求(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11) 方程组的形式是一个二次方程组 (ai1-x1)^2 + (ai2-x2)^2 +( ...
- CTSC/APIO2018 帝都一周游
day0 报道 上午早早就起来了,两点才到酒店,然后去简单试了试机子. 不得不说今年八十中的伙食变得瓜皮了啊,去年还是大叠的5元卷,今年变成了单张的*餐卷.不知道食堂吝啬什么,面条米饭都只有一点点,还 ...
- 双内网渗透代理之reGeorg+Proxifier
由于这个工具第一次体验感觉还不错,很稳定.因此在这记录一下reGeorg+Proxifier的配置及其使用. 下载地址 :https://github.com/sensepost/reGeorg.gi ...
- socket 编程 TCP 实现简单聊天功能【转】
转自:http://blog.csdn.net/liujia2100/article/details/9006479 版权声明:本文为博主原创文章,未经博主允许不得转载. 各个主要函数的功能: .so ...
- 算法题之Median of Two Sorted Arrays
这道题是LeetCode上的题目,难度级别为5,刚开始做没有找到好的思路,以为是自己智商比较低,后来发现确实也比较低... 题目: There are two sorted arrays nums1 ...
- FineReport——JS二次开发(自定义翻页按钮)
FR允许自定义工具栏上面的按钮,并提交JS方法: 对于翻页功能,大概有首页,下一页,上一页,最后一页,以及跳转页等功能. 不得不说的是,在HTML页面自定义的按钮如何获取到报表模板,通过FR提供的JS ...
- Assistor PS 切图工具的使用说明。
一.如何运行Assistor PS 使用这个Assistor PS 软件有一个最最重要的条件,那就是:你要打开你的Photoshop (官方建议版本在CS 3以上) 下载-安装-运行. 运行成 ...
- 【python】多个文件共用日志系统的重复打印问题
先写一个最简单的log文件: test_logging5.py #coding:utf-8 import logging logging.debug('logger debug message') l ...
- 《java并发编程实战》读书笔记12--原子变量,非阻塞算法,CAS
第15章 原子变量与非阻塞同步机制 近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并交换指令)代替锁老确保数据在并发访问中的一致性. 15.1 锁的劣势 ...
- cookie笔记(二)
小荔枝 增 删 查 改 <form action="javascript:void(0)" method="get" accept-charset=&qu ...