Tomcat体系架构

标签: tomcat 体系 架构 | 发表时间:2016-08-22 01:55 | 作者:alexdamiao
出处:http://blog.csdn.net
总结Tomcat的体系架构、处理http请求的过程、安装和配置、目录结构、设置压缩和对中文文件名的支持、以及Catalina这个名字的由来……等。

Tomcat和JVM:
一个Tomcat只会启动一个JVM,所有webapps公用一个JVM进程,所以System.exit()会导致影响同个Tomcat中的其他应用。Tomcat通过调用配置的JDK或JRE来启动JVM。

体系结构:

Server:A Server element represents the entire Catalina servlet container. (Singleton)

Service:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求。

Connector
  • TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它WebServer的请求
  • Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求
  • Coyote JK2 Connector 在端口8009处侦听来自其它WebServer(Apache)的servlet/jsp代理请求

Engine
  • Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名 
  • 当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理 
  • Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理

Host
  • 代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配
  • 每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path
  • 当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理
  • 匹配的方法是“最长匹配”,所以一个path==”"的Context将成为该Host的默认Context
  • 所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配

Context
  • 一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成 
  • Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类 
  • 当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类 
  • 如果找到,则执行该类,获得请求的回应,并返回

另外一个架构图:


Tomcat Server处理一个http请求的过程

假设来自客户的请求为:

http://localhost:8080/wsota/wsota_index.jsp

1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)
7) path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser


安装和配置:
  1. 下载:tomcat.apache.org(分Unix 和 windows版)
  2. 解压到Windows或Unix目录下
  3. 配置端口:server.xml
  4. 配置Tomcat登录用户名密码:tomcat-user.xml, 
    <tomcat-users>
        <user name="admin" password="admin" roles="admin-gui,manager-gui" />
    </tomcat-users>
  5. 配置好JDK,配置JAVA_HOME环境变量
  6. 修改端口:<Connector port="80" protocol="HTTP/1.1" ……/>

  • 启动
    • Windows: startup.bat (可以在文件末尾加入pause指令,方便查看启动结果)
    • Unix: ./startup.sh(观察log:tail -f catalina.log)
  • 关闭
    • Windows: shutdown.bat
    • Unix: ./shutdown.sh

Tomcat目录结构
bin --- 存放tomcat启动关闭程序
conf --- 存放tomcat配置文件
lib --- tomcat运行需要jar包
logs --- tomcat日志文件
webapps --- 网站发布目录(所有网站可以发布到该目录)
work --- 存放工程运行时,产生数据文件(JSP翻译Servlet、Session持久化数据)

站点根目录:
    -------  静态web资源、jsp
    -------  WEB-INF目录
                  -------  classes目录 (保存,class文件)
                  --------  lib  目录 (当前网站需要jar包) 
                  -------- web.xml (网站配置文件)
* WEB-INF目录不是必须的,没有java动态程序代码, 可以没有WEB-INF 目录
* WEB-INF目录下资源不能被浏览器直接访问

如何设置tomcat压缩:
通过设置tomcat/conf/server.xml设置响应数据压缩
<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" 
                compression="on"
               compressionMinSize="256"
               compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,application/json"/>
注:compressionMinSize推荐值在150和1000之间
清除浏览器缓存,重启tomcat

支持下载文件名为中文的文件:
  <Connector port="8080"
             URIEncoding="utf-8"
             protocol="HTTP/1.1"
             connectionTimeout="20000"

             redirectPort="8443" />



作者:alexdamiao 发表于2016/8/21 17:55:53 原文链接
阅读:12 评论:0 查看评论

相关 [tomcat 体系 架构] 推荐:

Tomcat体系架构

- - CSDN博客推荐文章
总结Tomcat的体系架构、处理http请求的过程、安装和配置、目录结构、设置压缩和对中文文件名的支持、以及Catalina这个名字的由来……等. 一个Tomcat只会启动一个JVM,所有webapps公用一个JVM进程,所以System.exit()会导致影响同个Tomcat中的其他应用. Tomcat通过调用配置的JDK或JRE来启动JVM.

电子商务网站基础架构 nginx + memcached + tomcat + squid 集群

- - 企业架构 - ITeye博客
本文中 包含 nginx memcached tomcat 集群 的安装和配置. wget url 为下载所需的资源文件方式,也可以通过 VMware Tools 工具载入,. 如何安装 VMwareTools 参考本博客或者其他资料. 后面最后一章节是安装配置squid 在项目第一期不作要求. 第一章 安装配置nginx.

tomcat调优

- - 开源软件 - ITeye博客
1          概述. 本文档主要介绍了Tomcat的性能调优的原理和方法. 可作为公司技术人员为客户Tomcat系统调优的技术指南,也可以提供给客户的技术人员作为他们性能调优的指导手册. 2          调优分类. 由于Tomcat的运行依赖于JVM,从虚拟机的角度我们把Tomcat的调整分为外部环境调优和自身调优两类来描述.

Tomcat 优化

- - 编程语言 - ITeye博客
tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入. windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入. 最大堆内存是1024m,对于现在的硬件还是偏低,实施时,还是按照机器具体硬件配置优化.

TOMCAT优化

- - 移动开发 - ITeye博客
        Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器. 而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化.         一、内存优化.         默认情况下Tomcat的相关内存配置较低,这对于一些大型项目显然是不够用的,这些项目运行就已经耗费了大部分内存空间,何况大规模访问的情况.

Salesforce架构体系梳理

- - SegmentFault行走在创业的路上 最新的文章
在Force.com中,暴露给开发和应用程序用户的一切东西都内在地呈现为元数据. 表格、报告、工作流、用户访问权限、租户特定的自定义和业务逻辑,甚至是基础数据表和索引的定义,所有这些都只是作为元数据在Force.com的通用数据字典(UDD-The Universal Data Dictionary)中被抽象和构建.

基于Tomcat的WebSocket

- - ITeye博客
之前大概的看过WebSocket,当时Tomcat还不支持WebSocket,所以当时写了一篇基于Jetty的WebSocket实现,地址如下:. 现在Tomcat7.0.27发布了,从这个版本开始Tomcat就支持WebSocket了. Tomcat的WebSocket和Jetty的大致上差不多,大同小异,这里就简单的贴两个类吧:.

远程调试Tomcat

- - ITeye博客
  这种情况下只能通过查看远程服务器上的log来调试,如果出现unknown source说明编译的时候没有加入行号的信息,按如下修改.   a)通过javac编译时,默认相当于指定-g:source,lines,这样编译出来的class文件中会包含源代码和行号信息.   b)而通过ant编译时,默认相当于指定-g:none,这样编译出来的class文件会比较小,但是不包含任何调试信息,所以出错的时候就会打印出unknown source.

tomcat安全设置

- - Web前端 - ITeye博客
原链接: http://blog.163.com/wm_at163/blog/static/13217349020112171618892/. server.xml默认有下面一行:. 这样允许任何人只要telnet到服务器的8005端口,输入"SHUTDOWN",然后回车,服务器立即就被关掉了. 从安全的角度上考虑,我们需要把这个shutdown指令改成一个别人不容易猜测的字符串,可以同时把端口也改了.

Tomcat调优总结

- - CSDN博客研发管理推荐文章
Tomcat 优化分为系统优化,Java虚拟机调优,Tomcat本身的优化. 1.如何调整tomcat的占用内存. 1. linux 下编辑tomcat安装目录下的bin目录下的catalina.sh文件,windows下为catalina.bat. 2. 查找到tomcat内存参数一行:/ JAVA_OPTS,如果找不到则在第一行写上.