美文网首页
tomcat-1-概述

tomcat-1-概述

作者: 宠辱不惊的咸鱼 | 来源:发表于2019-10-02 09:20 被阅读0次

    问题

    • 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本身不支持动态页面

    相关文章

      网友评论

          本文标题:tomcat-1-概述

          本文链接:https://www.haomeiwen.com/subject/fzblpctx.html