一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的 数据包的结构。
注:
TCP/IP协议:负责保证数据包可靠地传递。
http协议将数据打包之后,需要交给tcp/ip协议来传递这些数据包。
a.请求行 (请求方式 请求资源路径 协议和版本)
b.消息头
注:
消息头是一些键值对(使用": "分隔),用来传递一些
特定的信息,比如,浏览器可以通过发送"user-agent"
消息头,告诉服务器,浏览器的类型和版本。
c.实体内容
当请求方式为get时,实体内容为空。
当请求方式为post时,实体内容不为空(请求参数)
a.状态行(协议和版本 状态码 状态描述)
注:
状态码是一个三位数字,表示服务器处理请求的一种状态
200: 正确
500: 系统出错
404: 依据请求路径找不到对应的资源
b.消息头
服务器也可以发送一些消息头给浏览器,比如,服务器可以发送
"content-type"消息头,告诉浏览器,服务器返回的数据类型。
c.实体内容
程序返回的处理结果,浏览器解析出来之后,生成相应的页面。
a.哪一些情况下,浏览器会发送get请求?
a1.在浏览器地址栏输入某个地址。
a2.点击链接。
a3.表单默认的提交方式。
b.get请求的特点
b1.会将请求参数显示在浏览器地址栏,不安全。
注:(了解)
有一些网络设备,比如路由器,会记录请求地址。
b2.会将请求参数添加到请求资源路径的后面,只能提交少量数据。
注:
请求行能够存放大约2k左右的数据
a.哪一些情况下,浏览器会发送post请求?
a1.设置method="post"。
b.post请求的特点?
b1.不会将请求参数显示在浏览器地址栏,相对安全。
注:
http协议并不会对数据包中的数据加密。
如果传递的数据需要加密的话,可以使用https协议。
b2.会将请求参数添加到实体内容里面,可以提交大量的数据。
out.println方法在输出时,默认使用"iso-8859-1"来编码。
/*
* 作用1: 设置content-type消息头的值(
* 即设置服务器端返回的数据类型)。
* 作用2: out.println方法在输出时,会使用指定
* 的字符集来编码。
*/
response.setContentType(
"text/html;charset=utf-8");
注:
请求参数名如果写错,会获得null值。
表单提交时,如果不填写任何数据,会获得""。
注:
当有多个请求参数名相同时,使用此方法。
对于多选框,如果用户一个都不选择,会获得null值。
提交表单时,浏览器会按照打开该表单所在的页面时的字符集来编码
(比如,按照utf-8来编码)。服务器端默认会使用"iso-8859-1"来解码, 这样就产生了乱码。
/*
* 设置处理post请求时,使用指定的字符集
* 对请求参数值进行解码。
* 注:
* 这行代码一定要添加到所有的getParameter
* 方法的最前面。
*/
request.setCharacterEncoding("utf-8");
可以修改tomcat的配置文件(server.xml),添加
<Connector URIEncoding="utf-8"/>。
作用是,告诉tomcat,对于get请求,使用哪种字符集来解码。
注:
tomcat8.0及以上版本,对于get请求,默认会使用utf-8来解码。
计算一个人的BMI指数,输出这个人的体重状况:
bmi指数 = 体重 / 身高 / 身高。
如果性别为男,bmi指数 < 20,体重过轻,bmi指数 > 25,体重过重。
如果性别为女,bmi指数 < 19,体重过轻,bmi指数 > 24,体重过重。