tomcat-1-概述

问题

  • APR模式
    • apache portable runtime
    • http://apr.apache.org/docs/apr/1.6/modules.html
    • APR的整体模式还是非阻塞IO,实现的线程模型也是按照NIO的标准模型实现的,APR根据不同操作系统,分别用c重写了大部分IO和系统线程操作模块,这就是为什么APR在不改动代码的情况下能够提升

参考

组成

Server

  • Catalina servlet container(单例)

Service

<Service name="Catalina">
  • 1个或多个Connector + 1个Engine,处理所有Connector获得的请求

Connector

  • Connector在端口上侦听,将获得请求交给Engine处理,从Engine处获得响应返回客户端
  • 有两个典型Connector,一个侦听来自浏览器的Http请求,一个侦听来自其它WebServer的请求
// Coyote Http/1.1 Connector在端口8080处侦听来自浏览器的Http请求
<Conector port="8080" protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8443" />

// Coyote JK2 Connector在端口8009处侦听来自其它WebServer的Servlet/Jsp代理请求
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Engine

  • Engine下可以配置多个虚拟主机(Virtual Host),每个虚拟主机有一个域名
  • Engine获得一个请求时,将其匹配到某个Host上处理
  • Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host时,将交给默认Host处理
<Engine name="Catalina" defaultHost="localhost">

Host

<Host name="localhost" appBase="webapps" unparkWARs="true" autoDeploy="true">
  • 一个虚拟主机和一个网络域名相匹配
  • 每个虚拟主机下都可以部署一个或多个应用,每个应用对应于一个Context,有一个Context Path
  • Host获得一个请求时,把请求匹配到某个Context上处理
  • 匹配方法是“最长匹配”,path==""的Context是Host的默认Context
// 一个Host下配置多个Host
<Context path="/hello" docBase="D:\workspace\hello" debug="0" privileged="true" />
<Context path="/myapp" docBase="D:\workspace\myapp" workDir="D:\myapp\work" reloadable="true" />

// 创建一个Context文件,conf/Catalina/localhost/hello.xml
<Context path="/hello" docBase="D:\workspace\hello" debug="0" privileged="true" />

Context

  • 一个Context对应于一个Web应用,由一个或多个Servlet组成
  • 配置文件CATALINA_HOME/conf/web.xml +WEBAPP_HOME/WEB-INF/web.xml载入Servlet类
    • conf/web.xml中定义DefaultServlet(/)和JspServlet(.jsp,.jspx)
  • Context收到请求时,在自己的映射表中寻找相匹配的Servlet类,获得响应,并返回

映射例子

http://localhost:8080/wsota/wsota_index.jsp
tomcat-001.jpg
http://www.myserver.com/mywebapp/helloServlet/hello
tomcat-002.jpg
  • HttpServletRequest.getPathInfo()拿到这个path info后,可以做逻辑判断
  • 比如http://www.xxx.com/blog/jjx,假设servelt的映射为/blog/*,那么jjx就是path info
    • 查询用户名为jjx的信息,也就是说要看的是jjx的博客

虚拟主机

基于域名,多个Host节点

http://www.jalja1.org:8080/
http://www.jalja2.org:8080/
  • 局域网:hosts文件
  • 非局域网:DNS

基于端口号,多个Service节点

http://www.jalja1.org:8888/
http://www.jalja1.org:8080/

基于IP,Tomcat不支持

request & response

tomcat-003.jpg
tomcat-004.jpg
  • HttpServletRequest由web容器创建,并以方法参数传递给servlet的service方法

HttpServlet

  • J2EE核心基础类,J2EE是一套框架规范,具体实现依赖于各服务器厂商
  • Tomcat属于典型的开源J2EE服务器
  • 源码(Tomcat 8)分javax和org.apache两部分,javax是J2EE规范要求的,org.apache是Tomcat自身的
tomcat-005.jpg
tomcat-006.jpg

反向代理

  • 代理服务器接收Internet请求,转发给内部服务器,从内部服务器得到结果返回客户端,对外透明
  • nginx + tomcat,nginx本身不支持动态页面
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容