tomcat

忘了从哪里copy的。。。

tomcat架构

tomcat目录

(1)bin:主要用来存放命令,.bat是windows下,.sh是Linux下

(2)conf:主要用来存放tomcat的一些配置文件

(3)lib:存放tomcat依赖的一些jar包

(4)logs:存放tomcat在运行时产生的日志文件

(5)temp:存放运行时产生的临时文件

(6)webapps:存放应用程序

(7)work:存放tomcat运行时编译后的文件,比如JSP编译后的文件

tomcat架构

tomcat_

Server元素在最顶层,代表整个Tomcat容器,因此它是server.xml中唯一一个最外层的元素。Server的作用是提供接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。

一个Server元素中可以包含多个Service。

Service的作用是组装Connector和Engine对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine。

Connector的作用是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程携带该request和response交给绑定的Engine来处理,最后把处理后的Request和Response返回给客户端。

executor是线程池,tomcat提供了默认线程池,线程池配置可以在源码中查找Executor:

public interface Executor extends java.util.concurrent.Executor, Lifecycle {...}

然后找到其实现类:

public class StandardThreadExecutor extends LifecycleMBeanBase implements Executor, ResizableExecutor {
    ...
    protected String namePrefix = "tomcat-exec-";
    protected int maxThreads = 200;
    protected int minSpareThreads = 25;
    protected int maxIdleTime = 60000;
    protected int maxQueueSize = Integer.MAX_VALUE;
    ...
}

在实际中我们可以根据实际项目情况添加自己的线程池。

Engine是Service组件中的请求处理组件。engine从Connector中接收请求并处理,并将处理后的response返回Connector。
engine可以包含多个host。

一个Host代表Engine中的一个虚拟主机。Host的作用是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。
客户端通过主机名来访问服务器。Tomcat从HTTP头中提取出主机名,寻找名称匹配的host。如果没有匹配,请求将发送至默认主机。

一个host可以包含多个context。

context元素代表在指定host上运行的一个web应用。这个web应用对应一个war文件,或者war文件解压后对应的目录。

刚下载的tomcat,server.xml文件中没有context元素,因为默认tomcat的host开启了自动部署。

tomcat优化

tomcat优化可以有几个方向,配置项的删除,配置参数的修改,jdk参数修改。

配置项的删除

tomcat涉及的配置文件有三种,web项目中自带的WEB-INF/web.xml,tomcat自带的conf/web.xml以及conf/server.xml文件。

tomcat在启动时,会将web项目中WEB-INF/web.xml和自己的conf/web.xml进行合并,然后在ContextConfig类下的configureContext()统一解析这些内容:

private void configureContext(WebXml webxml) {
    ...
    for (Entry<String, String> entry : webxml.getContextParams().entrySet()) {
        context.addParameter(entry.getKey(), entry.getValue());
    }
    for (ContextEjb ejbRef : webxml.getEjbRefs().values()) {
        context.getNamingResources().addEjb(ejbRef);
    }
    for (ContextEnvironment environment : webxml.getEnvEntries().values()) {
        context.getNamingResources().addEnvironment(environment);
    }
    for (ErrorPage errorPage : webxml.getErrorPages().values()) {
        context.addErrorPage(errorPage); // 解析错误页面
    }
    for (FilterDef filter : webxml.getFilters().values()) { // 解析过滤器标签
        if (filter.getAsyncSupported() == null) {
            filter.setAsyncSupported("false");
        }
        context.addFilterDef(filter);
    }
    ...
}

因为这些xml文件都会被tomcat解析,所以优化方向是将这三类文件中不必要的配置删除。

WEB-INF/web.xml

这个只能是在项目中不需要的配置不要放进去,有过期的配置要及时删除,减少tomcat的解析成本。

conf/web.xml
DefaultServlet
  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
  <!-- servlets with servlet mappings (defined either here or in your own   -->
  <!-- web.xml file).   -->
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值