[转载]基于Java的Web服务器工作原理(一)

基于Java的Web服务器工作原理(一)
编者注:这篇文章节选自 budi 自己出版的书<Tomcat 内幕>。你可以在他的网站得到更多的相关资料。

   一个 Web 服务器也被称为 HTTP 服务器,它通过 HTTP 协议与客户端通信。这个客户端通常指的是 Web 浏览器。一个基于 Java 的 Web 服务器用到二个重要的类,java.net.Socket 与 java.net.ServerSocket ,并通过 HTTP 消息通 信。因此,本文从讨论 HTTP 与这二个类开始,然后我将解释一个与本文相关的简单的 Web 应用。

The Hypertext Transfer Protocol(HTTP)

   HTTP 是一种让 Web 服务器与浏览器(客户端)通过 Internet 发送与接收数据的协议。它是一个请求、响应协议--客户端发出一个请 求,服务器响应这个请求。HTTP 运用可靠的 TCP 连接,通常用的 TCP 80 端口。它的第一个版本是 HTTP/0.9 ,然后被 HTTP/1.0 取代。当前的版本是 HTTP/1.1 ,由 RFC2616(.pdf) 定义。

  本节主要对应 HTTP 1.1 ,足够使你充分理解由 Web 服务器程序发出的消息。如果你对更加详细的知识有兴趣,可以参考 RFC2616 。

   在 HTTP 中,客户端总是通过建立一个连接与发送一个 HTTP 请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回叫 连接。客户端与服务器端都可以提前中断一个连接。例如,当用一个浏览器下载一个文件时,你可以通过点击“停止”键来中断文件的下载,关闭与服务器的 HTTP 连接。

HTTP 请求

  一个 HTTP 请求包含三个部分:
Method-URI-Protocol/Version 方法-地址-版本
Request header 请求头
Entity body 请求实体

  下面是一个 HTTP 请求实例:
POST /servlet/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
Referer: url.gifhttp://localhost/ch8/SendDetails.htm ;
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate

LastName=Franks&FirstName=Michael

  The Method-URI-Protocol/Version 在这个请求的第一行:
POST /servlet/default.jsp HTTP/1.1

   其中 POST 是请求的类型。每个客户端 HTTP 请求可以是 HTTP 规范中指定的许多请求类型中的一种。HTTP 1.1 支持七种类型的请 求,它们是 GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE。其中 GET 与 POST 是 Internet 应用 中经常用到的二种请求类型。

  URI 完整地指定了 Internet 资源。一个 URI 通常被解析为相对服务器的根目录。这样,它应该总是以一个 '/' 前缀开始。一个 URL 实际上是 URI 的一种类型。

  Version 指的是该 HTTP 请求所用到的 HTTP 协议版本。

  请求头包含了客户端环境与请求实体的一些有用的信息。例如它包含浏览器设定的语言、实体的长度等等。每条请求头用回车换行符(CRLF)分开。

  一个非常重要的空行分开了请求头与实体,它标志着实体内容的开始。一些 Internet 开发书籍认为这个 CRLF 空行是 HTTP 请求的第四个部分。

  在上面的 HTTP 请求中,实体只是简单以下的一行:
LastName=Franks&FirstName=Michael

  在一个典型的 HTTP 请求中,请求实体内容会长得多。

HTTP 响应

  与请求相似,HTTP 响应也由三部分组成:
Protocol-Status code-Description 协议状态 描述代码
Response headers 响应头
Entity body 响应实体

  以下是一个 HTTP 响应的实例:
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112



HTTP Response Example
Welcome to Brainy Software



  响应头的第一行类似请求头的第一行,告诉你所用的协议是 HTTP 1.1 ,请求成功(200=success),以及没有任何问题。

  响应头类似请求头也包含了一些有用的信息。响应的实体响应本身的 HTML 内容。头与实体之间由回车换行的空行(CRLF)分开。

Socket 类

   一个 socket 是一个网络连接的端点,它使得一个应用可以从网络读与写。在不同电脑上的二个应用软件能够通过收发字节流而彼此通信。要发一个信息 到另一个应用程序,你需要知道它的IP地址,以及它的 socket 端口号。在 Java 中,一个 socket 用 java.net.Socket 来实现。

  要创建一个 socket ,你可以用 Socket 类中几个构建方法中的一个。其中一个接受主机名与端口号作为参数:
new Socket("yahoo.com", 80);

   一旦你成功地创建了一个 Socket 类的实例,你就可以用它去发送与接收字节流了。要发送字节流,你需要呼叫 Socket 类的 getOutputStream 方法来得到一个 java.io.OutputSteam 对象。要发送文本到远程的程序,你通常需要从返回的 OutputStream 创建一个 java.io.PrintWriter 对象。要从连接的另一端接收字节流,你需要呼叫 Socket 类的 getInputStream 方法,它返回一个 java.io.InputStream 对象。

  以下代码创建一个可以与本地 HTTP 服务器通信的 socket (127.0.0.1 表示一个本地的主机),发送一个 HTTP 请求,并接收从服务器的响应。它还创建一个 StringBuffer 对象来接受响应,并打印到控制台。
Socket socket = new Socket("127.0.0.1", "8080");
OutputStream os = socket.getOutputStream();
boolean autoflush = true;
PrintWriter out = new PrintWriter( socket.getOutputStream(), autoflush );
BufferedReader in = new BufferedReader(
new InputStreamReader( socket.getInputStream() ));

// send an HTTP request to the web server
out.println("GET /index.jsp HTTP/1.1");
out.println("Host: localhost:8080");
out.println("Connection: Close");
out.println();

// read the response
boolean loop = true;
StringBuffer sb = new StringBuffer(8096);

while (loop) {
if ( in.ready() ) {
int i=0;
while (i!=-1) {
i = in.read();
sb.append((char) i);
}
loop = false;
}
Thread.currentThread().sleep(50);
}

// display the response to the out console
System.out.println(sb.toString());
socket.close();

  注意要从 web 服务器得到正确的响应,你必须要发送用 HTTP 协议编译了的 HTTP 请求。如果你看了上面的 HTTP 部分,你应该能够理解上面代码中的 HTTP 请求。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-132195/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-132195/

Java Web 服务器原理 NULL 博文链接:https://zx527291227.iteye.com/blog/1842847 立即下载

相关推荐

基于Javaweb服务器课程设计

基于Javaweb服务器课程设计,是大学的时候做的,另附带篇技术性文章,有详细的解释,适合大学生朋友做课程设计做参考用.

【源码解析】凭什么?spring boot jar 就能开发 web 项目

问题 为什么开发web项目,spring-boot-starter-web jar就搞定了?这个jar做了什么? 通过 spring-boot 工程可以看到所有开箱即用的的引导模块 spring-boot-starter-xxx 都在 spring-boot-starters 子模块中,且所有的 spring-boot-starter-xxx 模块中都没有代码,都是在其他包中就完成对应的功...

java梦工厂 244

基于JAVAWEB服务器与图形化浏览器

java实现模拟tomcat服务器,利用socket接手请求,resquest和respose处理请求发送响应,编写了Servlet接口,用户需要在web.xml配置全类名和URL,编写servlet实现类就可以使用,客户端浏览器,使用java的Swing组件,实现了打开本地网页,打开服务器网页与外部服务器网页(例如百度),上个网页与下页个网页的浏览以及查看源代码的功能,需要的朋友可以下载看看,如果使用上有需要帮助之处,可以发邮件(603803104@qq.com),给予解答。

Springboot快速构建jar包启动web项目

Springboot快速构建jar包启动web项目 前言: 传统的web项目打包方式为war包, 打成war包之后要放到tomcat的webapps目录下启动,造成不必要的麻烦.本文从war包jar包结构分析,怎么快速将war包修改为jar包启动.方便排查错误. 1. war包结构分析 1. war包解压 war包结构主要有两个目录.WEB-INF 和META-INF. WEB-INF使用we...

li819059787的博客 2435

java的运行原理

java的运行原理,虚拟机和关于上个文档的些补充

qq_61669959的博客 2786

java服务器 原理_web服务器原理

web服务器原理、参照博客,复制代码到idea中。在src包中建立Request.java文件,代码如图:import java.io.*;public class Request {/** 接收请求的信息,并返回资源(文件名)* */InputStream input;public Request(InputStream input){this.input=input;}public Stri...

weixin_42196667的博客 202

JSP

1. 什么是JSP JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与起建立的种动态网页技术标准。JSP技术有点类似ASP技术,它是在传 统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

lzy520o的博客 654

Web服务器工作原理

转载自:https://www.cnblogs.com/swifthua/p/7616478.html Web服务器工作原理 Web服务器工作原理概述   很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext,ServletRequest,ServletResponse和Session这些类)在其中扮演了什么角色?这些都..

lvxy_work的博客 420

java网页电路图_Java Web工作原理转载

知识要点:1、HTTP协议2、web服务器的缺陷及其解决方案3、对Servlet的认识4、Servlet的主要任务5、web容器对Servlet的支持包括的内容HTTP协议---(HyperText Transfer Protocol)超文本传输协议,是网络应用层的协议,建立在TCP/IP协议的基础之上,是种无状态的协议,遵循请求/响应模式。http请求:请求行、请求头、消息体以及分割请求头和消...

weixin_28338005的博客 469

HTTP协议和web工作原理

转载自:http://jwx0925.iteye.com/blog/676944 要把 知识点学好,那就需要把它相关的周边知识点了解全面  HTTP协议 是web学习的核心!!!  学东东切忌只学配置,不学原理:只学会框架有什么用,要会自己写框架!!  web学习直接

Kevin's blog 5620

Web服务器工作原理概述 。

转载自品略图书馆http://www.pinlue.com/article/2019/12/0215/479828480239.html Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext,ServletRequest,ServletResponse和Session这些类)在其中扮演了什么角色?这些都是.

yihuliunian的博客 193

java 网页应用 原理_【转载Web应用工作原理

问题描述:Web应用工作原理问题解决:前言什么是web应用程序?web应用程序又是如何进行工作的呢?什么是动态网页技术?又有哪些动态网页技术呢?这次这篇文章需要探求总结的。Web应用我们知道应用程序有两种模式,C/S模式和B/S模式。C/S模式是客户端/服务器模式,这类应用程序般独立的运行。B/S模式是浏览器/服务器模型,需要借助浏览器来运行。web应用程序般就是B/S模式的,所谓的web应用...

weixin_35348635的博客 286

基于javaweb浏览器

基于java开发的,主要就是用下url解析的类吧

Java Web学习(Web基础

本文借鉴:孤傲苍狼(特此感谢!) 、基本概念 web资源 Internet上供外界访问Web资源分为两种: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。 PS:动态web资源开发时使用Java进行数据渲染的技术统称为Java...

weixin_30270561的博客 148

Java Web工作原理转载

知识要点: 1、HTTP协议 2、web服务器的缺陷及其解决方案 3、对Servlet的认识 4、Servlet的主要任务 5、web容器对Servlet的支持包括的内容 HTTP协议---(HyperText Transfer Protocol) 超文本传输协议,是网络应用层的协议,建立在TCP/IP协议的基础之上,是种无状态的协议,遵循请求/响应模式。 http请求:请...

weixin_30488313的博客 109

简介web服务器工作原理

什么是web服务器,应用服务器web容器?   对于web服务器与应用服务器:“在过去它们是有区别的,但是这两个不同的分类慢慢地合并了,而如今在大多在情况下和使用中可以把它们看成个整体。”   但是当有人说到“web服务器”时,你通常要把它认为是以HTTP为核心、web UI为向导的应用。   当有人说到“应用服务器”时,你需要想到“高负载、企业级特性、事务和队列、多通道通信(HTT...

weixin_34185512的博客 162

Web服务器原理

——————————什么是Web服务器   Web服务器般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档。目前最主流的三个Web服务器是Apache Nginx IIS。 ——————————Web服务器原理   在Java方面,web容器般是指Servlet容器。Servlet容器是与Java Servlet交互的web容器的组件。...

weixin_30647065的博客 124
上一篇: [转载]GetObject 函数
下一篇: [转载]DB2 UDB for Linux, UNIX 和 Windows 中的 Java 开发概述: V8.1 更新版
congji3817
博客等级 码龄10年 15粉丝 588原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值