JavaWeb学习笔记(五)—— request
一、request概述
request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。
通过抓包工具抓取Http请求
因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行,请求头和请求体。
二、request的功能
2.1 获取请求行信息
request.getMethod():获取请求方式
request.getRemoteAddr():获取客户端IP
String getContextPath():获取项目名
String getQueryString():获取参数部分(username=xxx&password=yyy),post请求获得的是null
String getRequestURL():获取请求URL,等于不包含参数的整个请求路径(http://localhost:8080/day10_2/AServlet)
String getRequestURI():获取请求URI,等于项目名+Servlet路径(/day10_2/AServlet)
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获得请求方式
String method = request.getMethod();
System.out.println("method:" + method);
// 获得请求的资源相关的内容
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
System.out.println("uri:" + requestURI); //uri:/Day04/line
System.out.println("url:" + requestURL); //url:http://localhost:8080/Day04/line
// 获得web应用的名称
String contextPath = request.getContextPath(); //web应用:/Day04
System.out.println("web应用:" + contextPath);
// 地址后的参数的字符串
String queryString = request.getQueryString(); //username=zhangsan&password=123
System.out.println(queryString);
// 获得客户机的信息——获得访问者IP地址
String remoteAddr = request.getRemoteAddr();
System.out.println("IP:" + remoteAddr); //IP:0:0:0:0:0:0:0:1
}
2.2 获取请求头信息
String getHeader(String name):获取指定名称的请求头
request.getHeader("referer") -->可用于防盗链
Enumeration getHeaderNames():获取所有请求头名称
2.3 获取请求体信息
【客户端传递参数的方式】
- 浏览器地址栏直接输入:一定是GET请求;
- 超链接:一定是GET请求;
- 表单:可以是GET,也可以是POST,这取决与<form>的method属性值;
【GET请求和POST请求的区别】
GET请求:
- 请求参数会在浏览器的地址栏中显示,所以不安全;
- 请求参数长度限制长度在1K之内;
- GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;
POST请求:
- 请求参数不会显示浏览器的地址栏,相对安全;
- 请求参数长度没有限制;
【常用API】
String getParameter(String name):获取指定名称的请求参数值,适用于单值请求参数
String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数
Enumeration<String> getParameterNames():获取所有请求参数名称
Map<String,String[]> getParameterMap():获取所有请求参数,其中key为参数名,value为参数值
【解决中文乱码】
- post请求:
request.setCharacterEncoding(“UTF-8”);
get请求:
String name = request.getParameter(“name”)
name = new String(name.getBytes(“iso-8859-1”), “utf-8”)
2.4 其他功能
【request是一个域对象】(作用范围:一次请求中)
- void setAttribute(String name, Object value):用来存储一个对象
- Object getAttribute(String name):用来获取request中的数据
- void removeAttribute(String name):用来移除request中的域属性
- Enumeration getAttributeNames():获取所有域属性的名称
【request完成请求转发】
- 获得请求转发器:RequestDispatcher rd = request.getRequestDispatcher(String path);——path是转发的地址
- 通过转发器对象转发:rd.forward(request,response)
请求转发和重定向的区别:
*请求转发是一个请求一次响应,而重定向是两次请求两次响应
*转发地址栏不变化,而重定向显示后一个请求的地址
*转发只能转发到本项目其它servlet,而重定向不只能重定向到本项目的其它servlet,还能定向到其它项目
*转发是服务器端行为,只需给出转发的servlet路径,而重定向要给出request URI,即包含项目名
*转发的效率高,因为是一个请求
JavaWeb学习笔记(五)—— request的更多相关文章
- JavaWeb学习笔记四 request&response
HttpServletResponse 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应res ...
- JavaWeb学习笔记五 会话技术Cookie&Session
什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- init方法返回值自动改写问题
[init方法返回值自动改写问题] 在ARC开启的情况下,以init开头的实例方法的返回值会被默认无视,返回类型会被编译器改写为类指针类型. 如一人类叫UIButton类,如果一个方法叫 (UILab ...
- Java中long和Long的区别
Java的数据类型分两种: 1.基本类型:long,int,byte,float,double,char,short,boolean 2. 对象类型(类): Long,Integer,Byte,Flo ...
- 更新solrcloud+zookeeper的配置文件,要reload collection
1.用的lib下的solr-core-4.3.1jar中的ZkCLI工具,命令在solr(web发布的)同级目录下运行. (1)upconfig 更新配置文件命令 java -classpath ./ ...
- Adam:一种随机优化方法
我们介绍Adam,这是一种基于一阶梯度来优化随机目标函数的算法. 简介: Adam 这个名字来源于 adaptive moment estimation,自适应矩估计.概率论中矩的含义是:如果一个随机 ...
- Linux查看操作系统版本的几种方式
Linux查看操作系统版本的几种方式: 1.uname -a 2.lsb_release -a 3.cat /etc/issue 4.cat /proc/version 5.cat /etc/redh ...
- 235D Graph Game
传送门 题目大意 https://www.luogu.org/problemnew/show/CF235D 分析 我们先考虑它是树的情况 我们设$event(x,y)$表示删除点x是y与x联通这件事对 ...
- VMware下Ubuntu虚拟机NAT模式 连接Xshell
1.Edit->Virtual NetWork Editor 2.选择NAT->NAT Settings 配置端口映射关系 很重要! Host port: 真实主机 一般是Windows端 ...
- Jmeter接口测试-基于nodejs的to do list项目说明
一.了解测试项目 我们的测试项目叫做smile_task,简称sm_task.这是一个基于nodejs超简单的todo list. 它的主要流程就是:输入标题描述---点击创建一个任务---编辑修改任 ...
- LightOJ 1038 Race to 1 Again (概率DP,记忆化搜索)
题意:给定一个数 n,然后每次除以他的一个因数,如果除到1则结束,问期望是多少. 析:概率DP,可以用记忆公搜索来做,dp[i] = 1/m*sum(dp[j] + 1) + 1/m * (dp[i] ...
- Java之集合框架vector类设计原理