(1)、HTTP协议

Web浏览器和服务器通过HTTP协议在Internet上发送和接收消息。HTTP是一种基于请求/响应模式的协议。客户端发送一个请求,服务器端返回对该请求响应。

HTTP使用可靠的TCP连接,默认端口是80。

(2)、HTTP请求

HTTP请求由3个部分构成,分别是:

l  请求方法URI协议/版本

l  请求头(Request Header)

l  请求正文

下面是一个HTTP请求的例子:

GET/sample.jspHTTP/1.1

 

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

 

username=ssss&password=1234

 

1>、请求方法URI协议/版本

以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1”代表协议和协议的版本。

根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

2>、请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

3>、请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

username=rrrro&password=1234

在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

HTTP响应

与HTTP请求相似,HTTP响应也由3个部分构成,分别是:

l  协议状态版本代码描述

l  响应头(Response Header)

l  响应正文

下面是一个HTTP响应的例子:

HTTP/1.1 200 OK

 

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

 

<html>
<head>

<title>HTTP响应示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

1>、协议 状态代码描述

HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功):

HTTP/1.1 200 OK

2>、响应头(Response Header)

响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:

  Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:13:33 GMT

Content-Type:text/html

Last-Moified:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

3>、响应正文

响应正文就是服务器返回的HTML页面:

  <html>
<head>

<title>HTTP响应示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

响应头和正文之间也必须用空行分隔。  

(3)HTTPServlet的功能

在了解具体的HTTP协议规范后,可以更好地理解HttpServlet的作用,它能够根据客户发出HTTP请求,生成相应的HTTP响应结果。HttpServlet首先必须读取HTTP请求的内容。Servlet容器负责创建HttpRequest对象,并把HTTP请求信息封装到HttpRequest对象中,这大大简化了HttpServlet解析请求数据的工作量。如果没有HttpRequest,HttpServlet只能直接处理Web客户发出的原始的字符数据,有了HttpRequest后,只要调用HttpServletRequest的相关方法,就可以方便地读取HTTP请求中任何一部分信息,HttpServletRequest中读取HTTP请求信息的常用方法参见下表

HttpServletRequest对象的常用方法

方法

描述

getCookie()

返回HTTP请求的Cookies

getHeader(String name)

返回参数指定的HTTP请求的Header数据

getRequestURI()

返回HTTP请求的URI

getQueryString()

返回HTTP请求数据中的查询字符串

getMethod()

返回HTTP请求方法

Servlet容器还向HttpServlet提供了HttpServletResponse对象,HttpServlet可以通过它来生成HTTP响应的每一部分内容,HttpServletResponse提供了生成响应数据Header的方法

HttpServletResponse对象的常用方法

方法

描述

addCookie(Cookie cookie)

向HTTP响应中加入Cookie

setHeader(String name,String value)

设置HTTP响应的Header,如果参数name对应的Header已经存在,则覆盖原来的Header数据

addHeader(String name,String value)

向HTTP响应中加入Header

(4)Servlet容器响应Web客户请求流程的UML时序图

在时序图中,从对象A到对象B的箭头,表示A向B发送一条消息,B接收到消息后,将执行相关的操作,因此也可理解为A调用B的方法。例如在UML时序图步骤5,表示Servlet容器调用HttpServlet的service()方法,对于步骤2,箭头的起点和终点都指向Servlet容器,表示Servlet容器调用自身的方法来解析HTTP请求信息。

1.      Web客户向Servlet容器发出HTTP请求;

2.      Servlet容器解析Web的HTTP请求;

3.      Servlet容器创建一个HttpRequest对象,在这个对象中封装了HTTP请求信息;

4.      Servlet容器创建一个HttpResponse对象;

5.      Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象为Service方法的参数传给HttpServlet对象;

6.      HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

7.      HttpServlet调用HttpResponse的有关方法,生成响应数据;

8.       Servlet容器把HttpServlet的响应结果传给Web客户

--------------------

++转载

转载于:https://www.cnblogs.com/SamFlynn/p/4461463.html

HTTP与HttpServlet相关推荐

  1. HttpServlet详解

    2019独角兽企业重金招聘Python工程师标准>>> Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax. ...

  2. Httpservlet cannot be resolved to a type的原因与解决方法

    Httpservlet cannot be resolved to a type,显然是Eclipse找不到相应的包,即javax.servlet. 原因: jdk 里不包括servlet-api.j ...

  3. httpservlet.java:131_Servlet学习1:Http状态码、多个Servlet之间调用规则、多个Servlet之间数据共享实现方案...

    Http状态码 1.介绍: 1)由三位数字组成的一个符号. 2)Http服务器在推送响应包之前,根据本次请求处理情况将Http状态码写入到响应包中[状态行]上 3)如果Http服务器针对本次请求,返回 ...

  4. IDEA中引用不到HttpServlet的解决方案

    IDEA中引用不到HttpServlet的解决方案 参考文章: (1)IDEA中引用不到HttpServlet的解决方案 (2)https://www.cnblogs.com/qcq0703/p/11 ...

  5. 在Java Build Path中找不到超类“javax.servlet.http.HttpServlet”[重复]

    本文翻译自:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path ...

  6. Servlet简介与Servlet和HttpServlet运行的流程

    2019独角兽企业重金招聘Python工程师标准>>> 1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序. ...

  7. 用Eclipse开发JavaWeb项目:错误信息 javax.servlet.http.HttpServlet was not found on the Java Build Path...

    1.错误描述:JSP页面顶端出现"红色"的报错信息:The superclass "javax.servlet.http.HttpServlet" was no ...

  8. maven 错误:HttpServlet was not found on the Java

    错误:HttpServlet was not found on the Java

  9. 重写HttpServlet

    自己写一个MyServlet package com.servlet;import java.io.IOException;import javax.servlet.Servlet; import j ...

  10. [Solution] The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path

    HttpServlet需要tomcat等. 右键project点开properties>project facets> 在右侧栏的Runtime tab中勾选tomcat或者新建tomca ...

最新文章

  1. python中不同类型的数据不能相互运算_python数据类型和运算
  2. 中企ITIL需软落地
  3. 智伴机器人课文跟读哪里有_仁爱版英语九年级上册Unit4 Topic1单词课文朗读/翻译+知识汇总...
  4. 解决Windows环境下Git Bash 不能输入中文的问题
  5. OC-成员变量的作用域
  6. java取linux本地xml,java-使用apache poi读取.xlsx文件会在Linux机器...
  7. html加速度陀螺仪坐标,如何从Javascript访问加速度计/陀螺仪数据?
  8. java arraylist 添加对象_如何在Java中将对象添加到ArrayList
  9. django官方文档3.0学习笔记 02
  10. 小细节见实力,告诉你vivo Z3如何成为爆款千元机
  11. halt、poweroff
  12. mac os 配置hosts
  13. 做一个人脸识别相关的毕业设计
  14. 锐捷睿易:acl的制定和应用
  15. ssh查看服务器上的文件,ssh 访问远程服务器文件路径
  16. 远程桌面无法连接 计算机死机,远程桌面被远程的机器就死机解决方案
  17. 真实孔径雷达——东方至远
  18. uniapp 扫码、拍照
  19. css 实现居中对齐的几种方式
  20. 一个工作一年半的程序员的自述(三)

热门文章

  1. 工作八年总结(转载)
  2. oracle性能调整的九大要点:四诊断latch竞争
  3. android圆形进度条ProgressBar颜色设置
  4. 《C#图解教程》读书笔记之六:接口和转换
  5. 【Flask】sqlalchemy 排序
  6. Codeforces 85D Sum of Medians
  7. Symbian S60 3rd中的能力说明
  8. 使用 HttpWebRequest 向网站提交数据
  9. Redis大乱探------哨兵(二)
  10. C++ sprintf 函数的使用