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工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- android 4.0.4系统下实现apk的静默安装和启动
转 android 4.0.4系统下实现apk的静默安装和启动 分类: Android 2013-02-14 14:13 1762人阅读 评论(10) 收藏 举报 最近在android 4.0.4系统 ...
- linux 目录和用户权限命令
1.linux 修改文件目录所有者 例:要将当前目录下名 title 的文件夹及其子文件的所有者改为geust组的su用户,方法如下: #chown -R su.geust title -R 递归式地 ...
- mysql数据库中插入表情4个字节的
这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 我的解决方案是这样的 1.在mysql ...
- dataTable写入数据库(大数据写入)
例1: connectionStr,链接字符串dataTableName, 数据库中对应表名sourceDataTable DataTable 要写入数据库的DataTable字段要和表一致 publ ...
- Junit问题01 利用 @Autowired 注入失效问题
1 利用 @Autowired 注入失效问题 1.1 问题描述 在使用Junit作为测试框架的单元测试中,直接了用@Autowired记性依赖注入时总是注入失败 1.2 问题原因 在测试类中没有设定上 ...
- 643. Maximum Average Subarray I 最大子数组的平均值
[抄题]: Given an array consisting of n integers, find the contiguous subarray of given length k that h ...
- sql server 错误总结
1>无法访问sql server2000数据库 1.1>安装sql server2000 sp1的补丁包. 1.2>sql server 数据库开启了允许远程访问. 1.3>s ...
- Extend volumn in ubuntu 14.04
运行环境: ubuntu 14.04, VMware12.5.7 1. VMware上点击 虚拟机->设置->硬盘(SCSI)->扩展选项,设置自己希望的ubuntu磁盘运行空间大小 ...
- 使用 append 方法追加元素
来自于<sencha touch 权威指南> 学习使用 Ext.DomHelper 组件在页面中追加元素.app.js代码如下: Ext.require(['Ext.form.Panel' ...
- windowsPhone一些不常见控件
1.InkPresenter:可以产生手写效果的控件. http://www.cnblogs.com/randylee/archive/2010/08/10/1791222.html 2.Thumb: ...