深入剖析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类实现
相关文章推荐
- java-模拟tomcat服务器
- i-jetty环境搭配与编译
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- 在kubernetes上实现tomcat日志的持久化
- Linux部署Tomcat服务器
- jenkins------结合maven将svn项目自动部署到tomcat下
- 如何搞定tomcat这只喵~
- 100 个最佳 Ubuntu 应用(中)
- 在 AppImage、Flathub 和 Snapcraft 平台上搜索 Linux 应用
- eclipse内安装配置tomcat
- 24 个必备的 Linux 应用程序
- 注册表趣味应用小集
- 远程控制技术的应用
- 路由器访问列表的应用
- xDSL技术及其应用