Tomcat-概述

问题

  • 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本身不支持动态页面
  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eddy咸鱼

感谢大佬加鸡蛋~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值