连接器的核心功能,本文去除非核心功能,留下整个程序的框架,便于理解。

1、接受连接请求

2.创建request,和response.

3.调用容器对应的Invoke方法,

首先看类的依赖结构。

1.Connetor 构造方法,根据具体的协议名字,创建协议处理器,主要有NIO,BIO,AJP,协议。如果要自定义协议处理剂最重要的协议处理器了。如图,协议处理需要实现ProtocoHandler接口,

构造函数 输入为协议名称

  1. public Connector(String protocol) {
  2. setProtocol(protocol);
  3. // Instantiate protocol handler
  4. ProtocolHandler p = null;
  5. try {
  6. Class<?> clazz = Class.forName(protocolHandlerClassName);
    // 实例化一个协议处理器
  7. p = (ProtocolHandler) clazz.newInstance();
  8. } catch (Exception e) {
  9. log.error(sm.getString(
  10. "coyoteConnector.protocolHandlerInstantiationFailed"), e);
  11. } finally {
  12. this.protocolHandler = p;
  13. }
  14.  
  15. if (!Globals.STRICT_SERVLET_COMPLIANCE) {
  16. URIEncoding = "UTF-8";
  17. URIEncodingLower = URIEncoding.toLowerCase(Locale.ENGLISH);
  18. }
  19. }

2.createRequest 和相应  此处不仔细深入。很简单。就是创建请求和相应对象

  1. public Request createRequest() {
  2.  
  3. Request request = new Request();
  4. request.setConnector(this);
  5. return (request);
  6.  
  7. }
  8.  
  9. /**
  10. * Create (or allocate) and return a Response object suitable for
  11. * receiving the contents of a Response from the responsible Container.
  12. */
  13. public Response createResponse() {
  14.  
  15. Response response = new Response();
  16. response.setConnector(this);
  17. return (response);
  18.  
  19. }

3.启动和关闭。是默认方法;

  1. protected void startInternal() throws LifecycleException {
  2.  
  3. // Validate settings before starting
  4. if (getPort() < 0) {
  5. throw new LifecycleException(sm.getString(
  6. "coyoteConnector.invalidPort", Integer.valueOf(getPort())));
  7. }
  8.  
  9. setState(LifecycleState.STARTING);
  10.  
  11. try {
  12. protocolHandler.start();
  13. } catch (Exception e) {
  14. String errPrefix = "";
  15. if(this.service != null) {
  16. errPrefix += "service.getName(): \"" + this.service.getName() + "\"; ";
  17. }
  18.  
  19. throw new LifecycleException
  20. (errPrefix + " " + sm.getString
  21. ("coyoteConnector.protocolHandlerStartFailed"), e);
  22. }
  23. }

protected void stopInternal() throws LifecycleException {

  1.  

setState(LifecycleState.STOPPING);

  1.  

try {
protocolHandler.stop();
} catch (Exception e) {
throw new LifecycleException
(sm.getString
("coyoteConnector.protocolHandlerStopFailed"), e);
}
}

  1.  

我们从代码看到ProtocoHandler的重要性了明天再看

 

tomcat Connector 连接器的更多相关文章

  1. 修改Tomcat Connector运行模式,优化Tomcat运行性能

    Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一.不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运 ...

  2. Tomcat剖析(四):Tomcat默认连接器(2)

    Tomcat剖析(四):Tomcat默认连接器(2) 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三): ...

  3. Tomcat剖析(四):Tomcat默认连接器(1)

    Tomcat剖析(四):Tomcat默认连接器(1) 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三): ...

  4. 修改 Tomcat Connector运行模式 优化Tomcat运行性能

    omcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一.不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行 ...

  5. Tomcat Connector

    转自: http://blog.csdn.net/aesop_wubo/article/details/7617416 如下图所示,Tomcat服务器主要有两大核心模块组成:连接器和容器,本节只分析连 ...

  6. Tomcat: Connector中HTTP与AJP差别与整合

    apache tomcat 整合(ajp proxy, http proxy) 1.软件: apache: httpd-2.2.17-win32-x86-openssl-0.9.8o.msi tomc ...

  7. JBossWeb/Tomcat 初始化连接器和处理 Http 请求过程

    概述 JBossWeb 是JBoss 中的 Web 容器.他是对 Tomcat 的封装,本文以 Http 连接器为例.简单说明 JBossWeb/Tomcat 初始化连接器和处理 Http 请求过程 ...

  8. 【Tomcat】Tomcat Connector的三种运行模式【bio、nio、apr】

    Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O ...

  9. Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化

    Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下: BIO: 一个线程处理一个请求.缺点:并发量高时,线程数较多,浪费资源. Tomc ...

随机推荐

  1. SSL与TLS的区别以及介绍

    转载 :http://kb.cnblogs.com/page/197396/ SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议 ...

  2. arguments.callee查询调用b函数的是哪个函数

    // function functionname(){ // function b(){ // console.log(arguments.callee.caller.name); // } // b ...

  3. [转载]汇编eax寄存器和AX,AH,AL之间的关系

    00000000 00000000 00000000 00000000|===============EAX===============|---32个0,4个字节,2个字,1个双字          ...

  4. ASP + ACCESS 上传图片到数据库与将图片读出数据库显示之实现

    1.uppic.asp:上传图片程序 <% dim rs dim formsize,formdata,bncrlf,divider,datastart,dataend,mydata formsi ...

  5. UnitOfWork机制的实现和注意事项

    UnitOfWork机制 /*一点牢骚: * UnitOfWork机制的蛋疼之处: *    UnitOfWork机制,决定了插入新的实体前,要预先设置数据库中的主键Id,尽管数据库自己生产主键. * ...

  6. Firefly安装说明 与 常见问题

    原地址:http://bbs.gameres.com/thread_223688.html 第三方库依赖:    twisted, python-memcached ftp://ftp.tummy.c ...

  7. PHP 怎么随机获取数组里面的值

    注意array_rand随机返回的是KEY值的集合 <?php srand((float) microtime() * 10000000); $input = array("Neo&q ...

  8. 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过

    杭电ACM(1002)大数相加 A + B Problem II Problem DescriptionI have a very simple problem for you. Given two ...

  9. iOS 10 使用相机及相簿闪退的问题修正

    http://www.cnblogs.com/onechen/p/5935579.html

  10. windows8.1下安装.NET Framework 3.5

    今天安装Arcgis10.2提示需要安装.NET Framework 3.5.校园网的网速,你懂的.所以,在线安装不太现实. 在线安装方法: 如何在 Windows 8 上安装 .NET Framew ...