设为首页 收藏本站
查看: 802|回复: 0

[经验分享] Tomcat 之 tomcat安装和组件介绍

[复制链接]

尚未签到

发表于 2018-12-1 08:41:58 | 显示全部楼层 |阅读模式
  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


  catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
  catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;一般不需要修改,默认即可
  logging.properties:日志系统相关的配置;
  通常要修改的是server.xml和tomcat-users.xml两个文件
  
  5  Tomcat的核心组件介绍



   
        
        
            ...
           
                #这里的host需要是基于url的主机,因为ip和端口在连接器上
                    
                    
                        ...
               
               
                    ...
               
                ...
               
   
  每一个组件都由一个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




    Test Page


   

  测试,不需要重启服务,在浏览器输入如下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内部用于接收请求并进行相应处理的主机或虚拟主机,示例:

  常用属性说明:
  (1) appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径;
  (2) autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;
  (3) unpackWARs是自动展开打包的服务包
  示例:
      

# mkdir -pv /appdata/webapps
# mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF}  提供一个测试页即可;
  例子,把以下配置放到Engine段里,独立的host段
  #其中,斜线表示闭合,为配置段结束
mkdir  -pv   /sunny /webapps/ROOT/{lib,classes,WEB-INF}
vim  /sunny /webapps/ROOT/index.jsp



   
        sunnytc Test Page
   
   
         
   
systemctl restart tomcat  测试,在hosts里做好www.sunnytc.com的解析,用elinks测试如下
elinks -dump http://www.sunnytc.com:8080/  Context组件:监听的地址和端口使用监听器来设置

  示例:
  Valve组件:
  
  Valve存在多种类型:
  定义访问日志:org.apache.catalina.valves.AccessLogValve
  定义访问控制:org.apache.catalina.valves.RemoteAddrValve
  
例子
valve定义过滤器,相对路径是相对catalina.sh定义而言,pattern定义日志格式。

  #pattern定义日志格式,可以查看官方文档里logging  valve定义



  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-641789-1-1.html 上篇帖子: linux配置多个tomcat 下篇帖子: tomcat运行控制脚本catalina.sh分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表