一、Http协议
Http协议:超文本传输协议,详细规定了浏览器与服务器之间相互通讯的规则。
Http协议主要分为俩部分:
- 从浏览器到服务器:请求协议
- 从服务器到浏览器:响应协议
本篇主要介绍的是请求协议及HttpServletRequest对象
二、请求协议组成
1、请求首行
2、请求头
3、请求体(get请求没有请求体
)
2.1、Get请求
请求首行:
GET /Day28Exerice/form.html?username=jack&password=123 HTTP/1.1
请求方式:GET
请求服务器路径:/Day28Exerice/form.html?username=jack&password=123(其中包括了用户提交的数据
)
协议与版本:HTTP/1.1
请求头:
-
Accept text/html, application/xhtml+xml, * / *
告诉服务器,当前客户端可以接收的文档类型,其实这里包含了* / *,就表示什么都可以接收;
-
Referer http://localhost:8080/Day28Exerice/form.html?username=jack&password=123
统计是通过点击什么连接进入本页
-
Accept-Language zh-CN
当前客户端支持的语言,可以在浏览器的工具à选项中找到语言相关信息;
-
User-Agent Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; ASU2JS; rv:11.0) like Gecko
与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
-
Accept-Encoding gzip, deflate
支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
-
Host localhost:8080
请求的主机名为localhost;
-
Connection Keep-Alive
客户端支持的链接方式,保持一段时间链接,默认为3000ms;
2.2、Post请求
请求首行:
Post请求方式的请求首行与Get请求基本相同,只是在其中的服务器路径中没有用户提交的数据。
请求头:
其他与Get请求相同
如果以Post请求重复访问本页,将会多出一项:
- Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:
因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过;这个Cookie的名字为JSESSIONID,然后在讲会话是讲究它!
请求体:
其中包含了用户提交的数据。
三、HttpServletRequest对象
HttpServletRequest它是ServletRequest接口的一个子接口!它对父接口进行了扩展,具备了处理Http请求协议的能力
当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中
这个对象主要是用于获取一切与请求相关的内容,我们学习这个对主要是学习里面的方法,这些方法都是围绕Http请求协议展开
3.1、操作请求首行的方法
方法 | 功能 |
---|---|
String getMethod() | 获取请求方式的类型 |
String getRemoteAddr() | 获得客户端的ip地址 |
String getContextPath() | 获得项目路径 |
String getRequestURI() | 获取请求行中的资源名部分 |
StringBuffer getRequestURL() | 获取客户端发出请求完整URL |
String getProtocol() | 获取当前协议的名称和版本 |
int getLocalPort() | 获取端口 |
3.2、操作请求头的方法
方法 | 功能 |
---|---|
String getHeader(String name) | 以String 的形式返回指定请求头的值 |
Enumeration getHeaderNames() | 返回此请求包含的所有头名称的枚举 |
3.3、操作请求体的方法(GET请求没有请求体)
方法 | 功能 |
---|---|
String getParameter(String name) | 根据表单的name属性 获取对应的值 |
String[] getParameterValues(String name) | 获取name相同的所有value 如复选框。 |
Map<String,String[]>getParameteMap() | 参数名作为key,参数值作为value,封装到map中。 |