您的位置:首页 > 运维架构 > Tomcat

Tomcat 之 tomcat安装和组件介绍

2017-11-16 11:48 295 查看
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.xmlServer:代表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/[/code]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 "%r" %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 "%r" %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 "%r" %s %b" />
</Context>
</Host>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安装 tomcat 组件介绍