天天看点

Http协议

http协议内容

  • 请求端

请求(浏览器-》服务器)

GET /day09/hello HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

  • 响应端

响应(服务器-》浏览器)

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Length: 24

Date: Fri, 30 Jan 2015 01:54:57 GMT

  • 响应消息
this is hello servlet!!!

Http请求

GET /day09/hello HTTP/1.1 -------------请求行

Host: localhost:8080 -------------请求头(多个key-value对象)

--------------------一个空行

name=eric&password=123456 ----------------(可选)实体内容

URI>URL 资源定位符

请求头

Accept: text/html,image/* ----------- 浏览器接受的数据类型

Accept-Charset: ISO-8859-1 ------------- 浏览器接受的编码格式

Accept-Encoding: gzip,compress ------------ --浏览器接受的数据压缩格式

Accept-Language: en-us,zh- -------------浏览器接受的语言

Host:

www.it315.org:80

------------------(必须的)当前请求访问的目标地址(主机:端口)

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT -------------------浏览器最后的缓存时间

Referer:

http://www.it315.org/index.jsp

--------------------- 当前请求来自于哪里

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) ------------------------浏览器类型

Cookie:name=eric -------------- 浏览器保存的cookie信息

Connection: close/Keep-Alive ----------------- 浏览器跟服务器连接状态。close: 连接关闭 keep-alive:保存连接。

Date: Tue, 11 Jul 2000 18:23:51 GMT -------------- 请求发出的时间

提交内容

  • 只有POST提交的参数才会放在实体内容中

HttpServletRequest对象

HttpServletRequest对象作用是用于获取请求数据。

核心的API:

请求行:

request.getMethod(); 请求方式

request.getRequetURI() / request.getRequetURL() 请求资源

request.getProtocol() 请求http协议版本

请求头:

request.getHeader("名称") 根据请求头获取请求值

request.getHeaderNames() 获取所有的请求头名称

实体内容:

request.getInputStream() 获取实体内容数据

Http协议

image.png

Http协议
Http协议

HttpServletResponse对象

  • 响应行
response.setStatus(404);  //修改状态码
response.sendError(404);  //发送404的状态码+404的错误页面
           
  • 响应头
response.setHeader("name","value");    //name和value必须是同一个键值对的内容
           
  • 实体内容
respponse.getWriter().writer("hello world");  //字符内容
response.getOutPutStream().writer("hello world".getBytes());  //字节内容
           
  • 重定向(请求重定向相当于超链接跳转页面)
response.setStatus(302);  //发送一个302状态码
response.setHeader("location","uri/url");  //location的响应头
      **请求重定向的简化书写**
response.sendRedirect("uri/url");  //发送一个302状态码+location的响应头
           
  • 定时刷新
response.setHeader("refrech","1");  //间隔一秒定时刷新
response.setHeader("refrech","3;url/uri");  //间隔3秒跳转到指定的页面(uri/url)
           
  • 编码类型(Content-type)
//设置响应实体内容编码
response.setCharacterEncoding("utf-8");
//服务器发送给浏览器的数据类型和内容编码
response.setHeader("content-type", "text/html");
      **简化书写**
response.setContentType("text/html;charset=utf-8") ;  //和上面代码等价。推荐使用此方法

           
  • 下载
//Content-Disposition(以 下载的方式打开)
response.setHeader("Content-Disposition", "attachment; filename="+file.getName());  
//filename="+file.getName()是获取图片的名称并且在下载界面显示