1.http协议(了解)

(1)什么是http协议?

一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的 数据包的结构。

注:
    TCP/IP协议:负责保证数据包可靠地传递。
    http协议将数据打包之后,需要交给tcp/ip协议来传递这些数据包。

(2)两种数据包的结构

1)请求数据包

a.请求行 (请求方式 请求资源路径 协议和版本)
b.消息头
    注:
        消息头是一些键值对(使用": "分隔),用来传递一些
        特定的信息,比如,浏览器可以通过发送"user-agent"
        消息头,告诉服务器,浏览器的类型和版本。
c.实体内容
    当请求方式为get时,实体内容为空。
    当请求方式为post时,实体内容不为空(请求参数)

2)响应数据包

a.状态行(协议和版本 状态码 状态描述)
    注:
        状态码是一个三位数字,表示服务器处理请求的一种状态
        200: 正确
        500: 系统出错
        404: 依据请求路径找不到对应的资源
b.消息头
    服务器也可以发送一些消息头给浏览器,比如,服务器可以发送
    "content-type"消息头,告诉浏览器,服务器返回的数据类型。
c.实体内容
    程序返回的处理结果,浏览器解析出来之后,生成相应的页面。

(3)两种请求方式

1)get请求

a.哪一些情况下,浏览器会发送get请求?

a1.在浏览器地址栏输入某个地址。
a2.点击链接。
a3.表单默认的提交方式。

b.get请求的特点

b1.会将请求参数显示在浏览器地址栏,不安全。
注:(了解)
    有一些网络设备,比如路由器,会记录请求地址。
b2.会将请求参数添加到请求资源路径的后面,只能提交少量数据。
注:
    请求行能够存放大约2k左右的数据

2)post请求

a.哪一些情况下,浏览器会发送post请求?

a1.设置method="post"。

b.post请求的特点?

b1.不会将请求参数显示在浏览器地址栏,相对安全。
注:
    http协议并不会对数据包中的数据加密。
    如果传递的数据需要加密的话,可以使用https协议。

b2.会将请求参数添加到实体内容里面,可以提交大量的数据。

2.Servlet输出中文,需要如何处理?

(1)为什么会有乱码?

out.println方法在输出时,默认使用"iso-8859-1"来编码。

(2)如何处理?

/*
 * 作用1: 设置content-type消息头的值(
 * 即设置服务器端返回的数据类型)。
 * 作用2: out.println方法在输出时,会使用指定
 * 的字符集来编码。
 */
response.setContentType(
            "text/html;charset=utf-8");

3.如何获得请求参数值?

(1)String request.getParameter(String paramName);

注:
    请求参数名如果写错,会获得null值。
    表单提交时,如果不填写任何数据,会获得""。

(2)String[] request.getParameterValues(String paramName);

注:
    当有多个请求参数名相同时,使用此方法。
    对于多选框,如果用户一个都不选择,会获得null值。

4.表单包含有中文参数值,如何处理?

(1)为什么会有乱码?

提交表单时,浏览器会按照打开该表单所在的页面时的字符集来编码
(比如,按照utf-8来编码)。服务器端默认会使用"iso-8859-1"来解码,   这样就产生了乱码。

(2)如何解决?

1)post请求

    /*
     * 设置处理post请求时,使用指定的字符集
     * 对请求参数值进行解码。
     * 注:
     *   这行代码一定要添加到所有的getParameter
     * 方法的最前面。
     */
    request.setCharacterEncoding("utf-8");

2)get请求

可以修改tomcat的配置文件(server.xml),添加
<Connector  URIEncoding="utf-8"/>。
作用是,告诉tomcat,对于get请求,使用哪种字符集来解码。

注:
    tomcat8.0及以上版本,对于get请求,默认会使用utf-8来解码。

练习

计算一个人的BMI指数,输出这个人的体重状况:

bmi指数 = 体重 / 身高 / 身高。

如果性别为男,bmi指数 < 20,体重过轻,bmi指数 > 25,体重过重。
如果性别为女,bmi指数 < 19,体重过轻,bmi指数 > 24,体重过重。