Servlet03.Http协议详解
一、概述
HTTP协议:超文本传输协议
Hyper:超越;Text:文本;Transfer:传输;Protocal:协议
注意:
I.HTTP协议不是传输层协议,是应用层协议(应用层:为应用程序服务的网络层)。
II.HTTP底层的传输数据仍然使用的是TCP协议(TCP协议分为长连接和短连接)。
III.HTTP1.1以上都是使用TCP长连接:前端和后端连接后不断开;目前使用的HTTP版本默认是TCP长连接。
总结:
1.HTTP是互联网的核心协议(应用程序直接使用的 协议),TCP协议是互联网的基础协议;几乎所有的互联网数据交互的应用层使用的都是HTTP协议。
2.HTTP协议可以传输的数据类型:文本、图片等二进制数据、JSON字符串
3.HTTP是一个无状态协议:无状态指的是HTTP默认不记录请求中的数据,一次访问结束,数据丢失(无缓存);但开发人员可以通过会话技术(Cookie+Session)记录请求中的数据。
4.HTTP请求分为两个阶段:HTTP请求会和服务器建立Socket,HTTP协议执行的两个阶段也就是Socket执行的过程。
I.请求阶段:前端请求(请求中包含数据)进入服务器:对应的Java对象是HttpServletRequest
II.响应阶段:服务器向前端响应即服务器发送数据给前端:对应的Java对象是HttpServletResponse
二、HttpServletRequest
1.HttpServletRequest对象的生命周期:
生:请求进入tomcat时,由tomcat创建并传入Servlet的service()中
活:一个请求处理过程中:请求处理阶段
死:一个请求处理结束:进入响应阶段
一个请求对应一个HttpServletRequest;再次向服务器发送请求,Tomcat创建新的HttpServletRequest对象;
2.HTTP协议的请求阶段:
2.1请求行: 请求地址(URL)+状态码(Status Code)+请求类型(Method)
2.2请求头:
2.3请求体:
三、get请求和post请求
1.区别:
I.GET请求的请求数据在请求行中;可以在地址栏中直接看见数据;因此Get请求一般适用于向服务器发送少量数据。
POST请求的请求参数在请求体中而不在请求行中;因此地址栏无法直接查看请求数据;并且可以向服务器发送大量数据。
II.GET请求的Payload为而POST请求的Payload为
2.获取数据的方式:
I.get请求可以使用request.getQueryString(),但很不方便。
II.两者都可以使用request.getParamter("请求参数名")返回值为String和request.getParameterValues(“请求参数名”)返回值为String[]。
getParameterValues("请求参数名"):前端未选择数据---后端是null;
getParamater("请求参数名"):前端未输入数据---后端是" ";
III.一次性获取所有请求参数名和请求参数值
把请求参数名和请求参数值看作为一个Map<String,String[]>
Map<String, String[]> parameterMap = request.getParameterMap();
把一次性获取的Map<String,String[]>自动转换为JavaBean:
第一步:添加commons-beanutils的jar包
第二步:创建实体类对象,调用工具类的populate方法
注意:commons-beanutils不能把字符串数据转换为Date类型数据:把JavaBean的日期属性修改为String类型;
SpringMVC等框架可以半自动进行转换:手动编写Converter/@Dateformat。
3.获取所有的请求参数名,但无值:
四、HttpServletRequest实现文件上传
文件是一种特殊的请求数据:二进制
文件上传步骤:
1.前端的表单需要添加enctype="multipart/form-data":告知服务器表单中有二进制数据(文件);前端发送的数据默认是String类型
2.
I. Servlet3.0之前不提供文件上传功能:需要添加第三方jar包:commons-fileupload.jar
II.Servlet3.0之后加入了对文件上传的支持,但需要使用Servlet注解。
代码: