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。
分享到:
相关推荐
Tomcat作为轻量级应用服务器,主要用于部署和运行Java Web应用程序。它实现了Java EE中的Servlet和JSP规范,使得开发者可以使用Java编写动态网站。Tomcat的核心组件包括Catalina(Servlet容器)、Jasper(JSP引擎)...
3. **路径匹配**:根据请求的URI,Tomcat查找对应的Web应用程序,并在WEB-INF/web.xml配置文件中匹配Servlet的映射规则。 4. **创建Servlet实例**:如果请求的Servlet尚未初始化,Tomcat会根据Servlet配置创建一个...
Tomcat是一款开源的Java Servlet容器,广泛用于部署Web应用程序。以下将详细介绍Tomcat的工作流程及其核心概念。 1. **Tomcat架构**: Tomcat的核心组件包括Catalina(核心引擎)、 Coyote(HTTP/1.1协议处理器)...
《Tomcat工作原理详解——(5)容器》 在深入探讨Tomcat的工作原理时,我们不得不提到一个核心概念——容器。...通过深入学习和实践,我们可以更好地利用Tomcat提供的强大功能,提升Web应用的性能和稳定性。
《How Tomcat Work 第二章 实例应用》深入解析 在深入探讨Tomcat工作原理之前,我们先要了解什么是Tomcat。Apache Tomcat是一款开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP) 规范,是...
《How Tomcat Work》第一章主要围绕Tomcat服务器的实例应用展开,旨在帮助读者理解并实践Tomcat在实际开发中的工作原理。Tomcat是一款开源的、轻量级的应用服务器,主要用于运行Java Servlet和JavaServer Pages(JSP...
这本书详细阐述了Tomcat如何处理HTTP请求,如何加载和执行Java Servlet以及JSP,以及它在部署Web应用程序时的内部运作方式。 Tomcat是一款开源的Servlet容器,它是Java EE应用服务器的一种实现,主要用于处理Java ...
Tomcat,作为Apache软件基金会的开源项目,是Java Servlet和JavaServer Pages(JSP)技术的主要应用服务器,被广泛应用于Web应用程序的部署与运行。《How Tomcat Works》这本书及其源代码,为开发者提供了深入理解...
《How Tomcat Works》是一本专门讲解Tomcat内部工作机制的书籍,对广大Java开发者,尤其是对Tomcat源码和servlet容器工作原理感兴趣的开发者来说,这本书能够帮助他们深入了解Tomcat的架构以及如何进行自定义和优化...
Tomcat作为一个开源的Java Servlet容器,是许多Web应用程序的基础。通过研究这本书中的源码,我们可以了解到Tomcat如何处理HTTP请求、管理Servlet、加载Web应用以及优化性能等多个关键知识点。 1. **HTTP请求处理...
在学习过程中,结合实际项目进行实践,例如创建一个简单的Servlet或JSP应用,观察其在Tomcat中的运行过程,这样能更直观地理解源码的工作原理。同时,笔记是非常重要的,它能帮你整理思路,记录学习过程中的疑问和...
《译How Tomcat Works(第二章)》这篇文章主要讲解了Apache Tomcat服务器的工作原理,它是一个开源的Java Servlet容器,广泛用于部署Web应用程序。在这一章中,我们将深入探讨Tomcat如何处理HTTP请求,以及其内部架构...
tomcat工作原理深入详解——HowTomcatWorks中文版.pdf
本书名为“How Tomcat Works”,它深入剖析了Tomcat 4.1.12和5.0.18这两个版本,解释了这个开源、免费且广受欢迎的servlet容器——代号为Catalina的内部工作原理。Tomcat是一个复杂的系统,它由许多不同的组件构成。...
Tomcat是Apache软件基金会的一个开源项目,它是Java Servlet和JavaServer Pages(JSP)技术的开源实现,用于部署和运行Java Web应用程序。以下是Tomcat服务器基础的一些关键知识点: 1. **Tomcat架构**:Tomcat基于...
Tomcat是一个开源的Java应用服务器,主要用于部署和运行基于Servlet和JavaServer Pages (JSP)技术的应用程序。它支持Java Servlet技术规范2.3、2.4和JavaServer Pages技术规范1.2、2.0,这对于使用Java技术的程序员...
2. **启动与配置**:Tomcat的配置文件主要包括`server.xml`、`context.xml`、`web.xml`等,这些文件定义了服务器的全局和特定应用程序的设置。`server.xml`是顶级配置,定义了服务、连接器和引擎。 3. **部署与生命...
1. **Catalina**:这是Tomcat的核心,负责Servlet容器的主要功能,如加载和管理Web应用程序、处理请求和响应等。 2. **Jasper**:JSP编译器,负责将JSP页面转化为Java源代码并编译为Servlet。 3. ** Coyote**:负责...