59519751 发表于 2017-1-21 10:10:41

tomcat 架构、源码学习(一)

  阅读: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。
页: [1]
查看完整版本: tomcat 架构、源码学习(一)