1. 概念

1.1. 官方网站:tomcat.apache.org

1.2. tomcat的组件

<Server>

  <Service>

    <Connector/>

    <Connector/>

    <Engine>

      <Host>

        <Context/>

      </Host>

      <Host>

      </Host>

    </Engine>

  </Service>

</Server>

  每个组件都由“类”实现:

    此些组件可分为如下几类:

      顶级组件:Server

      服务组件:Service

      连接器组件:http,https,ajp

      容器类:Engine,Host,Context

      被嵌套类组件:value,logger,realm,loader,manager

      集群类组件:listener

2. 安装:

2.1. JDK

2.2. Tomcat:

  系统自带的rpm包

    tomcat

    tomcat-lib

    tomcat-admin-web

    tomcat-web-apps

  使用官方的二进制编译包

    tar xf apache-tomcat-VERSION.tar.gz -C /usr/local

    cd /usr/local

    ln -sv apache-tomcat-VERSION tomcat

    /etc/profile.d/tomcat.sh

      CATALINA_BASE=/usr/local/tomcat

      PATH=$CATALINA_BASE/bin:$PATH

      export CATALINA_BASE PATH

    tomcat的目录结构:

      bin:脚本,及启动时用到的类;

3. 配置文件

  server.xml:主配置文件;

  context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp应用程序自己的目录下的WEB-INF目录中;此context.xml为每个webapp提供默认配置

  web.xml:每个webapp只有在"部署"后才能被访问,这些配置文件通常位于webapp应用程序自己的目录下的WEB-INF目录中;此文件则用于为各webapps定义默认的部署方式

  tomcat-user.xml:用户认证的账号和密码文件;

  catalina.policy:当使用-security选项来启动tomcat实例时,会取此配置文件来实现基于安全策略的运行方式;

  catalina.properties:java属性的定义文件,用于设定类加载器路径,以及一些与jvm调优相关的参数等;

  logging.propeties:日志系统相关的配置

4. JSP WebAPP组织结构:

  /:webapps的根目录:

    index.jsp:主页;

    WEB-INF/:当前webapp的私资源的目录,通常存放当前webapp自用的context.xml;

    META-INF/:当前webapp的私资源的目录,通常存放当前webapp自用的context.xml

    classes/:类文件,当前webapp的私有类;

    lib/:当前webapp的私有类,被打包成jar格式;

  web归档格式:

    war:webapp

    jar:EJB的类打包文件

    rar:资源适配器打包文件

    ear:企业级webapp

  JSP --> jasper --> servlet(PAGE_jsp.java) --> complier -->bytecode(PAGE_jsp.class) --> JVM

5. 手动添加一个测试应用程序

  创建webapp特有的目录结构;

    mkdir -pv myapp/{classes.lib, WEB-INF,META-INF}

  提供webapp的测试页面;

    myapp/index.jsp

<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JSP Test Page</title>
</head>
<body>
<% out.println("hello world"); %>
</body>
</html>

6. 部署(deploy)webapp的相关操作;

  deploy:将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp;将其特有的类通过class loader装载至tomcat;

    自动部署:auto deploy

    手动部署:

      冷部署:把webapp复制到指定位置,而后才启动tomcat;

      热部署:在不停止tomcat的前提下进行的部署;

        部署工具:manager app、ant脚本、tcd(Tomcat Client Deployer)等等;

  undeploy:反部署,停止webapp,并从tomcat实例上拆除其部署文件和部署名;

  stop:停止,不再向用户提供服务;

  start:启动处于“停止”状态的webapp;

  redeploy:重新部署;

7. Tomcat自带的应用程序;

  manager app:webapp管理工具;

  host manager:VHosts管理工具;

8. Tomcat的常用组件:

  每个组件几乎都是通过特有的类来实现,而且有的组件还不止一种实现方式;

  Server:tomcat实例,即运行一个jvm进程;监听于8005端口接收“SHUTDOWN”,各“server监听的端口不能相同”;因此,一个物理主机上启动多个server实例应该使用不同的端口;

  Service:用于实现将一个或多个connector关联至一个engine;

  connector组件:

    进入tomcat的请求可分为两类:

      tomcat自己作为独立的应用程序服务器:standalone,此时,请求将来自于浏览;

      tomcat作为应用服务器:请求将来自于前面反向代理服务器;

        httpd:http,https,ajp

        nginx:http,https

    属性:

      address:监听的IP地址;

      maxThreads:最大并发连接数,默认为150;

      port:监听的端口;

      protocal:连接器使用的协议,一般为HTTP/1.1或AJP/1.3;

      redirectPort:如果有https请求,则转发至此端口;

      connectionTimeout:连接的超时时长,单位为毫秒,默认为60000;

      enableLookups:是否通过DNS进行查询,一般不会打开

      acceptCount:定义等待队列的长度;

      scheme:定义请求协议的类型

      debug:调试功能

      secure:开启安全功能

      clientAuth:是否验证客户端证书

      sslProtocal:SSL协议的版本,建议使用TLS

  Engine:Servlet的一个实例,即servlet引擎,其内部可以有一个或多个Host组件来定义;通常需要通过defaulHost的属性定义默认虚拟主机

    属性:

      name=

      defaultHost=

      jvmRoute=

  Host组件:位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机,如前面实例中的定义;

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>

    属性:

      appBase:此Host的webapps目录,即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径;可以使用基于$CATALINA_HOME的相对路径;

      autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy,默认为true;

      unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;

<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps">
<Context path="" docBase="ROOT"/>
<Context path="/bbs" docBase="/web/bss"
reloadable="true" crossContext="true"/>
</Host> <Host name="mail.magedu.com" appBase="/web/mail">
<Context path="/" docBase="ROOT"/>
</Host>
</Engine>

【Service】【Web】【Middleware】Tomcat的更多相关文章

  1. 【两种方式 Service References和 web References 】手把手教你引入webservice 服务

    1.对于一个webservie服务我们如何引入到自己的项目中去呢 第一种方法[Service References]:鼠标移到属性上 右键添加服务引用 然后在地址栏输入webservice 地址 点击 ...

  2. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  3. Python开发【第二十一篇】:Web框架之Django【基础】

    Python开发[第二十一篇]:Web框架之Django[基础]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...

  4. 【Web探索之旅】第一部分:什么是Web?

    内容简介 1.Web探索之旅:开宗明义 2.第一部分第一课:什么是Web? 3.第一部分第二课:Web,服务和云 4.第一部分第三课:Web的诞生史 Web探索之旅:开宗明义 大家好. 我们这个系列课 ...

  5. Spring MVC 学习笔记1 - First Helloworld by Eclipse【& - java web 开发Tips集锦】

    Spring MVC 学习笔记1 - First Helloworld by Eclipse reference:http://www.gontu.org 1. 下载 Spring freamwork ...

  6. 008-centos6.5搭建web服务【nginx-tomcat8-jre8】

    一.机器配置 yum install vim 1.1.Linux最大进程以及打开文件数 ulimit -n和-u可以查看linux的最大进程数和最大文件打开数. ulimit -a 展示所有 临时方法 ...

  7. Python之路【第十八篇】:Web框架们

    Python之路[第十八篇]:Web框架们   Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...

  8. Python之路【第十五篇】:Web框架

    Python之路[第十五篇]:Web框架   Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 ...

  9. 【ASP.NET Web API教程】3 Web API客户端

    原文:[ASP.NET Web API教程]3 Web API客户端 Chapter 3: Web API Clients 第3章 Web API客户端 本文引自:http://www.asp.net ...

  10. 【Web探索之旅】第四部分:Web程序员

    内容简介 1.第四部分第一课:什么是Web程序员? 2.第四部分第二课:如何成为Web程序员? 3.第四部分第三课:成为优秀Web程序员的秘诀 第四部分:Web程序员(完结篇) 大家好.终于来到了[W ...

随机推荐

  1. PAT甲级1074 Reversing Linked List (25分)

    [程序思路] 先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点 注意:输入的节点中有可能存在无用节点 ...

  2. storm在windows下本地调试报错java.lang.UnsatisfiedLinkError cannot find rocksdbjnixxxxxxxxxx.dll

    storm启动本地集群调试时,有时会找不到rocksdbjni.dll,storm加载该库的时候会先从jkd的bin下找rocksdbjni.dll,如果找不到就从pom文件的依赖包里找,再找不到就会 ...

  3. logstash写入kakfa数据丢失的问题

    metricbeat采集系统指标,发送到logstash,再写入kafka,发现kafka中的数据不完整,只有某一个指标, 查找原因发现是logstash配置编码问题,如下: input { beat ...

  4. Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现

    Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...

  5. 数字逻辑实践2->Verilog编写规范

    来源:数字逻辑与Verilog设计实验课讲解,个人做的笔记与整理. 00 规范的重要性 良好的编程风格有利于减少消耗的硬件资源,提高设计的工作频率 . 提高系统的可移植性和可维护性. 程序的格式化能体 ...

  6. 【Golang】基于beego/orm实现相同表结构不同表名的分表方法实现

    一.背景 在业务场景开发的过程中, 随着数据量的增加,相同表结构不同表名的分表策略是常用的方案选择之一.如下以golang做为后端业务开发,尝试修改beego的orm库做一个相同表结构不同表名的分表实 ...

  7. 【 [SCOI2016]幸运数字】

    P3292 [SCOI2016]幸运数字 想法 倍增加上线性基就行惹 线性基的合并可以通过把一个线性基的元素插入到另一个里实现 #include<iostream> #include< ...

  8. Codeforces 512D - Fox And Travelling(树上背包)

    题面传送门 题意: 给出一张无向图,每次你可以选择一个度数 \(\leq 1\) 的点并将其删除. 问对于 \(k=0,1,2,\dots,n\),有多少个删除 \(k\) 个点的序列,答案模 \(1 ...

  9. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  10. Codeforces 1299D - Around the World(线性基+图论+dp)

    Codeforces 题目传送门 & 洛谷题目传送门 一道线性基的综合题 %%%%%% 首先注意到"非简单路径""异或和"等字眼,可以本能地想到线性基. ...