Tomcat详解
Posted hgzero
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat详解相关的知识,希望对你有一定的参考价值。
1. Tomcat简介
1.1 Tomcat的核心组件
- catalina:servlet container(servlet的容器)
- Coyote:http connection(http连接器)
- Jasper:JSP Engine(jsp引擎,jsp翻译器)
注意:
- Tomcat的开发语言:JAVA
- Tomcat要运行在JVM上,而对于JDK而言,它的JVM程序名就叫做 java
- 所以启动tomcat之后发现不了tomcat运行在哪,tomcat体现为一个java进程
- 这个java进程不过在运行时装载了tomcat的一些代码而已
1.2 Tomcat Instance
- Tomcat Instance:运行中的tomcat进程(java进程)
1.2.1 Tomcat实例
- Server:一个tomcat实例(tomcat instance),运行中的tomcat进程(java进程)
- Service:用于将connector关联至engine组件,一个service只能包含一个engine组件和 一个或多个connector组件
- Engine:Tomcat的核心组件,用于运行jsp或servlet代码(整个jsp代码的运行都要靠Engine来实现)
- Connector:
- 接受并解析用户请求,将请求映射为Engine中运行的代码,之后,将运行结果构建成响应报文响应给客户端
- http,ajp
- Host:类似httpd中的虚拟主机
- Context:类似于httpd中的alias
1.2.2 各个组件
每个组件都由“类”来实现,有些组件的实现还不止一种
- 顶级类组件:server
- 服务类组件:service
- 容器类组件:即可以部署webapp的组件,engine,host,context
- 连接器组件:connector
- 被嵌套类组件:valve,logger,realm
<server> <service> <connector /> <connector /> ... <engine> <host> <context /> ... </host> ... </engine> </service> </server>
1.3 Tomcat的运行模式
1.3.1 standalone
- 通过内置的web server(http connector)来接收客户端请求
1.3.2 proxy
- 由专门的web server服务客户端的http请求
- 其实就是在tomcat前面加一个nginx,然后由nginx将动态请求反代至tomcat
- ip-process:部署于同一台主机
- network:部署于不同主机
2. Tomcat的安装配置&webapp的部署
2.1 Tomcat的安装和启动
安装JDK:
- 安装JDK:
- Oracle JDK
- OpenJDK
- 可以直接yum安装或者在官网下载rpm包安装
- 关于JDK的位置:
-
/usr/bin/java -> /etc/alternatives/java /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java
-
- 配置环境变量:
-
vim /etc/profile.d/java.sh # openjdk1.8的路径是/usr/lib/jvm/java/bin export JAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH
-
安装Tomcat:
- 下载rpm包安装或者yum安装(Tomcat7)
- 安装后将tomcat的位置添加到环境变量中:
-
vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/share/tomcat export PATH=$CATALINA_HOME/bin:$PATH
-
- 如果是二进制包安装,最好将其安装到/usr/local路径下,且做好软链接
启动Tomcat:
- bin/catalina.sh
- start
- start -security 安全模式下驱动tomcat,读取conf/catalina.policy的策略,并启动tomcat
- stop 停止服务(默认是等待5秒后停止)
- stop -n 可以指定等待n秒之后再停止
- stop -force 强制停止服务
- configtest 测试配置文件
- version 显示版本
- debug 在debugger中运行
- 现在在CentOS7上可以直接用systemctl来运行
2.2 Tomcat目录结构和配置文件
Tomcat目录结构:
- bin:脚本及启动时用到的类
- lib:类库
- conf:配置文件
- logs:日志文件
- webapps:应用程序默认部署目录
- work:工作目录
- temp:临时文件目录
Tomcat的配置文件:
- server.xml:主配置文件
- context.xml:
- 每个webapp都可以有专用的配置文件,
- 这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器,JDBC等
- conf/context.xml是为各webapp提供默认配置
- web.xml:
- 每个webapp部署之后才能被访问,此文件则用于为所有的webapp提供默认部署相关的配置
- tomcat-users.xml:
- 用于认证的账号和密码配置文件
- catalina.policy:当使用-security选项启动tomcat实例时会读取此配置文件来实现其安全运行策略
- catalina.properties:Java属性的定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数
- logging.properties:日志相关的配置信息
2.3 webapp部署
2.3.1 Java WebAPP简介
Java WebAPP组织结构:
有特定的组织形式、层次性的目录结构,主要包含了servlet代码文件,JSP页面文件、类文件、部署描述符文件等
- /usr/local/tomcat/webapps/app1/(若是yum安装的tomcat,这时的路径为:/usr/share/tomcat/webapps/app1)
- / :webapp的根目录
- WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml
- META-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的context.xml
- classes/:此webapp的私有类
- lib/:此webapp的私有类,被打包为jar格式类
- index.jsp:webapp的主页
- 还可以有一些其他的目录用以存放如图片等资源
- webapp归档格式:
- .war:webapp
- .jar:EJB的类
- .rar:资源适配器
- .ear:企业级应用程序
部署(deployment)webapp的相关操作:
- deploy:一个应用程序只有被部署以后才被被访问
- 部署:
- 将webapp的源文件放置于目标目录,并配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp
- 将其特有类通过class loader装载至tomcat
- 部署的两种方式:
- 自动部署:auto deploy
- 手动部署:
- 冷部署:把webap复制到指定位置,而后才启动tomcat
- 热部署:
- 在不停止tomcat的前提下进行的部署
- 需要通过部署工具进行,如manager、ant脚本、tcd(tomcat client deployer)等
- 部署:
- undeploy:反部署,停止webapp,并从tomcat实例拆除其部分文件和部署名
- stop:停止,不再向用户提供服务
- start:启动处于“停止”状态的webapp
- redeploy:重新部署
2.3.2 简单部署webapp
创建webapp特有的目录结构
- 在/usr/share/tomcaat/webapps下:
- mdir -pv myapp/{lib,classes,WEB-INF,META-INF}
- 如果每个app没有自己的配置文件,就会从conf下继承web.xml和context.xml
提供webapp的主页文件:
vim 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>
2.3.3 Tomcat自带的应用程序
- manager app:webapp管理工具
- host manager:Virtual Hosts管理工具
配置manager:conf/tomcat-users.xml
vim conf/tomcat-users.xml <role rolename="manager-gui"/> <user username="tomcat" password="hgzero" roles="manager-gui"/> # 注意:修改这个文件不会立即生效,因为tomcat在启动时会将这个文件读取到内存中,因此只有重启
配置host manager
vim conf/tomcat-users.xml <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="tomcat" password="hgzero" roles="manager-gui,admin-gui"/>
3. Tomcat核心组件详解
以上是关于Tomcat详解的主要内容,如果未能解决你的问题,请参考以下文章