您的位置:首页 > 运维架构 > Tomcat

深入剖析Tomcat(三)

2016-09-11 18:52 330 查看

连接器

*本章将会建立一个连接器

增强第二章的application

用一种更好的方法创建request和response对象*

兼容servlet2.3和2.4规范的连接器必须要负责创建javax.servlet.http.HttpServetRequest和javax.servlet.http.HttpServletResponse实例,并传入service方法 //??不大明白在说什么

连接器并不知道第2章的servlet的对象的类型

本章application中,连接器解析http头,使servlet能获取到头cookie等信息

StringManager类

Tomcat 把错误消息保存到properties文件中

并且划分到不同的包中

每个properties都是用org.apache.catalina.StringManager类的一个实例处理的

获取错误信息

public String getString(String key);


应用程序

代码量大,要把握全局

不需要逐个看下去,有点知道构造方法和用法就行

启动模块

只用一个类 Bootstrap类 负责启动application

连接模块

可分为五个类型

- 连接器及其支持类 HttpConnector和HttpProcesser

- Http请求类(HttpRequest)及其支持类

- Http响应类(HttpResponse)及其支持类

- 外观类(HttpRequestFacade和HttpResponseFacade类)

- 常量类

核心模块

servletProcessor类

- StaticResourceProcessor类

整体把握

启动 Bootstrap类main方法中 实例化HttpConnector 并调用start方法开启线程

创建serverSocket类 等待HTTP请求

创建HttpProcessor实例 并且调用process方法

process方法中 创建HttpRequest和HttpResponse 解析请求

静态请求

servlet请求调用service方法

解析http请求

- 读取套接字的输入流

input = new SocketInputStream(socket.getInputStream(), 2048);
之所以使用SocketInputStream类就是为了调用其readRequestLine()方法和readHeader方法


解析请求行

private void parseRequest(SocketInputStream input, OutputStream output)


解析请求头

新类HttpHeader

无参构造

传参给SocketInputStream的readHeader方法

获取请求头的名字和值

String name = new String(header.name, 0, header.nameEnd);
String value = new String(value.name, 0, value.nameEnd);


解析Cookie

请求头是Cookie: username password

org.apache.catalina.util.RequestUtil类实现

获取参数

org.apache.Catalina.util.ParameterMap类实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat servlet 应用