HTTP与HttpServlet
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相关推荐
- HttpServlet详解
2019独角兽企业重金招聘Python工程师标准>>> Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax. ...
- Httpservlet cannot be resolved to a type的原因与解决方法
Httpservlet cannot be resolved to a type,显然是Eclipse找不到相应的包,即javax.servlet. 原因: jdk 里不包括servlet-api.j ...
- httpservlet.java:131_Servlet学习1:Http状态码、多个Servlet之间调用规则、多个Servlet之间数据共享实现方案...
Http状态码 1.介绍: 1)由三位数字组成的一个符号. 2)Http服务器在推送响应包之前,根据本次请求处理情况将Http状态码写入到响应包中[状态行]上 3)如果Http服务器针对本次请求,返回 ...
- IDEA中引用不到HttpServlet的解决方案
IDEA中引用不到HttpServlet的解决方案 参考文章: (1)IDEA中引用不到HttpServlet的解决方案 (2)https://www.cnblogs.com/qcq0703/p/11 ...
- 在Java Build Path中找不到超类“javax.servlet.http.HttpServlet”[重复]
本文翻译自:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path ...
- Servlet简介与Servlet和HttpServlet运行的流程
2019独角兽企业重金招聘Python工程师标准>>> 1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序. ...
- 用Eclipse开发JavaWeb项目:错误信息 javax.servlet.http.HttpServlet was not found on the Java Build Path...
1.错误描述:JSP页面顶端出现"红色"的报错信息:The superclass "javax.servlet.http.HttpServlet" was no ...
- maven 错误:HttpServlet was not found on the Java
错误:HttpServlet was not found on the Java
- 重写HttpServlet
自己写一个MyServlet package com.servlet;import java.io.IOException;import javax.servlet.Servlet; import j ...
- [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 ...
最新文章
- python中不同类型的数据不能相互运算_python数据类型和运算
- 中企ITIL需软落地
- 智伴机器人课文跟读哪里有_仁爱版英语九年级上册Unit4 Topic1单词课文朗读/翻译+知识汇总...
- 解决Windows环境下Git Bash 不能输入中文的问题
- OC-成员变量的作用域
- java取linux本地xml,java-使用apache poi读取.xlsx文件会在Linux机器...
- html加速度陀螺仪坐标,如何从Javascript访问加速度计/陀螺仪数据?
- java arraylist 添加对象_如何在Java中将对象添加到ArrayList
- django官方文档3.0学习笔记 02
- 小细节见实力,告诉你vivo Z3如何成为爆款千元机
- halt、poweroff
- mac os 配置hosts
- 做一个人脸识别相关的毕业设计
- 锐捷睿易:acl的制定和应用
- ssh查看服务器上的文件,ssh 访问远程服务器文件路径
- 远程桌面无法连接 计算机死机,远程桌面被远程的机器就死机解决方案
- 真实孔径雷达——东方至远
- uniapp 扫码、拍照
- css 实现居中对齐的几种方式
- 一个工作一年半的程序员的自述(三)