Tomcat的主要目录说明
bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh、startup.sh、shutdown.sh
conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml
lib:存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
logs:存放 Tomcat 执行时的日志
temp:存放 Tomcat 运行时产生的文件
webapps:存放 Tomcat 默认的 Web 应用项目资源的目录
work:Tomcat 的工作目录,存放 Web 应用代码生成和编译文件
Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户(据了解tomcat的并发量处理能力是nginx的六分之一)不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
Web 容器:完成 Web 服务器的功能。
Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码
因此 Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户的.jsp动态页面的请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。
Servlet :是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。
JSP: 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。也是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。
Service:对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。
Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。
Container 结构分析:每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器,4个子容器的作用分别是:
(1)Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;
(2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
(3)Context:代表一个 Web 应用,包含多个 Servlet 封装器;
(4)Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。
Engine、Host、Context 和 Wrapper,这四个容器之间属于层层递进的父子关系。
容器 由一个引擎(Engine)可以管理多个虚拟主机(Host)。每个虚拟主机(Host)可以管理多个 Web 应用(Context)。每个 Web 应用会有多个 Servlet 封装器(Wrapper)。
用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。
本次部署准备的版本安装包(版本根据需求): jdk-8u201-linux-x64.rpm(jdk环境包,是tomcat的运行环境) apache-tomcat-9.0.16.tar.gz(tomcat服务软件包)
步骤一:搭建Tomcat运行环境
(1)关闭防火墙和selinux,防止其对安装过程的干扰
systemctl stop firewalld systemctl disable firewalld setenforce 0
(2)将准备好的软件包拖入/opt目录下,进行安装
#某rpm包尚未安装,我们可以通过该命令查询其说明信息、安装以后会生成的文件; rpm -qpl jdk-8u201-linux-x64.rpm #安装并以#显示安装进度以及显示详细过程 rpm -ivh jdk-8u201-linux-x64.rpm #查看jdk环境 java -version
(3)设置jdk的环境变量
设置全局的环境变量,一般会有两种方式(本次部署采用第二种方式)
方式一:直接对 /etc/profile(全局变量配置文件进行改变)
方式二:在/etc/profile.d/ 目录下创建相关的 .sh 脚本,profile有默认调用的功能。(推荐使用,便于变量的管理)
vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
拓展知识:
CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
source /etc/profile.d/java.sh java -version
(4)编写一个java 简易的源代码,进行环境测试
vim Hello.java #类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头; 一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法) public class Hello { public static void main(String[] args){ System.out.println("Hello world!"); } }
#编译源代码 javac Hello.java #运行源代码 java Hello
步骤二:安装启动tomcat
(1)安装Tomcat
cd /opt #解压tomcat软件包 tar zxvf apache-tomcat-9.0.16.tar.gz #移动至服务软件包统一管理目录中,并且简易其名称 mv apache-tomcat-9.0.16 /usr/local/tomcat
(2)启动Tomcat
注意:Tomcat服务启动时会占用8080端口
#后台启动 /usr/local/tomcat/bin/startup.sh 或 /usr/local/tomcat/bin/catalina.sh start
#前台启动 /usr/local/tomcat/bin/catalina.sh run
#关闭后台运行的tomcat /usr/local/tomcat/bin/shutdown.sh
(3)开启tomcat服务,测试访问tomcat的默认首页
优化tomcat启动速度
直接启动tomcat的速度很快,但是tomcat中跑了项目后,启动就很慢(40G可能启动10分钟)。
当java中的jar包、war包放在/webapps中,需要重新启动tomcat服务,(shutdown.sh 和startup.sh), 重启tomcat的目的: 是为了让tomcat的环,能够重新加载、识别/webapps目录下的这些java代码。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security #修改jdk的配置参数
虚拟主机的概念: 是模拟多个渠道(功能)
优点: 充分使用资源、管理便捷、降低架构的复杂度,方便自定义“扩容”(创建多个虚拟主机)
缺点: 需要其它资源的支持、消耗相同的网络资源、单点故障
nginx中的虚拟主机: 基于不同的IP、基于不同的域名、基于不同的端口。(配置文件中,每一个server就是一个虚拟主机)
Tomcat中的虚拟主机: 使用一台tomcat服务运行多台虚拟主机,通过不同的虚拟主机访问不同的项目。(配置文件中,每一个host就是一个虚拟主机)
配置文件主要内容
添加benet项目
<Host name="www.ydq.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/ydq" path="" reloalable="true" /> </Host> <Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/benet" path="" reloalable="true" /> </Host> 配置文件介绍 Host name:主机名 appBase:Tomcat程序工作目录,即存放web应用程序的目录,相对路径:webapps,绝对路径:/usr/local/tomcat/webapps unpackWARs:在启用此webapps时是对WAR格式的归档文件先进行展开 autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用城西是否进行更新 xmlValidation:是否验证xml执行有效检验的标志 xmlNamespaceAware:是否启用命令空间,设置该值于xmlValidation为true,表示web.xml文件执行有效性验证 docBase:相应的web应用程序的存放位置,也可以使用相对路径,起始路径为此context所属Host中appBase定义的路径 path:相对web服务器跟路径而言的URI,如果为空,则表示为webapps的根路径/ reloadable:是否允许重新加载此context相关的web应用程序的类。
Tomcat优化
默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让他最高效率稳定的运行,优化主要包括三方面,分别为操作系统优化(内核优化),Tomcat配置文件参数优化,Java虚拟机调优。
优化的配置文件为:/usr/local/tomcat/conf/server.conf ,优化的方向为Connector容器。
常用的优化相关参数如下Tomcat配置文件参数
【maxThreads】:Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可以创建的最大的线程数,默认值为200。
【minSpareThreads】:最小空闲线程数。启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10.
【maxSpareThreads】:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制),一般不需要指定。
【URIEncoding】:指定Tomcat容器的URL编码格式,语言编码格式这块倒不如其它Web服务器软件配置方便,需要分别指定。
【connectionTimeout】:网络连接超时,单位:毫秒,设置为0表示用不超时,这样设置有隐患的,通常默认20000毫秒就可以。
【enableLookups】:是否反查域名,以返回远程主机的主机名,取值为true或false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置false。
【disabkeUploadTimeout】:上传是否使用超时机制,应设置为true
【connectionUploadTimeout】:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个格局你自己的业务需要自己挑,以使servlet有较长的时间来完成它的执行,需要与上一个参数一起配置使用才会生效。
【accpetCount】:指定所有可用使用的处理请求的线程数都被使用时,可传入连接请求的最大列长度,超过这个数的请求将不予处理,你默认为100个。
【compression】:是否对相应的数据进行GZIP压缩,off:表示进制压缩,on:表示允许压缩(文本将被压缩),force:表示所有情况下都进行压缩,默认值为0ff,压缩数据可以有效的减少压面的大小,一般可以减小1/3左右,节省带宽。
【compressionMinSize】:表示压缩相应最小值,只有当相应报文大小大于这个值的时候,才会对报文进行压缩,如果开启压缩功能,默认值就是2048.
【compressableMimeType】:压缩类型,指定堆哪些类型的文件进行数据压缩
【noCompressionUserAgents=“gozilla,traviata”】:对于以下浏览器,不启用压缩。
优化配置
vim /usr/local/tomcat/conf/server.xml #71行添加 minSpareThreads="50" enableLookups="false" disableUploadTimeout="true" acceptCount="300" maxThreads="500" processorCache="500" URIEncoding="UTF-8" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>
Tomcat可做为运行JAVA代码的环境,只要把java源码(.class可执行的类文件)或者war包或jar包放在/webapps中,那么Tomcat启动时,就可以解压,并运行放在/webapps中的这些应用(只需要修改配置文件:server.xml)
engine引擎---》Host---》context---》servlet(调用应用程序的java代码执行动态操作的环境)
1、tomcat 组件有哪些,从进入到处理
server: server元素在最顶层,代表整个Tomca容器,因此它必须是server.xml中唯一一个最外层的元素。一个server元素中可以有一个或多个service元素。server的主要任务,就是提供一个接口让客户端能够访问到这个service集合。同时维护它所有的service的声明周期,包括如何初始化,如何结束服务,如何找到客户端要访问的service。
service: service的作用,是在connector和engine外面报了一层,把他们组装在一起,对外提供服务,一个service可以包含多个connector,但是只能包含一个engine,其中connector的作用是从客户端接收请求,engine的作用是处理接收进行的请求,TTomcat可以提供多个service,不同的service监听不同的端口。
connector : 连接器,coyo http/1.1 8080 端口
engine: 容器引擎,容器引擎是管理运行容器的一个核心组件(container:web容器、jsp容器、servlet容器)
Host: 需要和java运行环境进行对接—》通过context连接java运行环境
context: Context元素代表在特定虚拟主机上运行的一个Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。Context是Host的子容器,每个Host中可以定义任意多的Context元素。
servlet: 管理调用以及运行java代码的核心组件
2、Tomcat虚拟主机
在service.xml 中进行配置,只需要对应配置 <Context …/> 这段就可以了,此配置用于定于Tomcat 如何管理JAVA应用+如何对接、连接java应用。
3、Tomcat优化
①配置文件中的优化:我们会在connector 连接配置端中进行优化,而优化的内容包括:如何更好的等待请求,如何分配线程资源、内存资源、队列、连接数、超时时间。启动时间优化(启动时间优化是优化jdk优化。进入/var/java/jdk-xxxxx/securty/java.securty 启动线程/dev/random ->/dev/urandom 的优化)
②JVM优化:-Xms -Xmx 的优化—》表示的意思是最小/最大的内存优化-----》简单理解为-Xms -Xmx 就是对应用使用的内存资源最小、最大值的优化。
③GC垃圾回收优化—》是因为java应用在Tomcat时,当应用运行的线程、进程资源退出时,会遗留一些资源碎片,GC就是对于这些资源碎片进行指定回收用的。
标签:容器,java,Tomcat,tomcat,部署,Servlet,优化 From: https://www.cnblogs.com/123456789SI/p/16889067.html