tomcat-1-概述

问题

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

参考

  • https://www.cnblogs.com/kismetv/p/7806063.html#t22
  • http://blog.csdn.net/xiemk2005/article/details/5988764

组成

Server

  • Catalina servlet container(单例)

Service


  • 1个或多个Connector + 1个Engine,处理所有Connector获得的请求

Connector

  • Connector在端口上侦听,将获得请求交给Engine处理,从Engine处获得响应返回客户端
  • 有两个典型Connector,一个侦听来自浏览器的Http请求,一个侦听来自其它WebServer的请求
// Coyote Http/1.1 Connector在端口8080处侦听来自浏览器的Http请求


// Coyote JK2 Connector在端口8009处侦听来自其它WebServer的Servlet/Jsp代理请求

Engine

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

Host


  • 一个虚拟主机和一个网络域名相匹配
  • 每个虚拟主机下都可以部署一个或多个应用,每个应用对应于一个Context,有一个Context Path
  • Host获得一个请求时,把请求匹配到某个Context上处理
  • 匹配方法是“最长匹配”,path==""的Context是Host的默认Context
// 一个Host下配置多个Host



// 创建一个Context文件,conf/Catalina/localhost/hello.xml

Context

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

映射例子

http://localhost:8080/wsota/wsota_index.jsp
tomcat-1-概述_第1张图片
tomcat-001.jpg
http://www.myserver.com/mywebapp/helloServlet/hello
tomcat-1-概述_第2张图片
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-1-概述_第3张图片
tomcat-003.jpg
tomcat-1-概述_第4张图片
tomcat-004.jpg
  • HttpServletRequest由web容器创建,并以方法参数传递给servlet的service方法

HttpServlet

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

反向代理

  • 代理服务器接收Internet请求,转发给内部服务器,从内部服务器得到结果返回客户端,对外透明
  • nginx + tomcat,nginx本身不支持动态页面

你可能感兴趣的:(tomcat-1-概述)