1  概述


tomcat使用java语言编写,本身自带webser,是一个简装的http server,安装后生产的文件一般放在webapp下对应目录,manager是应用程序管理,tomcat 的站点路径映射到ROOT,如定义主站点为/data/web/html/  为要定义为/data/web/html/ROOT。tomcat一般不会监听在低于1024的端口号,因为tomcat是java编程,不监听系统的端口 。tomcat一般不会直接直接处理请求,由代理调度动态请求过来处理,一般代理服务器也用来处理静态资源,实现动静结合,同时静态的资源可以用缓存服务器来实现,减去后端服务器的压力。

Tomcat是Java 2 EE技术体系的不完整实现;  JBoss是在tomcat的基础上添加很多功能

tomcat的运行实例,一个实例就是一个java进程,监听在某个套接字

连接器负责接收请求,将请求发给引擎(运行代码环境),一个server可以有多个请求。

服务是用来包含连接器和引擎的,一个服务内部只能有一个引擎,但是一个服务可以有多个连接器。一般而言,一个实例只提供一个服务(虽然可以多个服务)

这种形式实现了一个物理主机上多个主机,这个相当于通过虚拟服务器的方式来实现,根据不同的url来实现,但是这里每一个组件是有context来定义,相当于是web里的alias,jsp程序还是比较重的,因为运行前要加载类,如部署环境,把虚拟机依赖的库都加载上来。加载过程可以自己运行也可以用户手动指定tomcat的组件,java的jvm不能有效的使用大于32G的内存空间,如果物理机内存大于32G,可以分配为多个实例,背后监听在不同的套接字上。


2  安装Tomcat


tomcat可以通过官方下载包进行安装和yum源安装

2.1 官方包安装

官方链接:tomcat.apache.org,建议使用7或8的版本,下载源码安装,需要maven环境,比较麻烦,建议下载编译好的包。到官网上找到后缀为.gz的包,服务包.gz结尾的。一般是绿色服务器,解压到对应目录就可以用了。先部署jdk环境,然后在执行如下的安装

下载路径:https://tomcat.apache.org/download-80.cgi

tar xf apache-tomcat-8.0.47.tar.gz -C /usr/local
cd /usr/local/
ln -sv apache-tomcat-8.0.47/ tomcat

添加账号tomcat,注意权限,一般需要用tomcat账号来启动,而不直接用root,所以相关文件要设置权限,使得tomcat账号具有读取或者写入权限

groupadd -g 91 tomcat
useradd -u 91 -g 91 -s /sbin/nologin tomcat
chown -R root.tomcat  /usr/local/tomcat/*
chown -R tomcat /usr/local/tomcat/{logs,temp,work,webapps}
chmod g+r /usr/local/tomcat/conf/*
vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH

保存后执行. /etc/profile.d/tomcat.sh导出环境变量

然后执行 catalina.sh start 启动tomcat,注意,通过tar包安装的tomcat,由脚本catalina.sh来管理

默认8005,8009,8080端口都打开为启动完成,tomcat没有权限监听80端口

测试,浏览器输入如下,可以打开,则表示正常

http://172.18.50.72:8080/

2.2  yum安装

会自动安装servlet和 jsp

先部署jdk

yum install java-1.8.0-openjdk-devel

再部署tomcat

yum install tomcat tomcat-lib tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps

默认配置可以直接启动,命令如下

systemctl restart tomcat

服务启动有点慢,要等8005,8009,8080端口都打开为启动完成

tomcat需要依赖jvm执行,没有主程序。/usr/sbin/tomcat是shell脚本,调用jvm实现

java运行默认监听三个端口:8009 ajp协议, 8080 http协议 ,8005管理接口

jps查看java进程


3  tomcat程序环境


3.1  tomcat的目录结构

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

conf:配置文件目录;

lib:库文件,Java类库,jar;

logs:日志文件目录;

temp:临时文件目录;

webapps:webapp的默认目录;

work:工作目录,存放编译后的字节码文件;

# catalina.sh --help

debug             在调试器中启动Catalina

debug -security   用安全管理器调试Catalina

jpda start       在JPDA调试器下启动Catalina

run              在当前窗口中启动Catalina

run -security     从安全管理器的当前窗口开始

start             在另一个窗口启动Catalina

start  -security   从安全管理器的另一个窗口开始

stop            停止Catalina,等待5秒钟后进程 结束

stop n           停止Catalina,等待n秒钟后进程 结束

stop -force       停止Catalina,等待5秒钟后进程结束,如果进程还在运行,就强制终止进程。

stop n -force     停止Catalina,等待n秒钟后进程结束,如果进程还在运行,就强制终止进程。

configtest        在server.xml上运行基本语法检查 - 检查退出代码最为判断的结果

version           检查tomcat版本用的。

3.2  rpm包安装的程序环境

配置文件目录:/etc/tomcat

主配置文件:server.xml

webapps存放位置:/var/lib/tomcat/webapps/

examples

manager

host-manager

docs

Unit File:tomcat.service

环境配置文件:/etc/sysconfig/tomcat


4  tomcat的配置文件构成


server.xml:主配置文件;定义实例的初始化,为java虚拟机提供配置

web.xml:每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置;一般不需要修改,默认即可

context.xml:每个webapp都可以使用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置;一般不需要修改,默认即可

tomcat-users.xml:用户认证的账号和密码文件;角色(role),用户(User);此文件在tomcat启动时被装入内存;

例子,授权用户查看server status,Manager APP,Host Manager的界面

vim  /usr/share/tomcat/conf/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="Pass123456" roles="manager-gui,admin-gui"/>

catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;

catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;一般不需要修改,默认即可

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

通常要修改的是server.xml和tomcat-users.xml两个文件


5  Tomcat的核心组件介绍

<Server><Service><connector/><connector/>...<Engine><Host>#这里的host需要是基于url的主机,因为ip和端口在连接器上<Context/><Context/>...</Host><Host>...</Host>...</Engine></Service>
</Server>

每一个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型:

顶级组件:Server,代表一个instance

服务类组件:Service

连接器组件:http, https, ajp(apache jserv protocol)

容器类:Engine, Host, Context,面向内部部署应用的

被嵌套类:valve, logger, realm, loader, manager, ...

集群类组件:listener, cluster(会话集群),...

JSP WebAPP的组织结构:部署应用程序,所依赖的类需要被装载后才能被运行,所以是重量级的。

/: webapps的根目录

index.jsp:主页;用引擎执行的代码,要以.jsp结尾,如果不需要引擎处理的文件,用.html结尾

WEB-INF/:当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件;描述当前路径的私有信息,不能让用户通过url直接访问。

较大的应用程序会有以下三个文件

META-INF/:类似于WEB-INF/;

classes/:类文件,当前webapp所提供的类;

lib/:类文件,当前webapp所提供的类,被打包为jar格式;jar为tomcat的打包文件。JVM访问这类文件,无需展开,直接访问

webapp归档格式:先打包,重启服务会自动把打包的文件展开为目录,只需要将链接指向新版本即可,可以用脚本实现。这叫脚本化发布。

有以下类型的打包文件

.war:webapp;

.jar:EJB的类打包文件(类库);

.rar:资源适配器类打包文件;

.ear:企业级webapp;

部署(deploy)webapp的相关操作:可以通过代码实现

deploy:将webapp的源文件放置于目标目录(网页程序文件存放目录),配置tomcat服务器能够基于web.xml和context.xml文件中定义的路径来访问此webapp;将其特有的类和依赖的类通过class loader装载至JVM;

部署有两种方式:

自动部署:auto deploy

手动部署:

冷部署:把webapp复制到指定的位置,而后才启动tomcat;冷部署是最安全的部署方法

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

部署工具:manager、ant脚本、tcd(tomcat client deployer)等;

undeploy:拆除(反部署),停止webapp,并从tomcat实例上卸载webapp;

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

stop:停止webapp,不再向用户提供服务;其类依然在jvm上;

redeploy:重新部署;

手动提供一测试类应用,并冷部署:

本例子将部署主机

mkdir -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}

创建主页文件

vim  /usr/share/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head><title>Test Page</title>
</head>
<body><% out.println("hello world");%>
</body>
</html>

测试,不需要重启服务,在浏览器输入如下url:http://172.18.50.73:8080/test/

tomcat的两个管理应用:

manager:管理应用程序

host-manager:管理虚拟主机

tomcat的常用组件配置:配置文件/usr/share/tomcat/conf/server.xml

Server:代表tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口; port="-1",表示不监听,或者把shutdown的命令设置为复杂,最好使用随机数。

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

Connector组件:

负责接收请求,常见的有三类http/https/ajp;

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

(1) standalone : 请求来自于客户端浏览器;用于实验环境

(2) 由其它的web server反代:来自前端的反代服务器;一般用http反向代理(AT)或者是nginx反向代理(NT),以下四类反代模型,关键是看反代用什么协议调度过来的。

nginx --> http connector --> tomcat

httpd(proxy_http_module) --> http connector --> tomcat

httpd(proxy_ajp_module) --> ajp connector --> tomcat (这种方法,用户无法绕过代理直接访问)

httpd(mod_jk,已经过时,需要编译安装,不推荐使用) --> ajp connector --> tomcat

端口号和协议没有直接关系,因为端口号可以用户直接定义,maxthreads是接收请求的并发数量,一般不会再tomcat上部署https,一般是在反代上部署https。tomcat一般只监听本地和反代

属性:

port="8080"

protocol="HTTP/1.1"

connectionTimeout="20000"

address:监听的IP地址;默认为本机所有可用地址;

maxThreads:最大并发连接数,默认为200;rpm安装默认为150

enableLookups:是否启用DNS查询功能;建议关闭,加快速度

acceptCount:等待队列的最大长度;

secure:

sslProtocol:TLS 1.1或TLS 1.2

Engine组件:

Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点; 通常需要通过defaultHost来定义默认的虚拟主机;

属性:

name=

defaultHost="localhost"

jvmRoute=   #做集群的时候,基于cookie的会话粘性才需要启用jvmRoute

Host组件:位于engine内部用于接收请求并进行相应处理的主机或虚拟主机,示例:

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

常用属性说明:

(1) appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径;

(2) autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;

(3) unpackWARs是自动展开打包的服务包

示例:

      <Host name="tc1.magedu.com" appBase="/appdata/webapps" unpackWARs="true" autoDeploy="true">
</Host>
# mkdir -pv /appdata/webapps
# mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF}

提供一个测试页即可;

例子,把以下配置放到Engine段里,独立的host段

<Host name="www.sunnytc.com" appBase="/sunny/webapps" unpackWARs="true" autoDeploy="true" />

#其中,斜线表示闭合,为配置段结束

mkdir  -pv   /sunny /webapps/ROOT/{lib,classes,WEB-INF}
vim  /sunny /webapps/ROOT/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html><head><title>sunnytc Test Page</title></head><body><% out.println("hello sunnytc world");%>  </body>
</html>
systemctl restart tomcat

测试,在hosts里做好www.sunnytc.com的解析,用elinks测试如下

elinks -dump http://www.sunnytc.com:8080/

Context组件:监听的地址和端口使用监听器来设置

示例:

<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>

Valve组件:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log" suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />

Valve存在多种类型:

定义访问日志:org.apache.catalina.valves.AccessLogValve

定义访问控制:org.apache.catalina.valves.RemoteAddrValve

<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172\.16\.100\.67"/>

例子

valve定义过滤器,相对路径是相对catalina.sh定义而言,pattern定义日志格式。

<Host name="node1.magedu.com" appBase="/web/apps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_access" suffix=".log" #prefix日志文件名的前缀,suffix日志后缀
pattern="%h %l %u %t &quot;%r&quot; %s %b" />  #pattern定义日志格式,可以查看官方文档里logging  valve定义
<Context path="/test" docBase="test" reloadable="">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_test_access_" suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Context>
</Host>

转载于:https://blog.51cto.com/ghbsunny/1982295

Tomcat 之 tomcat安装和组件介绍相关推荐

  1. Tomcat(1)介绍、jdk安装、安装Tomcat ​ 配置Tomcat监听80端口

    Tomcat介绍 (使用yum 下载安装的openjdk下载以后就可以使用) 以下实验用的是在官网下载程序包. Tomcat是一个中间键,要解析java相关的东西,需要先下载JDK 下载jdk 1.下 ...

  2. Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

    2019独角兽企业重金招聘Python工程师标准>>> Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta ...

  3. tomcat服务器的安装、tomcat的目录介绍、如何启动tomcat

    tomcat服务器的安装 找到需要的Tomcat版本对应的zip压缩包,解压到需要安装的目录即可 tomcat的目录介绍 bin        专门用来存放tomcat服务器的可执行程序 conf  ...

  4. Tomcat部署及安装

    文章目录 Tomcat部署 Tomcat介绍 Tomcat功能组件结构: 安装Tomcat Tomcat部署 Tomcat介绍 免费的.开放源代码的Web应用服务器 Apache软件基金会(Apach ...

  5. Windows Java、Tomcat、MySQL安装过程

    1.选择平台 平台分为Java SE(标准版)和Java EE(企业版),这里选择SE 2.下载JDK 下载的官网:https://www.oracle.com/technetwork/java/ja ...

  6. Tomcat:基础安装和使用教程

    Tomcat:基础安装和使用教程 Tomcat:基础安装和使用教程 背景 此文记录了 Tomcat 的基本使用方法,主要为了强化记忆. 安装步骤 第一步:下载和安装 Java 下载地址:http:// ...

  7. Linux Tomcat 6.0安装配置实践总结

    系统环境: Red Hat Enterprise Linux Server release 5.7 (Tikanga)  64位 Tomcat下载 从官方网站 http://tomcat.apache ...

  8. javaweb(05):tomcat服务器的安装、启动,IDEA整合Tomcat创建动态web工程

    tomcat服务器的安装.启动 下载及安装 下载 官网下载合适的版本:https://tomcat.apache.org/ 我装的是9.0.37版本. 安装 把从官网下载的文件放到想要安装的位置,解压 ...

  9. Tomcat 7.0安装与配置

    安装JDK就是为了能搭建Web服务器Tomcat和配置开发工具eclipse,先讲Tomcat服务器配置吧,因为eclipse的server配置中也要用到Tomcat. Tomcat的下载就不想多说, ...

最新文章

  1. ajax交互扩展遇到的问题,ajax autocomplete扩展程序无法正常工作
  2. tikhonov正则化 matlab_4 L1和l2正则化详解(花书7.1 参数范数惩罚)
  3. python yield的简单理解
  4. 【CV】图像分析用 OpenCV 与 Skimage,哪一个更好?
  5. 计算机专业的一个四年工作的总结
  6. MySQL 无法连接
  7. JVM Java内存区域 与 内存溢出 (系列号1)
  8. 前大厂员工谈中美企业区别,中企不用单元测试,仅靠QA检查代码?
  9. 开关电源模块并联供电系统_你了解UWE/F_S-1/3WR3系列小功率模块电源吗?
  10. 再读simpledb 之 SQL语句解析(1)
  11. 震精 - PostgreSQL 递归查询 - 树型数据按路径分组输出
  12. mock gps android,MockGPS: Android application to fake GPS
  13. dell 工作站装linux_dell服务器linux系统安装
  14. XP下免U盘安装Ubuntu 18.04(持续更新遇到的问题,20200422更新)
  15. 奇迹mysql老是被误杀_【鸟友汇】致歉少时打雀被误杀的生灵们:傻老嘎、春暖儿、窜鸡、老麦……...
  16. 十款磁盘碎片整理工具
  17. 腾达无线路由器dns服务器,腾达无线路由器如何设置DNS
  18. win 10键盘快捷方式就是按键或按键组合(收藏使用
  19. 可以真正带你理清同步阻塞与同步非阻塞与异步阻塞与异步非阻塞的文章
  20. 星环科技的“星图解密”:只有偏执狂,才能让中国基础软件打破对国外进口的依赖...

热门文章

  1. 【移动开发】Android中强大的适配功能----Fragment(碎片)总结
  2. Maven -- 使用Myeclipse创建Maven项目
  3. JAVA多线程两个实用的辅助类(CountDownLatch和AtomicBoolean)
  4. 【杂谈】WebService是什么?
  5. JSON数据格式介绍
  6. Qt Linguist 界面语言翻译
  7. 【视频】【zt】温馨的求婚
  8. 【原创视频教程】学生信息管理系统1--登陆
  9. PageOffice,word常用接口对象--Paragraph类
  10. hadoop hive 安装