Tomcat介绍

Tomcat介绍

简单的介绍下tomcat平时会用到的几个知识点。也是自己看别人博客做的一个总结

配置文件

最常用的配置文件有server.xml和web.xml。前者主要是server的配置,后者主要是servlet,和映射的。主要介绍的server.xml。

首先介绍下他常用的几个节点:

    server:代表着一个服务器,类似于一个JVM的存在,他可以包含多个service节点。主要的属性有port,shutdown。主要的作用就是让运维可以通过telnet到你所配置的这个端口进行关闭容器。
    service:主要的作用就是把引擎和链接给关联起来(即放到一个service下面)
    Connector:链接。这个节点是为了适应tomcat不同的工作模式(有2中,一个是当做应用服务器 请求来自web服务器,服务器可能是Apache,Nginx。一个是独立服务器 请求来自web浏览器),配置多种连接器来完美的响应不同的工作模式。常见的连接器有4种。分别是HTTP,SSL,AJP,PROXY四种,通过配置Connector的protocol属性来确定使用哪种。
            Connector常用可配置的属性:
                                 address :指定改连接器监听的地址。
                                 maxThreads : 支持的最大并发数.
                                 prot : 改连接器监听的端口
                                 protocol :     该链接器的协议,默认HTTP/1.1  .AJP需指定为AJP/1.3  
                                 connectionTimeout:  链接的超时时间,单位毫秒 ,默认一分钟
                                 acceptCount :    队列的长度,当tomcat容器所有的线程均被使用时,可以吧请求放到该队列里。
                                 redirectPort :  重定向端口,如果一个请求是HTTPS协议,但是被HTTP连接器所监听到。可以通过这个配置重定向到某个端口
                                 enableLookups : 是否获取到客户端的主机名 

    Engine:引擎。其实就是一个servlet处理器的实例,默认是Catalina。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的host组件。比如说localhost。或者另外具体的ip。
    host:接受请求的虚拟主机,主要的配置就是appbase :指定webapps路劲。autoDeploy: 放置在appbase目录下的应用程序是否自动发布。unpachWars :是否对webapps的war格式的归档文件进行展开。
    context: 指定一个应用。通过dobase属性指出应用在tomcat的绝对路径。path属性来匹配请求连接。

tomcat启动的过程

首先是引导启动。开始调用org.apache.catalina.startop.BootStrap.class的main方法。

然后调用org.apache.catalina.startop.BootStrap.class的init方法。改方法主要是创建cataline的核心对象。首先根据calatine.properties配置文件来确定classloader。再通过这个loader来获取到org.apache.catalina.startup.Catalina这个类。以达到创建calatine的核心对象。并执行该类的设置loader方法。

然后是调用org.apache.catalina.startop.BootStrap.class的通过反射调用calatine的load方法。实际上是通过反射调用了catalina的load方法。 加载server.xml配置文件,然后给各个容器加上关系。

最后是调用org.apache.catalina.startop.BootStrap.class的通过反射调用calatine的start方法

tomcat的一个连接的请求过程。

一个连接(localhost(Engine配置):8080(connector配置)/wechat(context配置)/test/index.jsp(servlet映射))从web端发送过来被tomcat的连接器锁连接,然后分配给改service下的engine,等待engine的响应。engine获得该请求,并和host进行匹配。这个连接会匹配到localhost的host。如果没有匹配到会进入到默认的host。host获得we chat/test/index.jsp.。然后用这个区匹配context里配置的path进行匹配,如果没有匹配到就匹配默认的context(即path为“”的context)。在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。然后构造request和response。最后通过处理之后吧response按照这个相反的顺序返回给浏览器。

connector是如何接受请求的呐?

首先connector可以分为3个模块,分别是EndPoint,process,Adatepr。EndPonit主要就是实现了TCP/IP协议,处理底层的socket的连接。然后把socket发送给process。process实现了HTTP协议,可以吧socket包装成HttpServletRequest交给Adatepr处理。Adatepr通过适配给对应的servlet进行处理。在Container下面各个容器采用的是责任制模式(类似与流水线的工作一样)来处理,每个容器都有自己的通道,每个通道的最后都有个一个basevalue。这个basevalue会指向下一个容器,直到是Wrapper容器会创建一个FilterChina。这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet,其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,这样请求就得到了处理。
Container下面的四个容器
Engine:引擎 。管理多个站点,一个service最多只有一个Engine;
Host:站点。也可以叫虚拟主机,通过配置Host就可以添加站点;
Context:代表一个引用程序,像biz-ins-oss。
Wrapper:指定一个Servlet。

**

tomcat的优化

**

首先是运行模式,有三种

 1.bio 最基础的io方式,效率低下
 2.nio java1.4之后出现的新io,有缓存并是非阻塞的io方式,所以效率会比bio高的多  
 3.apr

默认的应该都是bio模式 ,启动nio的方式是吧connector节点的protocol改成org.apache.coyote.http11.Http11NioProtocol;

其次是打开线程池的功能,并在connector指定使用哪个线程池,属性是executor,打卡线程池功能就是在sever.xml里的service节点下 新增Executor节点,常见的属性有name(类似于id,确保唯一性),namePrefix(线程名称前缀),maxThreads(最大的线程数),minSpareThreads(最小的空闲线程数),maxIdleTime(空闲的线程最多的空闲时间,超过这个时间就会被销毁)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值