|
阅读:how tomcat works笔记
1. 一个简单的server服务器。
通过socket实现。
ServerSocket server = new ServerSocket(int , int , InetAddress );
Socket socket = server.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
...
2.解析http请求,获得uri。从中得到ServletName。
3.通过ClassLoader查找并导入相应的Servlet。并实例化
java classloader原理初探
4.包装Request,Response为RequestFacade,ResponseFacade,并在调用相应Servlet的service方法时传入这2个对象。
Facade模式。
5.tomcat中对错误信息处理的国际化处理。每一个包下对应一个StringManager对象,读取该包下的LocalStirngs.properties文件。
StringManager:单例,内部以HashTable为数据结构,key为包名。
.getManager(packegeName);
6.Tomcat组件:(粗)
连接器/容器(web容器、应用服务器)
3个模块:Connector、Startup、Core
Startup:bootstrap,用来启动应用
Connector:分为五组。
连接器和它的支撑类<处理类>(HttpConnector和HttpProcessor)。
HttpRequest及其辅助类。
HttpResponse及其辅助类。
Facade包装类(RequestFacade,ResponseFacade)。
Constant类。
Core:分为2组。
ServletProcessor(处理Servlet动态数据请求)。
StaticResourceProcessor(处理服务器静态资源)。
猜想:正因为有了这两个分支,才使得tomcat可以通过配置集成到其他web服务器中,使用其静态资源处理能力。而tomcat专注于动态应用的处理。
7.解析Http请求。(难点)<也是性能调节之处>
从获得的socket中解析出requestLine、headers、cookies、parameters;
几个步骤:1.获取socket的输入流。
2.解析请求行(method uri protocol)。
3.解析头部(name:value)<cookie:name=value;name=value;>。
4.解析cookie,jsessionid。
5.获取参数,查询字符串中即(?userName=tarzan&password=pwd),以及请求内容中。
8.tomcat连接器:(可插拔的)有coyote,mod_jk, mod_jk2, mod_webapp.
满足条件:1.实现org.apache.catalina.Connector接口。
2.必须创建请求对象,该对象要实现org.apache.catalina.Request接口。
3.必须创建响应对象,该对象要实现org.apache.catalina.Response接口。
问题1.字节数值代替字符串有什么好处?
2.对象池,连接池。
HTTP 1.1新特性
1.持久连接。请求头部中connection:keep-alive;
2.块编码。<4\r\n abcd 0\r\n(结束)>
3.状态100(持续状态)的使用。<轮询请求发送>
9.connector,container,processor。 |
|
|