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工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- git获取网上的项目
这里是从coding.net上下载项目至本地phpstorm并配置好相关环境. 这里url地址正是项目路径.获取的地方是: 下面那个url直接复制粘贴. 自己选择一个目录,然后clone. 下面便是前 ...
- selector在color和drawable目录下的区别
selector作为drawable资源时,放于drawable目录下,并且item指定android:drawable属性,引用使用@drawable而不是@color selector作为colo ...
- ubuntu14.04 使用笔记
这是第二次安装使用ubuntu了,虽然上一次因为不习惯和不会使用一两天就放弃了,这次坚持的时间稍微长一点,目前ubuntu的基本使用也熟悉了.但是由于ubuntu上的应用太少,常用软件,比如QQ,Ph ...
- os.chdir("/deepmatching") OSError: [Errno 2] No such file or directory: '/deepmatching'
#os.chdir("/deepmatching")os.chdir(os.path.dirname(os.path.abspath("deepmatching1&quo ...
- 安装CentOS 6网络配置问题
安装CentOS 6网络配置问题 今天决定把家中的CentOS从5升级至6.但安装完CentOS 6.2之后发现eth0没有像往常一样通过DHCP自动获取IP.打开“/etc/sysconfig/ne ...
- CF547D Mike and Fish
欧拉回路,巧妙的解法. 发现每一个点$(x, y)$实际上是把横坐标和$x$和纵坐标$y$连一条线,然后代进去跑欧拉回路,这样里一条边对应了一个点,我们只要按照欧拉回路间隔染色即可. 注意到原图可能并 ...
- FractalNet(分形网络)
-Argues that key is transitioning effectively from shallow to deep and residual representations are ...
- arcgis for android常见问题回答
Q:arcgis for android最新版本是多少?(2014-7-18) Arcgis for android 10.2.3 sdk 百度盘下载地址:http://pan.baidu.com/s ...
- 用firebug 进行表单自定义提交
在一些限制网页功能的场合,例如,防止复制内容,防止重复提交,限制操作的时间段/用户等,网页上一些按钮是灰化的(禁用的),这通常是通过设置元素的 disable属性来实现的.但在后台并没有做相应的功能限 ...
- svn下载安装
TortoiseSVN 下载地址:http://subversion.apache.org/packages.html#windows VisualSVN Server 下载地址:https://ww ...