• HTTP与HttpServlet


    (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种请求方法:GETPOSTHEADOPTIONSPUTDELETETARCE。在Internet应用中,最常用的方法是GETPOST

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

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

    2.      Servlet容器解析WebHTTP请求;

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

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

    5.      Servlet容器调用HttpServletservice方法,把HttpRequestHttpResponse对象为Service方法的参数传给HttpServlet对象;

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

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

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

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

    ++转载

  • 相关阅读:
    网络IO之阻塞、非阻塞、同步、异步总结
    C语言栈与调用惯例
    多个文件目录下Makefile的写法
    利用 mount 指令解决 Read-only file system的问题
    error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
    Centos6.4下安装protobuf及简单使用
    Centos下修改启动项和网络配置
    Centos下配置单元测试工具gtest
    Centos配置为驱动程序开发环境
    Centos安装gcc及g++
  • 原文地址:https://www.cnblogs.com/SamFlynn/p/4461463.html
Copyright © 2020-2023  润新知