javaWeb_Request对象
首先说一下Http协议
一.Http协议的概念及作用
1.什么是HTTP协议?
(HTTP,HyperText Transfer Protocol)超文本传输协议, 是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
2.HTTP协议的作用
HTTP协议规范了传输信息的内容和格式
二..HTTP,查看浏览器的传输过程
1).启动浏览器;
2).按F12,启动:调试模式,网络(NetWork)
3).刷新网页,重新发送请求。
4).可以查看请求信息:

三.HTTP协议_浏览器请求信息的组成
请求行
GET /资源路径 HTTP/1.1
请求头
请求头:一堆内容,作为了解即可
|
Host: localhost:9090 (服务器的域名) Connection: keep-alive (网络连接是持久的) Content-Length: 12 (发送数据的大小,单位字节) Cache-Control: max-age=0 (设置缓存数据的存活时间,单位秒) Origin: http://localhost:9090 (指示了请求来自于哪个站点——服务器名称) Upgrade-Insecure-Requests: 1 (如果存在更安全的响应,客户端优先选择加密及带有身份验证的响应) Content-Type: application/x-www-form-urlencoded (发送数据的媒体类型——发挥作用类似后缀名:.mp3 .avi) User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 (当前系统和浏览器版本) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Referer: http://localhost:9090/day01/1.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: JSESSIONID=98006861B5044ACC8D5C7840C93C17DA |
3.请求体
如果提交方式为get,则没有内容
如果提交内容是post,则会存放提交内容的键值对形式
四.request对象的基本概念
request,在java中为HttpServletRequest对象
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
注:request对象封装了http请求中的所有信息,是由服务器创建
五.request对象_获取请求行信息
java中request对象的六个方法获取请求行的所有信息
获取提交方法(getMethod)
获取请求行中的资源路径(getRequestURI)
获取完整的请求URL(getRequestURL)
获取协议名称/版本(getProtocol)
获取IP地址(getRemoteAddr)
获取本地端口(getLocalPort)
代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取提交方法(getMethod)
System.out.println("请求行方法:"+req.getMethod());
// 获取请求行中的资源路径(getRequestURI)
System.out.println("请求行资源路径:"+req.getRequestURI());
// 获取完整的请求URL(getRequestURL)
System.out.println("完整的请求URL:"+req.getRequestURL());
// 获取协议名称/版本(getProtocol)
System.out.println("获取协议,版本:"+req.getProtocol());
// 获取IP地址(getRemoteAddr)
System.out.println("获取IP地址:"+req.getRemoteAddr());
// 获取本地端口(getLocalPort)
System.out.println("获取本地端口:"+req.getLocalPort());
}
当有http请求时,会输出请求行信息
运行结果

六.request对象_请求头信息
两个方法
- String getHeader(String name);以String的形式返回指定name的值
- Enumeration getHeaderNames(),返回此请求包含的所有头名称的枚举
代码
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//显示请求头信息
System.out.println("通过头名称name查询指定信息");
System.out.println("User-Agent"+req.getHeader("User-Agent"));
System.out.println("查询所有信息");
Enumeration<String> hn = req.getHeaderNames();
while(hn.hasMoreElements()){
String str=hn.nextElement();
System.out.println(str+req.getHeader(str));
}
}
七.request对象_请求头_通过referer实现防盗链
1.什么是盗链?
通过其他网站访问本网站的一些资源

2.如何防止盗链?
思路
通过网页发送的请求eg.download.jsp
如果download.jsp中的请求,来源于盗链者服务器,我们就显示不可以下载;
如果download.jsp中的请求,来源于正规服务器,我们就显示可以下载;
实现
通过referer获取请求头信息
String header=request.getHeader(“referer”);
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String referer = req.getHeader("referer");
System.out.println(referer);
if(referer.startsWith("http://localhost:8080/zc/")||referer.startsWith("http://127.0.0.1:8080/zc/")){
System.out.println("正常连接");
}else{
System.out.println("盗链连接");
}
}
盗链主要通过标红的地方判断
八.request对象_获取请求体
接下来说的是无论是get提交还是post提交,即无论请求体中有没有数据,都是可以使用的
1).public String getParameter(String key):获取某个键的值。
2).public String[] getParameterValues(String key):获取一个键的多个值(复选框、多选下拉列表)
3).public Map<String,String[]> getParameterMap();获取所有的键值对,并封装到一个Map中.
4).public void setCharacterEncoding(String charsetName):设置request的解码方式,如果参数中有中文,
需要使用:"UTF-8"。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求体信息
System.out.println("获取请求体信息");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username:"+username);
System.out.println("password:"+password);
System.out.println("-----------------------------------------------");
//当一个name对应多个值时,例如复选框,下拉列表,使用getParameterValues
String[] pv = req.getParameterValues("hobby");
for (String s : pv) {
System.out.println(s);
}
System.out.println("-----------------------------------------------");
//getParameterMap,获取所有的键值对,并封装到一个对象中
Map<String, String[]> map = req.getParameterMap();
Set<String> strings = map.keySet();
for (String string : strings) {
System.out.println(string+" : "+map.get(string));
}
}
九.request对象_BeanUtils工具类的使用
1.什么是"BeanUtils":它是一个第三方的软件包。
作用:自动解析客户端的请求,并根据一个Map,自动封装JavaBean。
2..使用步骤:
1).将BeanUtils所需jar包复制到lib目录下,并关联到模块中。
2).使用BeanUtils工具包:
1. 案例代码
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user=new User();
//使用工具类
try {
BeanUtils.populate(user,req.getParameterMap());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(user);
}
十.request对象_请求转发
1).什么是“请求转发”:当前Servlet进行一部分处理,然后“转发”给另一个Servlet继续处理。
2).第一个Servlet,要转发给另一个Servlet,必须将request和response对象传给另一个Servlet。
语句:
request.getRequestDispatcher(“路径”).forward(request,response);
req.getRequestDispatcher("路径").forward(req,resp);
十一.request对象_其它功能_域对象的概念
1).什么是“域对象”:是指可以在“一定范围内”可以共享数据的一种对象。
2).几个重要的域对象:
1).request:可以在转发的所有路径上,共享同一个request对象。
2).session:
3).ServletContext:
十二.request对象的生命周期:
1).客户端每次发送请求,Tomcat都会为本次请求创建一个新的Request对象;
2).在Servlet的处理请求的service()方法执行过程中,一直存活。
如果被转发,此request会被传到另一个Servlet,继续存活;
3).直到service()执行完毕,request对象立即被清理。
javaWeb_Request对象的更多相关文章
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- Asp.Net WebApi核心对象解析(下篇)
在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...
- JS核心系列:浅谈原型对象和原型链
在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法
在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...
- ASP.NET内置对象的总结
1. Response对象可形象的称之为响应对象,用于将数据从服务器发送回浏览器. 实例源码:链接: http://pan.baidu.com/s/1dDCKQ8x 密码: ihq0 2. Requ ...
- ADO.NET对象的详解
1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...
随机推荐
- POI写入word doc 03 模板的实例
在使用POI写word doc文件的时候我们必须要先有一个doc文件才行,因为我们在写doc文件的时候是通过HWPFDocument来写的,而HWPFDocument是要依附于一个doc文件的.所以通 ...
- 网络流的$\mathfrak{Dinic}$算法
网络流想必大家都知道,在这不过多赘述.网络流中有一类问题是让你求最大流,关于这个问题,许多计算机学家给出了许多不同的算法,在这里--正如标题所说--我们只介绍其中的一种--\(\tt{Dinic}\) ...
- javase(4)_数组
一.数组概述 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属于引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量. 数组中的元素可以是任意类型,包括基本类型和 ...
- Swift 中 String 与 CChar 数组的转换
在现阶段Swift的编码中,我们还是有很多场景需要调用一些C函数.在Swift与C的混编中,经常遇到的一个问题就是需要在两者中互相转换字符串.在C语言中,字符串通常是用一个char数组来表示,在Swi ...
- GIMP暗黑诱惑,部分彩色效果制作
在一些图形处理中经常会用到高逼格的部分彩色,其他部分黑白的效果,今天我就简单记录一下如何操作. 1.选区,先选择要突出的选区,可以用多种方法,钢笔,套绳,小剪刀等等: 2.把选择的区域稍稍调整亮一点: ...
- css3 filter(滤镜)属性汇总与使用介绍,来源W3C
实例 修改所有图片的颜色为黑白 (100% 灰度): img { -webkit-filter: grayscale(%); /* Chrome, Safari, Opera */ filter: g ...
- 【php】 检测 ie ie11 edge浏览器
来源 php.net 官网评论截取 -- Declan kelly Please note that Internet Explorer 11 no longer contains MSIE in i ...
- Lex与Yacc学习(十)之Yacc库
Yacc库 每个实现都需要有用的例程库,在UNIX系统中,可以通过cc命令行尾端给出-ly标志(或通过其他系统下的等价物)来包含库. 库的内容在不同的实现之间是不同的,但总是包括main()和yyer ...
- Java的9种基本数据类型以及封装类
Java的9种基本数据类型以及封装类 基本类型 大小(单位/字节) 默认值 封装类 byte 1 (byte)0 Byte short 2 (short)0 Short int 4 0 Integer ...
- shell 几中专用修饰符 :- :+ := ${variable:offset:length}
1.${variable:-word} ${variable:-word} 如果variable已经被设置了,且不为空,则代入它的值,否则代入word; $ fruit=peach $ echo ${ ...