后台(10)——Servlet(2)

探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制



Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南



自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


版权声明



在上一篇博客中,我们已经对Servlet有了基础的简单的了解,在深入认识Servlet之前,我们来一起学习HTTP协议。

HTTP简介

HTTP协议(HyperText Transfer Protocol)又叫作超文本传输协议,它是用于从服务器传输超文本到浏览器的传送协议。HTTP不仅保证计算机正确、高效、快速地传输超文本文档还可确定传输文档中的哪一部分内容优先显示。

HTTP是一个应用层协议,一次HTTP通信由请求和响应构成。客户端向服务器发送一个请求,在该请求中包含:请求的方法、URL、用户信息、协议版本、等等信息。服务器在接收到请求后发对此作出响应并返回一个答复消息,该消息包括:响应的时间、请求成功或失败的标识、协议的版本、回复的内容等等信息。


HTTP的特点

标准的HTTP协议是无连接的,无状态的。无连接指的是:每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后即断开连接。无状态指的是:协议对于请求的处理没有记忆能力,也就是说每次请求都是独立的,它的执行结果与之前和之后的请求是无直接关系的

标准HTTP协议既有优点也有缺点:优点在于极大地减轻了服务器的压力,每一次请求不会造成不必要连接占用;缺点在于繁复地建立连接和断开连接,请求会传输大量重复的信息,所以随后出现了Keep-Alive、Cookie、Session在某些程度上弥补了标准HTTP的缺点。


HTTP的请求与响应

我们知道:每一次HTTP的请求都由请求(request)和响应(response)构成,在此对这两部分作进一步的说明。

HTTP的请求

HTTP请求由三部分组成:请求消息行、请求消息头、请求消息体

请求消息行

示例如下:

GET /HelloWeb/test.html HTTP/1.1

请求消息行包含三部分内容:

  • 请求方式,比如此处的GET
  • 资源URI,比如此处的/HelloWeb/test.html
  • 协议及其版本号,比如此处的HTTP/1.1

请求消息头

示例如下:

Host:localhost
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Charset: UTF-8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6
Cache-Control: max-age=0
Cookie:JSESSIONID=97C4302F3350676F65B5E4409ABA87CF
Referer: http://blog.csdn.net/lfdfhl
Content-Type:application/x-www-form-urlencoded
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36
Connection: keep-alive
Date: Tue, 15 Nov 2017 01:12:31 GMT

请求消息头中内容较多,现将常用和重要的字段介绍如下:

Host:发起请求的主机名及其端口号
Accept:客户端可接收的文档类型。其中,*/*表示可接收任何类型
Accept-Charset: 客户端可接受的字符编码集
Accept-Encoding: 客户端支持的压缩格式
Accept-Language:客户端可接受的语言
Cache-Control:设置请求和响应遵循的缓存机制
Cookie:HTTP请求发送时会把保存在该请求域名下的所有cookie值一起发送至服务器。
Referrer:发起HTTP请求的页面的URL
Content-Type:请求时所传递的内容的类型
Content-Length:请求时所传递的内容的长度
If-Modified-Since:该值与响应消息头的Last-Modified字段相对应。Last-Modified与If-Modified-Since都是用来记录页面的最后修改时间。当客户端访问页面时,服务器会将页面最后修改时间通过Last-Modified由服务器发往客户端,客户端会记录下该值;当客户端再次发起请求时,客户端会通过 If-Modified-Since将此前服务器端发过来的最后修改时间戳发送回去;服务器通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的则返回新的内容,如果是最新的则返回304告诉客户端其本地cache的页面是最新的,于是客户端就可直接从本地加载页面。
User-Agent:表示发出该请求的客户端的相关信息,比如操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言等等
Connection: 表示是否需要持久连接,HTTP 1.1默认进行持久连接。
Date: 请求发送的日期和时间
Range:用于告知服务器只需返回部分内容,故用该Range描述这部分内容的范围;该字段对于断点续传等功能非常实用

其实,从这里可以看出来:在每次请求时,客户端需要告诉服务器:自身支持的字符集,压缩格式,语言;请求的消息内容,长度等等众多信息,从而尽量清楚地表达自身的条件和需求以便服务器做出相应的响应。

请求消息体

username=大泽玛利亚&hobby=摄影

当请求方式是POST方式时可见消息正文,假若是GET方式则请求消息体中无内容

HTTP的响应

HTTP响应由三部分组成:响应消息行、响应消息头、响应消息体

响应消息行

HTTP/1.1 200 OK

响应消息行由三部分组成:

  • 协议及其版本号,比如此处的 HTTP/1.1
  • 响应状态码,比如此处的200
    常用的状态码有:200(正常)、02/307(临时重定向)、304(未修改)表示客户端缓存的版本是最新的,客户端无需到服务器请求、404(找不到)、500(服务器内部错误)
  • 响应码的描述,比如此处的OK

响应消息头

Accept-Ranges: bytes
Content-Encoding: gzip
Content-Length: 4533
Content-Language: en,zh
Content-Type: text/html
Date: Sun, 06 Sep 2015 07:56:07 GMT
Last-Modified: Fri, 04 Sep 2015 13:37:55 GMT
Server: apache tomcat
Location: http://blog.csdn.net/lfdfhl
Refresh: 5; url=http://www.csdn.net/
Content-Disposition: attachment; filename=test.zip
Set-Cookie: UserID=tom; Max-Age=3600; Version=1
Expires: Thu, 01 Dec 2015 12:20:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Connection: keep-alive

响应消息头中内容较多,现将常用和重要的字段介绍如下:

Accept-Ranges: 表明服务器是否支持指定范围请求及哪种类型的分段请求。假若服务器想告诉浏览器不要使用Range,则返回Accept-Range: none;假若服务器想告诉浏览器可使用以byte为单位的Range的请求,则返回Accept-Range:bytes
Content-Encoding: 服务器的返回内容的压缩编码类型
Content-Length: 服务器的返回内容的的长度
Content-Language: 服务器的返回内容的语言
Content-Type: 服务器的返回内容的类型
Date:服务器发出响应的时间
Last-Modified: 返回的内容的最后修改时间
Server: 服务器的类型
Location:指示被请求的资源的位置,常和请求消息头一起使用完成请求重定向
Refresh:延时跳转到某个页面或者定时刷新本页面
Content-Disposition: 指示客户端下载文件
Set-Cookie: 服务器端发送给客户端的Cookie
Expires: 响应过期的时间
Cache-Control: 指定响应遵循的缓存机制
Pragma: 用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同
Connection: 表示是否需要持久连接,HTTP 1.1默认进行持久连接。

响应消息体

响应消息体中表示响应的的具体内容。比如,响应的内容是网页,那么响应消息体的内容和网页右键”查看网页源代码”所看到的内容一样。


后会有期

在此简单地介绍了HTTP协议,但也不会如此仓促地完结。我们将在后续的博客中结合Servlet对与HTTP紧密相关的Cookie和Session进行详细的学习,再会。

时间: 2024-08-22 01:26:16

后台(10)——Servlet(2)的相关文章

ajaxFileUpload后台的servlet取不到值

问题描述 ajaxFileUpload后台的servlet取不到值 解决方案 你设置断点确定进了doPost吗? 是不是web.xml里面没有做servlet的配置?

后台(11)——Servlet(3)

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View

后台(09)——Servlet(1)

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View

后台(28)——文件下载

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View

JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

一.http协议回顾: 在上一篇文章中:JavaWeb学习之Servlet(一)----MyEclipse及Tomcat的配置,我们通过在浏览器输入url,就能看到在MyEclipse中编写的Servlet资源,效果如下: 上图中,整个过程是这样的:浏览器中输入url后,会通过hosts文件/dns服务器解析为IP地址,进而找到对应ip地址的服务器. 在这期间,浏览器会通过http协议发出请求.服务器端收到请求后,做了下面这些事: (1)分析出当前请求的是哪台虚拟主机: 查看Host请求头分析出

实例讲解Servlet的图象处理

我们在处理数据时,有时希望能用图象直观的表述,在这里有一个巧方法,能方便快捷的实现一些简单的图形(不能称之图象),比如条形图,我们不必去用 java来生成并显示图象,(java生成图象很慢),我们可以这样来作,先用作图工具作一个很小的你需要的图片,再根据你所处理的数据量来实时的加长它,就可以得到所要表述的图例.比如我们在数据库中得到了一组数据,我们从中找出最大的那一个,按比列设定其标签的长度,其它的数据图形则可与它相比,得到的长度,这样,一个简简单单的条形图就出来.但有时一些简单的图形已经不能解

Java技巧:实例讲解Servlet的图象处理

servlet|技巧 我们在处理数据时,有时希望能用图象直观的表述,在这里有一个巧方法,能方便快捷的实现一些简单的图形(不能称之图象),比如条形图,我们不必去用 java来生成并显示图象,(java生成图象很慢),我们可以这样来作,先用作图工具作一个很小的你需要的图片,再根据你所处理的数据量来实时的加长它,就可以得到所要表述的图例.比如我们在数据库中得到了一组数据,我们从中找出最大的那一个,按比列设定其标签的长度,其它的数据图形则可与它相比,得到的长度,这样,一个简简单单的条形图就出来.但有时一

可以自动跳转到出错页面的servlet/jsp框架

js|servlet|页面|自动跳转 jsp有一个指令可以定义jsp的错误页面,并在此jsp页面出错时跳转到该页面输出出错日志.如下的例子:<%@ page errorPage="errorPage.jsp" %>errorPage.jsp的代码如下所示:.....<%@ page isErrorPage="true" %>....//输出出错日志<%= exception.getMessage() %> 但是,这只能在jsp页面

我自己用java写好了后台,现在APP那边叫我提供接口。

问题描述 我自己用java写好了后台,现在APP那边叫我提供接口. 我怎么提供? 纠结死了 可以在我自己的后台程序里写接口提供(可以的话,给个例子),还是另外搭一个程序专门提供啊? 解决方案 接口就是 比如servlet 你把你的地址给他就行了,比如图片中的就是接口地址,本地测试加上你的ip 解决方案二: 你把参数传给他就行了,,, 解决方案三: 接口其实就是告诉人家需要给你传什么参数,用什么格式传,如果是web应用的话,就是告诉他你的servlet访问地址,以及需要哪些参数,一般是通过url的