昨天servlet生命周期中,将用户的请求根据http协议打包发送给tomcat服务器,今天研究一下http协议是什么技术。
1.Http协议是什么?
它是超文本传输控制协议,定义了浏览器之间数据传输的方式和格式。
html是超文本标记语言,xml是可扩展标识语言
1.1数据传输的方式:
浏览器请求建立链接,ip:port方式;
浏览器向服务器发送请求,其中包含url-pattern
服务器处理请求
服务器发送响应数据给浏览器,然后关闭链接;
如果浏览器想向服务器再次发送请求,需要再次重新的请求建立连接
1.2浏览器数据传输的格式:
a:请求数据包中包含:
请求行:请求方式get/post以及请求资源的路径
若干消息头:通讯预定,包含浏览器的版本
实体内容:post请求方式的数据保存在实体内容中,如果是get方式,请求的数据会放到请求资源的路径之后。
b:响应数据包:
状态行:协议版本和状态的描述200正常,404表示找不到资源,500表示系统内部错误
若干消息头:比如服务器可以向浏览器发送cookie
实体内容:服务器处理完之后的结果,一般要求浏览器要显示的内容和数据
1.3get/post请求方式:
get方式:表单默认提交的方式,直接在地址栏显示请求数据,请求数据会放到请求资源的路径后面。
可以通过链接访问某个地址
get方式的特点:在地址栏会显示请求数据,请求数据放在请求路径后面
get方式一般用于想服务器获取资源,浏览器可能会缓存get方式访问过的数据。
pos方式:表单的提交方式,method设置为post方式,数据不会在地址栏显示,数据会放在实体内容里面
post方式一般用于向服务器提交数据
优缺点: get提交的数据量有限制,不安全,地址栏都可以看到的。
post数据量大因为存放在实体类里面,相对安全,但是实体内容里面的数据任然没有加密,可以借助工具看到。
1.4重定向:
服务器向浏览器发送一个状态码302以及一个消息头location,浏览器会立刻向location所指定的地址发送一个新的请求;
用response.sendRedirect(url)表示
重定向的地址是任意的,浏览器的地址栏会变为重定向后的地址
在重定向之前,不能有任何的输出,如果缓存当中有数据,重定向之前,会先请空缓存的数据。
2.服务器端如何处理浏览器url-pattern的请求地址?
先根据ip,port链接服务器,然后找应用名,找不到返回404状态码,再找请求名。
找到请求名之后根据web.xml映射文件找到对应的url-pattern。
根据请求名与xml映射的时候,进行的匹配方式:
精确匹配要求完全匹配,模糊匹配可以使用通配符*,*可以表示与任意强求都匹配
后缀匹配,表示*.do,只要后缀是“xxxx.do"的都可以,但是url-patttern中不能出现“/”符号。<..>*.do<..>这种形式就可以!
多个url-pattern可以指向同一个Servlet,也就是不同的请求可以获取同一数据