看到有同学问这个问题,关于109行的key判断,与老师有不同的见解。

这里老师的解释是因为为了处理多次请求url的参数,进行的判断,为了以后多次的请求服务。
但是我认为不是这样的。
首先我们看一下Request这个类,参数集合map是他的一个成员变量,并且是在构造器当中进行初始化的。
也就是说,当我们点击登录,形成url,去访问服务器,服务器Server类接收到客户端请求,receive方法会为每一个请求创建Request对象。所以每一次的请求当中刚开始参数集合都是空的,没有放任何东西。所以不存在多次url会影响map参数集合的情况。

所以为什么要写if判断key,是为了处理像hobby=eat&hobby=play这样的参数而存在的。
我们存储参数map集合的时候
键:参数名称
值:为了方便处理hobby这样的对应多个参数值的参数,采用List集合作为map的值。
再来看if的判断:

当处理hobby=eat时,
判断if,集合当中是否存在hobby这样的键,不存在,向集合当中添加键为:hobby,值为一个新的List集合。
继续向下执行,根据hobby键获取到新List集合,将具体的参数值eat添加到新的List集合当中。
当处理hobby=play时,
判断if,集合当中是否存在hobby这样的值,存在,不执行if块。
继续向下执行,根据hobby键获取到对应的List集合,将具体的参数值play添加到新的List集合当中。
所以if的存在是为了判断当前处理的参数是不是第一次参加到集合的键当中。
主要是为了处理像hobby这样拥有重复参数值的参数。
如果是第一次,为其创建新的List集合作为值,将具体参数值添加到List集合当中。
如果不是第一次,获取对应的List集合,向List集合当中继续添加具体的参数值。