加盟网官方网站,国内装饰行业网站开发,WordPress 标签 模板,江阴市城乡建设网站目录 **Tomcat 由一系列的组件构成#xff0c;其中核心的组件有三个#xff1a;**
什么是 servlet#xff1f;
什么是 JSP?
Tomcat 功能组件结构#xff1a;
Container 结构分析#xff1a;
Tomcat 请求过程#xff1a;
## Tomcat 服务部署
1.关闭防火墙#xf…目录 **Tomcat 由一系列的组件构成其中核心的组件有三个**
什么是 servlet
什么是 JSP?
Tomcat 功能组件结构
Container 结构分析
Tomcat 请求过程
## Tomcat 服务部署
1.关闭防火墙将安装 Tomcat 所需软件包传到/opt目录下
2.安装JDK
3.设置JDK环境变量
4.安装启动Tomcat
5.优化tomcat启动速度
## 主要目录说明
## Tomcat 虚拟主机配置
1.创建 kgc 和 benet 项目目录和文件
2.修改 Tomcat 主配置文件 server.xml
3.客户端浏览器访问验证
## Tomcat多实例部署
bash1.安装好 jdk
2.安装 tomcat
3.配置 tomcat 环境变量
4.修改 tomcat2 中的 server.xml 文件要求各 tomcat 实例配置不能有重复的端口号
5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件添加 tomcat 环境变量
6.启动各 tomcat 中的 /bin/startup.sh
7.浏览器访问测试 **Tomcat 由一系列的组件构成其中核心的组件有三个**
1Web 容器完成 Web 服务器的功能。 2Servlet 容器名字为 catalina用于处理 Servlet 代码。 3JSP 容器用于将 JSP 动态网页翻译成 Servlet 代码。
因此 Tomcat 是 Web 应用服务器也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器负责处理客户请求把请求传送给 Servlet并将 Servlet 的响应传送回给客户。
什么是 servlet
Servlet 是Java Servlet 的简称可以理解为是一个服务连接器是用 Java 编写的服务器端程序具有独立于平台和协议的特性 简单的理解servlet 就是一个中间件包含了接口和方法将客户端和数据库连接从而实现动态网页的创建。
什么是 JSP?
JSP 全称 Java Server Pages是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 % 开头以 % 结束。 JSP 是一种 Java servlet主要用于实现 Java web 应用程序的用户界面部分。 JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源然后动态地创建网页。
Tomcat 功能组件结构
Tomcat 的核心功能有两个分别是负责接收和反馈外部请求的连接器 Connector和负责处理请求的容器 Container。 其中连接器和容器相辅相成一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。
●Connector负责对外接收和响应请求。它是Tomcat与外界的交通枢纽监听端口接收外界请求并将请求处理后传递给容器做业务处理最后将容器处理后的结果响应给外界。 ●Container负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成用于管理和调用 Servlet 相关逻辑。 ●Service对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件以及其他功能组件。Tomcat 可以管理多个 Service且各 Service 之间相互独立。 Container 结构分析
每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器 4个子容器的作用分别是 1Engine引擎用来管理多个虚拟主机一个 Service 最多只能有一个 Engine 2Host代表一个虚拟主机也可以叫站点通过配置 Host 就可以添加站点 3Context代表一个 Web 应用包含多个 Servlet 封装器 4Wrapper封装器容器的最底层。每一 Wrapper 封装着一个 Servlet负责对象实例的创建、执行和销毁功能。
Engine、Host、Context 和 Wrapper这四个容器之间属于父子关系。 容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 封装器。 Tomcat 请求过程
1、用户在浏览器中输入网址请求被发送到本机端口 8080被在那里监听的 Connector 获得 2、Connector 把该请求交给它所在的 Service 的 EngineContainer来处理并等待 Engine 的回应 3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用最后在 Servlet 中执行对应的业务逻辑、数据存储等。 4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回最后返回给 Connector并通过 Connector 返回给客户端。
## Tomcat 服务部署
bash 在部署 Tomcat 之前必须安装好 jdk因为 jdk 是 Tomcat 运行的必要环境。
1.关闭防火墙将安装 Tomcat 所需软件包传到/opt目录下
jdk-8u391-linux-x64.rpm apache-tomcat-9.0.16.tar.gz
systemctl stop firewalld systemctl disable firewalld setenforce 0
2.安装JDK
cd /opt rpm -qpl jdk-8u391-linux-x64.rpm rpm -ivh jdk-8u391-linux-x64.rpm java -version
3.设置JDK环境变量
vim /etc/profile.d/java.sh export JAVA_HOME/usr/java/jdk1.8.0-x64 export JRE_HOME$JAVA_HOME/jre export CLASSPATH.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile.d/java.sh java -version
---------------------------------小知识-------------------------------- JDK java development kit java开发工具 JRE java runtime environment java运行时环境 JVM java virtuak machine java虚拟机使java程序可以在多种平台上运行class文件。 CLASSPATH告诉jvm要使用或执行的class放在什么路径上便于JVM加载class文件。 tools.jar是系统用来编译一个类的时候用到的即执行javac的时候用到。
dt.jardt.jar是关于运行环境的类库主要是swing包。 -------------------------------------------------------------------- 首先使用文本工具编写java源代码比如 Hello.java 在命令行中输入命令javac Hello.java对源代码进行编译生成 class 字节码文件 编译完成后如果没有报错信息输入命令java Hello运行 class 字节码文件由 JVM 对字节码进行解释和运行打印 “Hello World”。 vim Hello.java #类名、接口名命令英文大小写字母、数字字符、$和_不能使用关键字和数字开头 一个单词命名时第一个单词的首字母要大写多单词组成时所有单词的首字母大写XxxYyyZzz大驼峰命名法 public class Hello { public static void main(String[] args){ System.out.println(Hello world!); } }
javac Hello.java java Hello
4.安装启动Tomcat
cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mv apache-tomcat-9.0.16 /usr/local/tomcat ##启动tomcat ## #后台启动 /usr/local/tomcat/bin/startup.sh 或 /usr/local/tomcat/bin/catalina.sh start #前台启动 /usr/local/tomcat/bin/catalina.sh run
netstat -natp | grep 8080
vim /usr/lib/systemd/system/tomcat.service [Unit] Descriptiontomcat server Wantsnetwork-online.target Afternetwork.target [Service] Typeforking EnvironmentJAVA_HOME/usr/java/jdk1.8.0-x64 EnvironmentPATH$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin EnvironmentCLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ExecStart/usr/local/tomcat/bin/startup.sh ExecStop/usr/local/tomcat/bin/shutdown.sh Restarton-failure [Install] WantedBymulti-user.target
浏览器访问Tomcat的默认主页 http://192.168.134.30:8080
5.优化tomcat启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢默认情况下可能会需要几十秒可以修改jdk参数进行改。 vim /usr/java/jdk1.8.0-x86/jre/lib/security/java.security --117行--修改
securerandom.sourcefile:/dev/urandom
●tomcat 启动慢的原因是随机数产生遭到阻塞遭到阻塞的原因是 熵池大小 。 ●/dev/random阻塞型读取它就会产生随机数据但该数据取决于熵池噪声当熵池空了对/dev/random 的读操作也将会被阻塞。 ●/dev/urandom非阻塞的随机数产生器它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器不建议用于生成高强度长期密码。
●Linux内核采用熵来描述数据的随机性。熵entropy是描述系统混乱无序程度的物理量一个系统的熵越大则说明该系统的有序性越差即不确定性越大。在信息学中熵被用来表征一个符号或系统的不确定性熵越大表明系统所含有用信息量越少不确定度越大。计算机本身是可预测的系统因此用计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的噪声如硬件设备发生中断的时间用户点击鼠标的时间间隔等是完全随机的事先无法预测。Linux内核实现的随机数产生器正是利用系统中的这些随机噪声来产生高质量随机数序列。内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上熵池中的数据是完全随机的可以实现产生真随机数序列。为跟踪熵池中数据的随机性内核在将数据加入池的时候将估算数据的随机性这个过程称作熵估算。熵估算值描述池中包含的随机数位数其值越大表示池中数据的随机性越好。
/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
ll /usr/local/tomcat/
## 主要目录说明
bash ●bin存放启动和关闭 Tomcat 的脚本文件如 catalina.sh、startup.sh、shutdown.sh ●conf存放 Tomcat 服务器的各种配置文件如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml ●lib存放 Tomcat 运行需要的库文件的 jar 包一般不作任何改动 ●logs存放 Tomcat 执行时的日志 ●temp存放 Tomcat 运行时产生的文件 ●webapps存放 Tomcat 默认的 Web 应用项目资源的目录
●workTomcat 的工作目录存放 Web 应用代码生成和编译文件
## Tomcat 虚拟主机配置
bash 很多时候公司会有多个项目需要运行一般不会是在一台服务器上运行多个 Tomcat 服务这样会消耗太多的系统资源。此时 就需要使用到 Tomcat 虚拟主机。 例如现在新增两个域名 www.kgc.com 和 www.benet.com 希望通过这两个域名访问到不同的项目内容。
1.创建 kgc 和 benet 项目目录和文件
mkdir /usr/local/tomcat/webapps/kgc mkdir /usr/local/tomcat/webapps/benet echo This is kgc page\! /usr/local/tomcat/webapps/kgc/index.jsp echo This is benet page\! /usr/local/tomcat/webapps/benet/index.jsp
2.修改 Tomcat 主配置文件 server.xml
vim /usr/local/tomcat/conf/server.xml --165行前--插入 Host namewww.kgc.com appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalse Context docBase/usr/local/tomcat/webapps/kgc path reloadabletrue / /Host
Host namewww.benet.com appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalse Context docBase/usr/local/tomcat/webapps/benet path reloadabletrue / /Host
----------------------------------------------------------------------------------------------------------
Host name主机名 appBaseTomcat程序工作目录即存放web应用程序的目录相对路径为webapps绝对路径为 /usr/local/tomcat/webapps unpackWARs在启用此webapps时是否对WAR格式的归档文件先进行展开默认为true autoDeploy在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy默认为true xmlValidation是否验证xml文件执行有效性检验的标志 xmlNamespaceAware是否启用xml命名空间设置该值与xmlValidation为true表示对web.xml文件执行有效性检验
Context docBase相应的Web应用程序的存放位置也可以使用相对路径起始路径为此Context所属Host中appBase定义的路径 path相对于Web服务器根路径而言的URI如果为空则表示为此webapp的根路径 /
reloadable是否允许重新加载此context相关的Web应用程序的类默认为false
/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
3.客户端浏览器访问验证
echo 192.168.80.100 www.kgc.com www.benet.com /etc/hosts
浏览器访问 http://www.kgc.com:8080/ 页面显示This is kgc page\! 浏览器访问 http://www.benet.com:8080/ 页面显示This is benet page\! --------------------------------------------------------------- HTTP 请求过程 1Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致连接器接受了该请求。 2因为引擎的默认虚拟主机是 www.kgc.com并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
3访问的路径为根路径URI 为空即空是 Web 程序的应用名也就是 context。此时请求找到 /usr/local/tomcat/webapps/kgc 目录解析 index.jsp 并返回。
## Tomcat 优化
bash Tomcat默认安装下的缺省配置并不适合生产环境它可能会频繁出现假死现象需要重启只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面分别为操作系统优化内核参数优化Tomcat配置文件参数优化Java虚拟机JVM调优。
##Tomcat 配置文件参数优化## 常用的优化相关参数如下 【redirectPort】如果某连接器支持的协议是HTTP当接收客户端发来的HTTPS请求时则转发至此属性定义的 8443 端口。
【maxThreads】Tomcat使用线程来处理接收的每个请求这个值表示Tomcat可创建的最大的线程数即支持的最大并发连接数默认值是 200。
【minSpareThreads】最小空闲线程数Tomcat 启动时的初始化的线程数表示即使没有人使用也开这么多空线程等待默认值是 10。
【maxSpareThreads】最大备用线程数一旦创建的线程超过这个值Tomcat就会关闭不再需要的socket线程。默认值是-1无限制。一般不需要指定。
【processorCache】进程缓冲器可以提升并发请求。默认值是200如果不做限制的话可以设置为-1一般采用maxThreads的值或者-1。
【URIEncoding】指定 Tomcat 容器的 URL 编码格式网站一般采用UTF-8作为默认编码。
【connnectionTimeout】网络连接超时单位毫秒设置为 0 表示永不超时这样设置有隐患的。通常默认 20000 毫秒就可以。
【enableLookups】是否反查域名以返回远程主机的主机名取值为true 或 false如果设置为 false则直接返回 IP 地址为了提高处理能力应设置为 false。
【disableUploadTimeout】上传时是否使用超时机制。应设置为 true。
【connectionUploadTimeout】上传超时时间毕竟文件上传可能需要消耗更多的时间这个根据你自己的业务需要自己调以使Servlet有较长的时间来完成它的执行需要与上一个参数一起配合使用才会生效。
【acceptCount】指定当所有可以使用的处理请求的线程数都被使用时可传入连接请求的最大队列长度超过这个数的请求将不予处理默认为 100 个。
【maxKeepAliveRequests】指定一个长连接的最大请求数。默认长连接是打开的设置为1时代表关闭长连接为-1时代表请求数无限制
【compression】是否对响应的数据进行GZIP压缩off表示禁止压缩on表示允许压缩文本将被压缩、force表示所有情况下都进行压缩默认值为 off压缩数据后可以有效的减少页面的大小一般可以减小 1/3 左右节省带宽。
【compressionMinSize】表示压缩响应的最小值只有当响应报文大小大于这个值的时候才会对报文进行压缩如果开启了压缩功能默认值就是 2048。
【compressableMimeType】压缩类型指定对哪些类型的文件进行数据压缩。
【noCompressionUserAgentsgozilla, traviata】对于以下的浏览器不启用压缩 #如果已经进行了动静分离处理静态页面和图片等数据就不需做 Tomcat 处理也就不要在 Tomcat 中配置压缩了。
以上是一些常用的配置参数还有好多其它的参数设置还可以继续深入的优化HTTP Connector 与 AJP Connector 的参数属性值可以参考官方文档的详细说明进行学习。
vim /usr/local/tomcat/conf/server.xml ...... Connector port8080 protocolHTTP/11.1 connectionTimeout20000 redirectPort8443 --71行--插入 minSpareThreads50 enableLookupsfalse disableUploadTimeouttrue acceptCount300 maxThreads500 processorCache500 URIEncodingUTF-8 maxKeepAliveRequests100 compressionon compressionMinSize2048 compressableMimeTypetext/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png/ ## Tomcat多实例部署
bash 1.安装好 jdk
2.安装 tomcat
cd /opt tar xf apache-tomcat-9.0.16.tar.gz mkdir /usr/local/tomcat mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1 cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
3.配置 tomcat 环境变量
vim /etc/profile.d/tomcat.sh #tomcat1 export CATALINA_HOME1/usr/local/tomcat/tomcat1 export CATALINA_BASE1/usr/local/tomcat/tomcat1 export TOMCAT_HOME1/usr/local/tomcat/tomcat1
#tomcat2 export CATALINA_HOME2/usr/local/tomcat/tomcat2 export CATALINA_BASE2/usr/local/tomcat/tomcat2 export TOMCAT_HOME2/usr/local/tomcat/tomcat2
source /etc/profile.d/tomcat.sh
4.修改 tomcat2 中的 server.xml 文件要求各 tomcat 实例配置不能有重复的端口号
vim /usr/local/tomcat/tomcat2/conf/server.xml Server port8006 shutdownSHUTDOWN #22行修改Server prot默认为8005 - 修改为8006 Connector port8081 protocolHTTP/1.1 #69行修改Connector portHTTP/1.1 默认为8080 - 修改为8081 Connector port8010 protocolAJP/1.3 redirectPort8443 / #116行修改Connector port AJP/1.3默认为8009 - 修改为8010 --------------------------------------------------------------- 第一个连接器默认监听8080端口负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时使用的就是这个连接器。
第二个连接器默认监听8009端口AJP端口即容器使用如Apache能通过AJP协议访问Tomcat的8009端口。
5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh --------------------------------------------------------------- Start Script for the CATALINA Server --------------------------------------------------------------- ##添加以下内容 export CATALINA_BASE$CATALINA_BASE1 export CATALINA_HOME$CATALINA_HOME1 export TOMCAT_HOME$TOMCAT_HOME1 vim /usr/local/tomcat/tomcat1/bin/shutdown.sh --------------------------------------------------------------- Stop script for the CATALINA Server --------------------------------------------------------------- export CATALINA_BASE$CATALINA_BASE1 export CATALINA_HOME$CATALINA_HOME1 export TOMCAT_HOME$TOMCAT_HOME1 vim /usr/local/tomcat/tomcat2/bin/startup.sh --------------------------------------------------------------- Start Script for the CATALINA Server --------------------------------------------------------------- export CATALINA_BASE$CATALINA_BASE2 export CATALINA_HOME$CATALINA_HOME2 export TOMCAT_HOME$TOMCAT_HOME2 vim /usr/local/tomcat/tomcat2/bin/shutdown.sh --------------------------------------------------------------- Stop script for the CATALINA Server --------------------------------------------------------------- export CATALINA_BASE$CATALINA_BASE2 export CATALINA_HOME$CATALINA_HOME2 export TOMCAT_HOME$TOMCAT_HOME2
6.启动各 tomcat 中的 /bin/startup.sh
/usr/local/tomcat/tomcat1/bin/startup.sh /usr/local/tomcat/tomcat2/bin/startup.sh
netstat -natp | grep java
7.浏览器访问测试
http://192.168.80.101:8080 http://192.168.80.101:8081