文档章节

Note of How Tomcat Works (1)

ayesd
 ayesd
发布于 2013/02/01 23:16
字数 1434
阅读 83
收藏 3

1、Servlet容器是如何工作的
一个servlet容器要为一个servlet的请求提供服务,基本上有三件事要做:
    (a)创建一个request对象并填充那些有可能被所引用的servlet使用的信息,如参数、头部、cookies、查询字符串、URI等等。一个request对象是javax.servlet.ServletRequest或javax.servlet.http.ServletRequest接口的一个实例。
    (b)创建一个response对象,所引用的servlet使用它来给客户端发送响应。一个response对象javax.servlet.ServletResponse或javax.servlet.http.ServletResponse接口的一个实例。
    (c)调用servlet的service方法,并传入request和response对象。在这里servlet会从request对象取值,给response写值。

2、Catalina架构图
Catalina看成是由两个主要模块所组成的:连接器(connector)和容器(container)。连接器是用来“连接”容器里边的请求的。它的工作是为接收到每一个HTTP请求构造一个request和response对象。然后它把流程传递给容器。容器从连接器接收到requset和response对象之后调用servlet的service方法用于响应。谨记,这个描述仅仅是冰山一角而已。这里容器做了相当多事情。例如,在它调用servlet的service方法之前,它必须加载这个servlet,验证用户(假如需要的话),更新用户会话等等。一个容器为了处理这个进程使用了很多不同的模块,这也并不奇怪。例如,管理模块是用来处理用户会话,而加载器是用来加载servlet类等等。

3、构建一个简单的Web服务器
(a)超文本传输协议(HTTP)
在HTTP中,始终都是客户端通过建立连接和发送一个HTTP请求从而开启一个事务。web服务器不需要联系客户端或者对客户端做一个回调连接。无论是客户端或者服务器都可以提前终止连接。举例来说,当你正在使用一个web浏览器的时候,可以通过点击浏览器上的停止按钮来停止一个文件的下载进程,从而有效的关闭与web服务器的HTTP连接。
(b)HTTP请求
 一个HTTP请求包括三个组成部分:
方法—统一资源标识符(URI)—协议/版本
请求的头部
主体内容
    下面是一个HTTP请求的例子:
POST /examples/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
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
    方法—统一资源标识符(URI)—协议/版本出现在请求的第一行。 
POST /examples/default.jsp HTTP/1.1
    这里POST是请求方法,/examples/default.jsp是URI,而HTTP/1.1是协议/版本部分。
    每个HTTP请求可以使用HTTP标准里边提到的多种方法之一。HTTP 1.1支持7种类型的请求:GET, POST,
HEAD, OPTIONS, PUT, DELETE和TRACE。GET和POST在互联网应用里边最普遍使用的。
    URI完全指明了一个互联网资源。URI通常是相对服务器的根目录解释的。因此,始终一斜线/开头。统一资源定位器(URL)其实是一种URI(查看http://www.ietf.org/rfc/rfc2396.txt)来的。该协议版本代表了正在使用的HTTP协议的版本。
    请求的头部包含了关于客户端环境和请求的主体内容的有用信息。例如它可能包括浏览器设置的语言,主体内容的长度等等。每个头部通过一个回车换行符(CRLF)来分隔的。
    对于HTTP请求格式来说,头部和主体内容之间有一个回车换行符(CRLF)是相当重要的。CRLF告诉HTTP服务器主体内容是在什么地方开始的。在一些互联网编程书籍中,CRLF还被认为是HTTP请求的第四部分。
    在前面一个HTTP请求中,主体内容只不过是下面一行:
lastName=Franks&firstName=Michael
    实体内容在一个典型的HTTP请求中可以很容易的变得更长。
(c)HTTP响应
类似于HTTP请求,一个HTTP响应也包括三个组成部分:
方法—统一资源标识符(URI)—协议/版本
响应的头部
主体内容
    下面是一个HTTP响应的例子:
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 5 Jan 2004 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 5 Jan 2004 13:13:12 GMT
Content-Length: 112

<html>
<head>
<title>HTTP Response Example</title>
</head>
<body>
Welcome to Brainy Software
</body>
</html>
    响应头部的第一行类似于请求头部的第一行。第一行告诉你该协议使用HTTP 1.1,请求成功(200=成功),表示一切都运行良好。
    响应头部和请求头部类似,也包括很多有用的信息。响应的主体内容是响应本身的HTML内容。头部和主体内容通过CRLF分隔开来。
(d)Socket类
(e)ServerSocket类

应用程序

我们的web服务器应用程序由三个类组成:
  • HttpServer
  • Request
  • Response
    这个应用程序的入口点(静态main方法)可以在HttpServer类里边找到。main方法创建了一个HttpServer的实例并调用了它的await方法。await方法,顾名思义就是在一个指定的端口上等待HTTP请求,处理它们并发送响应返回客户端。它一直等待直至接收到shutdown命令。
    应用程序不能做什么,除了发送静态资源,例如放在一个特定目录的HTML文件和图像文件。它也在控制台上显示传入的HTTP请求的字节流。不过,它不给浏览器发送任何的头部例如日期或者cookies。


© 著作权归作者所有

上一篇: Jacob如何使用
下一篇: 辅助技术
ayesd
粉丝 7
博文 19
码字总数 30025
作品 0
深圳
高级程序员
私信 提问
Change JRE for Tomcat的四种方法

Basically, an installation of Tomcat is running under the default JRE which can be found based on environment variables (JAVA_HOME), or registry entries (on Windows) or the JRE ......

五大三粗
2015/12/15
76
0
Tomcat中部署Web应用的4种方式

在Tomcat中部署Web应用主要有4种方式: 1 利用Tomcat自动部署 利用Tomcat自动部署最简单,只需要将Web应用文件夹复制到Tomcat的webapps目录下即可,例如Web应用文件夹是Note1,该文件夹下有一...

smartstone_2015
2016/09/01
358
0
在单位的TOMCAT负载均衡的配置,一直在运行很稳定

tomcat负载均衡一例 # lb-en # ------------------------ server1 worker.tomcat-en1.port=8409 worker.tomcat-en1.host=172.16.41.30 worker.tomcat-en1.type=ajp13 # Specify the size of ......

余二五
2017/11/22
0
0
apt-get安装tomcat并测试nginx负载均衡

1、tomcat安装 参考我的另一篇文章 ubuntu安装tomcat7 2、多个tomcat的配置 编辑/etc/tomcat7/service.xml,配置字段Service name 、Connect port、defaulthost、Host name、appBase、prefi...

断臂人
2018/04/24
0
0
Cloudstack常用端口(Ports used by CloudStack)

证券,金融或者对网络环境要求较严格,开放网络中端口访问都需要安全审计的公司太扯淡。不过从安全考虑,还是很有必要的。 复杂网络中部署CS中需要调试网络连通性以便保证通信正常。 下面是官...

tangwenjun
2014/03/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android: Camera1 open、preview、take picture流程分析

一、Camera 架构 NOTE:这是 Android Camera API 1 ,Camera 的架构与 Android 整体架构是保持一致的:Framework : Camera.javaAndroid Runtime : android_hardware_Camera.cppLibrar...

天王盖地虎626
23分钟前
4
0
Spring Boot Actuator监控使用详解

在企业级应用中,学习了如何进行SpringBoot应用的功能开发,以及如何写单元测试、集成测试等还是不够的。在实际的软件开发中还需要:应用程序的监控和管理。SpringBoot的Actuator模块实现了应...

程序新视界
50分钟前
6
0
JDBC+C3P0+DBCP 基本使用

1.概述 这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置. 2.mysql的处理 这里的JDBC使用Mysql作为...

Blueeeeeee
今天
8
0
MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
11
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部