(1)、HTTP协议

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

(2)、HTTP请求

个部分构成,分别是:

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”代表协议和协议的版本。

种请求方法: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响应

个部分构成,分别是:

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/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时序图

,表示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客户

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

++转载

HTTP与HttpServlet的更多相关文章

  1. The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path解决方案

    0.环境: win7系统,Tomcat9配置无误. 1.错误: 项目中某一.jps页面忽然出现错误,鼠标点上去为:The superclass "javax.servlet.http.Htt ...

  2. The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。问题

    JSP页面顶端出现“红色”的报错信息:The superclass "javax.servlet.http.HttpServlet" was not found on the Ja ...

  3. 错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    我们在利用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on ...

  4. eclipse中 报出The type javax.servlet.http.HttpServlet cannot be resolved. It is indirect错误

    在Myeclispe部署项目后 报错 The type javax.servlet.http.HttpServlet cannot be resolved. It is indirect错误 如果在M ...

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

    1.Servlet      [1] Servlet简介         > Server + let         > 意为:运行在服务器端的小程序.         > Ser ...

  6. Servlet/JSP-03 HttpServlet

    一. GenericServlet GenericServlet本身是一个抽象类,并且实现了Servlet和ServletConfig接口 其在内部定义了一个私有的ServletConfig类型的变量 ...

  7. ubuntu下eclipse遇到The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    JSP页面顶端出现“红色”的报错信息:The superclass "javax.servlet.http.HttpServlet" was not found on the Ja ...

  8. servlet、genericservlet、httpservlet之间的区别

    转自:http://blog.csdn.net/rat9912345/article/details/5161789 当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法 ...

  9. HttpServlet 详解(注!仿)

    Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ...

  10. Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)

    本篇记录了HttpServlet的实现过程,主要讲述了如何依赖Servlet,GenericServlet实现的原理. HttpServlet实现过程:1.是一个Servlet,继承自GenericS ...

随机推荐

  1. C语言strlen函数和sizeof操作符

    字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...

  2. 为App签名(为apk签名)

    为App签名(为apk签名) 原文地址 这篇文章是Android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商 ...

  3. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { }; int main() { ...

  4. EnterpriseLibrary之Caching应用

    http://blog.csdn.net/linux7985/article/details/6239433 http://cache.baiducontent.com/c?m=9f65cb4a8c8 ...

  5. UI—代理简单使用

    代理:又叫委托 通俗的说是自己不能办的事 委托给别人去办.比如UITextField,UIAlertView都使用了代理 写代理的步骤: 1.声明代理里面的协议方法(@protocl) 2.声明协议的 ...

  6. 【jmeter】属性和变量

    一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...

  7. 在VS 2010中使用 VS2013的解决方案

    本文转载自:http://blog.csdn.net/u011543589/article/details/25563351 今天要用VS2010打开VS2013,一直觉得VS2010到VS2012只 ...

  8. android学习笔记40——国际化和资源自适应

    国际化——Internationalization,简称I18N. 本地化——Localization,检查L10N. java国际化资源的思路: java提供国际化资源的思路,是将程序中的标签.提示 ...

  9. 文件压缩与挤压ZIP

    /// <summary> /// Zip压缩与解压缩 /// </summary> public class ZipHelper { /// <summary> ...

  10. activiti自定义流程之自定义表单(二):创建表单

    注:环境配置:activiti自定义流程之自定义表单(一):环境配置 在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进 ...