TOMCAT学习笔记

来源:互联网 发布:杭州专业seo公司 编辑:程序博客网 时间:2024/05/19 03:30

TOMCAT学习笔记

(2011-10-03 17:03:26)
转载
标签:

杂谈

分类: 编程

2011年10月3日

 

1.TOMCAT总体来说由两部分组成:connector和container。

connector主要功能是:为每个接收到的HTTP请求(处理请求类:解析请求)建立request对象和response对象。然后,将处理过程交给container模块。container模块从connector模块中接收到request对象和response对象,并负责调用相应的servlet的服务方法。

container主要功能是:container模块从connector模块中接收到request对象和response对象,并负责调用相应的静态资源或者相应的servlet的服务方法。当然,上面只是对这个处理过程的简化描述。在处理过程中,container还要做很多其他的事。例如,在调用servlet的服务方法前,它必须载入该servlet,对用户身份进行认证(需要的话),更新该用户的session对象等。

 

2.简单的服务器:

一个简单的服务器最基本的功能就是接受用户的http请求和发回http响应。

一个HTTP请求包含以下三部分:

Method—Uniform Resource Identifier (URI)—Protocol/Version 

Request headers 

Entity body

举例如下(注意三部分之间要有空行):

 

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

一个HTTP Response也由三部分组成:

Protocol—Status code—Description

Response headers

Entity body

举例如下:

 

HTTP/1.1 200 OK 

Server: Microsoft-IIS/4.0 

Date: Mon, Jan 2004 13:13:33 GMT 

Content-Type: text/html 

Last-Modified: Mon, Jan 2004 13:13:12 GMT 

Content-Length: 112 

 

<html> 

<head> 

<title>HTTP Response Example</title> 

</head> 

<body> 

Welcome to Brainy Software 

</body> 

</html>

 

注意响应实体(entity)与响应头(header)之间有一个空白行(CRLF)。

程序可如下编三个类写

A.httpServer类

B.request类

C.response类

其中httpServer类带main方法,模拟了一个简单的服务器。在httpServer类里会等待客户端的连接请求(调用accept()方法)接到请求后将http请求掉用socket的方法,从socket里读出有用信息如uri等。然后将这些信息填充到request里,response类使用request的信息调用sendStaticResource()方法返回给客户端http应答。

 

3.较复杂的服务器

tomcat由两大模块组成:连接器(connector)和容器(container

应用程序可分为3个模块:connectorstartupcore

startup模块仅包括一个StartUp类,负责启动应用程序。

connector模块的类可分为以下5个部分:

连接器及其支持类(HttpConnectorHttpProcessor);

表示http请求的类(HttpRequest)及其支持类;

表示http响应的类(HttpResponse)及其支持类;

外观装饰类(HttpRequestFacadeHttpResponseFacade);

常量类。

core模块包括ServletProcessor类和StaticResourceProcessor类。