HTTP与HttpServlet
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的更多相关文章
- 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 ... 
- 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 ... 
- 错误: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 ... 
- 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 ... 
- Servlet简介与Servlet和HttpServlet运行的流程
		1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序. > Ser ... 
- Servlet/JSP-03  HttpServlet
		一. GenericServlet GenericServlet本身是一个抽象类,并且实现了Servlet和ServletConfig接口 其在内部定义了一个私有的ServletConfig类型的变量 ... 
- 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 ... 
- servlet、genericservlet、httpservlet之间的区别
		转自:http://blog.csdn.net/rat9912345/article/details/5161789 当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法 ... 
- HttpServlet 详解(注!仿)
		Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ... 
- Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)
		本篇记录了HttpServlet的实现过程,主要讲述了如何依赖Servlet,GenericServlet实现的原理. HttpServlet实现过程:1.是一个Servlet,继承自GenericS ... 
随机推荐
- Android Wear(手表)开发 - 学习指南
			版权声明:欢迎自由转载-非商用-非衍生-保持署名.作者:Benhero,博客地址:http://www.cnblogs.com/benhero/ Android Wear开发 - 学习指南 http: ... 
- HDU2490 parade
			题目大意:一个n+1行m+1列的表格,每个格子两个数w和c,表示经过该格子的happy和体力消耗值tireness.现在从最下面任意处开始,可以向左向右向上走.但不能向下.每个格子不能经过两次.在每一 ... 
- 【maven】之使用jetty发布web项目
			<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin ... 
- 使用NSOperation使用,创建线程中传递多个参数
			参考:http://blog.csdn.net/dqjyong/article/details/7677557 参考:http://stackoverflow.com/questions/232761 ... 
- python 读取sqlite3 数据库
			import sqlite3 name = "tom" age = 30 con = sqlite3.connect("d:\\test.db") cur = ... 
- Tomcat的ServletAPI与Jetty的不能混用,否则会出现Serlvt类无法编译
- json字符串相关转换方法
			/** json转换为Map * @param jsonStr json * @return map集合 */ public static HashMap<String, String> ... 
- OAF_EO系列2 - Validation数据校验验证机制(概念)
			2014-06-12 Created By BaoXinjian 
- haxm intelx86加速模拟器的安装
			http://blog.csdn.net/huang9012/article/details/18082601 如果安装了还出现 创建模拟器 选项 CPU/abi的时候还出现 no system im ... 
- python数据分析师面试题选
			以下题目均非原创,只是汇总 python数据分析部分 1. 如何利用SciKit包训练一个简单的线性回归模型 利用linear_model.LinearRegression()函数 # Create ... 
