java web服务器是如何工作的,Web服务器也是超文本传输协议服务器,因为它使用HTTP来跟客户端进行通信的,这通常是个web浏览器。一个基于java的web服务器使用两个重要的类:java.net.Socket 和java.net.ServerSocket,并通过 HTTP 消息进行通信。
超文本传输协议(HTTP)
HTTP 是一种协议,允许 web 服务器和浏览器通过互联网进行来发送和接受数据。它是一种请求和响应协议。客户端请求一个文件而服务器响应请求。HTTP使用可靠的TCP连接--TCP默认使用80端口。
注意:
在HTTP中,始终都是客户端通过建立连接和发送一个HTTP请求从而开启一个事务。web服务器不需要联系客户端或者对客户端做一个回调连接。无论是客户端或者服务器都可以提前终止连接。举例来说,当你正在使用一个web浏览器的时候,可以通过点击浏览器上的停止按钮来停止一个文件的下载进程,从而有效的关闭与web服务器的HTTP连接。
HTTP 请求
一个HTTP请求包括三个组成部分:
方法—统一资源标识符(URI)—协议/版本
请求的头部
主体内容
请求的头部包含了关于客户端环境和请求的主体内容的有用信息。例如它可能包括浏览器设置的语言,主体内容的长度等等。每个头部通过一个回车换行符(CRLF)来分隔的。
对于HTTP请求格式来说,头部和主体内容之间有一个回车换行符(CRLF)是相当重要的。 CRLF告诉HTTP服务器主体内容是在什么地方开始的。在一些互联网编程书籍中, CRLF还被认为是HTTP请求的第四部分。
补充
http请求之请求行 (转)
http阐述:
http请求由三部分组成,分别是:请求行、消息报头、请求正文
但由于消息报头和请求正文之间有一个"CRLF"
所以我自己定义为四部分
即:
请求行
消息报头
CRLF
正文
请求行阐述:
1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-
URI HTTP-Version CRLF
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;
CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
应用举例:
GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,
eg:GET /form.html HTTP/1.1 (CRLF)
POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。
eg:POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.guet.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //该CRLF表示消息报头已经结束,在此之前为消息报头
user=jeffrey&pwd=1234 //此行以下为提交的数据
HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过
GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资
源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
HTTP 响应
类似于HTTP请求,一个HTTP响应也包括三个组成部分:
方法—统一资源标识符(URI)—协议/版本
响应的头部
主体内容
响应头部的第一行类似于请求头部的第一行。第一行告诉你该协议使用 HTTP 1.1,请求成功(200=成功),表示一切都运行良好。
响应头部和请求头部类似,也包括很多有用的信息。响应的主体内容是响应本身的 HTML内容。头部和主体内容通过CRLF分隔开来。
Socket 类
套接字是网络连接的一个端点。套接字使得一个应用可以从网络中读取和写入数据。放在两个不同计算机上的两个应用可以通过连接发送和接受字节流。为了从你的应用发送一条信息到另一个应用,你需要知道另一个应用的 IP 地址和套接字端口。在 Java 里边,套接字指的是java.net.Socket类。
一旦你成功创建了一个 Socket 类的实例,你可以使用它来发送和接受字节流。要发送字节流,你首先必须调用Socket类的getOutputStream方法来获取一个java.io.OutputStream对象。要发送文本到一个远程应用,你经常要从返回的 OutputStream 对象中构造一个
java.io.PrintWriter 对象。要从连接的另一端接受字节流,你可以调用 Socket 类的
getInputStream方法用来返回一个java.io.InputStream对象。
ServerSocket 类
Socket 类代表一个客户端套接字,即任何时候你想连接到一个远程服务器应用的时候你构造的套接字,现在,假如你想实施一个服务器应用,例如一个 HTTP服务器或者 FTP 服务器,你需要一种不同的做法。这是因为你的服务器必须随时待命,因为它不知道一个客户端应用什么时候会尝试去连接它。为了让你的应用能随时待命,你需要使用java.net.ServerSocket类。这是服务器套接字的实现。
ServerSocket和Socket不同,服务器套接字的角色是等待来自客户端的连接请求。一旦服务器套接字获得一个连接请求,它创建一个Socket实例来与客户端进行通信。
要创建一个服务器套接字,你需要使用ServerSocket 类提供的四个构造方法中的一个。你需要指定 IP地址和服务器套接字将要进行监听的端口号。通常,IP 地址将会是 127.0.0.1,也就是说,服务器套接字将会监听本地机器。服务器套接字正在监听的 IP地址被称为是绑定地址。服务器套接字的另一个重要的属性是backlog,这是服务器套接字开始拒绝传入的请求之前,传入的连接请求的最大队列长度。
一个简单的应用程序思路
由3个类组成
HttpServer
Request
Response
这个应用程序的入口点(静态 main 方法)可以在 HttpServer 类里边找到。main 方法创建了一个 HttpServer 的实例并调用了它的 await 方法。await 方法,顾名思义就是在一个指定的端口上等待HTTP请求,处理它们并发送响应返回客户端。它一直等待直至接收到shutdown命令。
应用程序不能做什么,除了发送静态资源,例如放在一个特定目录的HTML文件和图像文件。它也在控制台上显示传入的 HTTP 请求的字节流。不过,它不给浏览器发送任何的头部例如日期或者cookies。
分享到:
相关推荐
how tomcat work 中文版 how tomcat work 中文版 how tomcat work 中文版
how tomcat work 中文版pdf 还有源码可以看啊(中文名为 深度剖析tomcat)
How Tomcat Work 第一章 实例应用 书上的例子的实现
How Tomcat Work 第二章(含第一章) 实例应用
通过本书可以学习了解web服务器(tomcat)的工作原理,之前提交的文档没有代码,这次的附上tomcat的章节源码。
How Tomcat Work中文版高清pdf文件,教你学习tomcat是如何实现的
NULL 博文链接:https://com0606.iteye.com/blog/1045568
How Tomcat Work 源代码,对于了解tomcat工作机制非常有帮助。
提供How tomcat works 电子书及源码很好,很详细。学习web的必备之选。
学习tomcat源码+英文《How Tomcat Work》和每一章的相关项目+tomcat6源码依赖jar+还有学习tomcat的一点笔记
<<How Tomcat work>>书籍里的应用代码,有很多的实用设计与原理
How Tomcat Work Source
tomcat工作原理深入详解——HowTomcatWorks中文版.pdf
英文版how tomcat to work,深入了解tomcat不错资料!
How Tomcat Works【英文PDF+中文HTML+源码】 How Tomcat Works 主要是讲解Tomcat如何运行的一些核心资料。
How Tomcat Works中文版
How Tomcat Works 中文版+源码+书里面对应tomcat源码(4.1.12 5.0.18)和编译后文件