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工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- 【codevs2822】爱在心中
题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度 ...
- 基于size的优化
----------------------siwuxie095 基于 size 的优化 在 union( p , q ...
- Process management of windows
igfxem.exe进程是正常的进程.是intel家的核显驱动类的进程.核显即"核芯显卡",是指GPU部分它是与CPU建立在同一内核芯片上,两者完全融合的芯片."核芯显卡 ...
- 2、python的print函数格式化输出
1.格式化输出浮点数(float) pi = 3.141592653 print('%10.3f' % pi) #字段宽10,精度3 ,结果 print('%010.3f' % pi) #用0填充 ...
- laravel实现多对多的分析
在实际开发中多对多的开发还是比较常见的 1.1首先由migrate来创建表(文章表) 1.2同理创建标签表 1.3这是 我会的到如下结果: 2.1在数据迁移表contents中添加几个字段 publi ...
- PC/APP/H5三端测试的相同与不同
随着手机应用的不断状态,同一款产品的移动端应用市场占相较PC端也越来越大,那么app与PC端针对这些产品的测试有什么相同与不同之处呢?总结如下: 首先谈一谈相同之处: 一,针对同一个系统功能的测试,三 ...
- App测试从入门到精通之性能测试
好了,上节我们介绍了关于APP测试的功能测试方面一些细节.这一篇我们来介绍一下,关于APP测试过程中的性能测试参考要点,我们需要思考的如下: 响应时间 1.APP安装卸载的响应时间 2.APP各种功能 ...
- 在使用webstorm打开本地项目文件夹的html文件时,浏览器提示404错误
错误原因:在使用webstorm打开本地项目文件夹的html文件时,浏览器提示404错误. 错误分析:文件夹命名内包含“+”,此特殊符号导致浏览器解析错误. 改正方案:去掉特殊符号“+”
- jquery数组拼接
var a=[]; var c=[80,90,70,100] var b={'张三':19,'成绩':c}; a.push(b); console.log("测试案例",a); 同 ...
- Haar-like feature和Haar wavelet
Haar-like features are digital image features used in object recognition. They owe their name to the ...