1.Tomcat用来干嘛的
tomcat装载你的javaweb程序,可以称它为web容器,你的jsp/servlet程序需要运行在Web容器上,Web容器有很多种,JBoss、WebLogic等等,Tomcat是其中一种。tomcat是一种web服务器,也可以称作运行在服务器(物理意义上的计算机)上的一种软件包。用来对服务器上的HTML文档提供访问权限控制。
2.Tomcat核心组件
- 通常意义上的web服务接收请求后,只是单纯的响应静态资源,如HTML文件,图片等,不能再后端进行一定的护理操作,Tomcat是Apache下的一个子项目,它具备Web服务器的所有功能,不仅可以监听坚守请求并响应静态资源,而且可在后端运行特定规范的Java代码Servlet,同时将执行的结果以HTML代码的形式写回客户端。
- Tomcat其中的核心组件有三个
- Web容器:完成Web服务器的功能
- Servlet容器:由catalina的脚本来处理Servlet代码
- JSP容器:将JSP动态网页翻译成Servlet代码
3.Tomcat组件详细介绍
- Web容器
负责Web服务的TCP/IP、HTTP等协议响应、处理 - JSP容器
是一种动态网页开发技术,它使用JSP标签在HTML网页中插入Java代码,主要用于时间 java、web应用程序的用户界面部分,JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态的创建网页,容器内提供多个以index.html为结尾的Java前端页面展示,而index.jsp中有很多HTML标签,HTML标签中会嵌套很多Java代码,这些代码最终会被翻译为Servlet代码(JSP容器本身并不具备解析与分析代码的功能,所以交给Servlet容器) - servlet容器
servlet容器翻译index.jsp中这些java代码,执行一些servlet任务操作,比如数据库交互、加密、人脸识别,处理完成后,将这些数据返回给JSP,通过jsp中的index.jsp展示出来。当进行动态交互时,会将JSP传递过来的代码翻译为servlet,由catalina脚本处理。catalina实际处理的是servlet代码,servlet代码是由java编写的。
4.Tomcat处理请求过程
用户请求被发送到本机的8080端口,而tomcat服务需要service支持,并且需要connector监听、连接,所以请求被connector监听,接收请求之后会交给container中的engine进行处理,engine(引擎)是作为容器运动的动力核心,基于引擎支撑,容器中会抛出很多host虚拟主机,这些虚拟主机中会有很多context,servlet处理完全后会返回给contexxt,context返回给engine引擎,engine返回给端口,端口将页面展现给用户。 connector
[root@localhost opt]
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" //毫秒
redirectPort="8443" /> //ssl重定向、映射443
5. Tomcat部署
下载并安装JDK(编译器)jdk可以把java源码文件转换为执行文件,在部署Tomcat之前必须先安装好jdk,因为jdk是Tomcat运行的必要环境,且关闭防火墙和核心防护
[root@localhost opt]
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm rh
[root@localhost ~]
[root@localhost opt]
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bim:$PATH
[root@localhost opt]
[root@localhost bin]
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@localhost opt]
[root@localhost opt]
[root@localhost ~]
apache-tomcat-9.0.16
bin //存放启动和关闭tomcat脚本,比较常用的是Catalina.sh、startup.sh、shutdown.sh三个脚本
conf //存放启动tomcat服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml四个文件
CONTRIBUTING.md
lib //存放tomcat服务器的jar包,一般不做任何改动,除非连接第三方服务,比如redis
LICENSE
logs //存放Tomcat日志
NOTICE
README.md
RELEASE-NOTES
RUNNING.txt
temp //存放Tomcat运行时产生的文件
webapps //存放项目资源的目录
work //Tomcat工作目录,一般清楚Tomcat缓存的时候会用到
[root@localhost opt]
[root@localhost opt]
[root@localhost opt]
[root@localhost opt]
5.1优化Tomcat启动速度
[root@localhost opt]
需要重启服务
[root@localhost opt]
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost opt]
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
6.Tomcat 虚拟主机
添加两个域名访问到不同的项目内容
[root@localhost ~]
192.168.20.11 www.jerry.com www.tom.com
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
- Host name:主机名
- appBase:tomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webapps
- unpackWARs:tomcat再webaps文件夹中发现awr包文件时,是否自动将其解压
- autodeploy:设为true,则web。sml发生变化时,tomcat自动重新部署程序,实现则会个功能必须允许后台处理
- xmlValidation:是否开启对xml文件的验证
- xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,标识对web.xml文件执行有效性检验
- docBase:web应用的目录
- path:设置访问的URI为web应用的根目录(uri的路径)""表示默认,加载系统中自带的类文件
- reloadable:是否再程序有改动的时候重新载入
[root@localhost ~]
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]
tcp6 0 0 :::8080 :::* LISTEN 16299/java
tcp6 0 0 ::1:37550 ::1:8080 TIME_WAIT -
7.Tomcat优化
- maxTHreads:表示Tomcat可创建的最大的线程数,默认为200
- minSpareThreads:Tomcat最小空闲线程数,表示即使没有人使用也开这么多空线程等待,默认是10
- maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的- - -socket线程,默认值是-1(表示无限制,一般不用指定)
- URIEncoding:指定Tomcat容器的URL编码格式
- connnectionTimeout:网络连接超时,以毫秒为单位,默认20000
- enableLookups:是否反查域名
- disableUploadTimeout:上传时是否使用超时机制,应设置为true
- connectionUploadTimeout:上传超时时间
- addeptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个
- compression:是否对响应的数据进行gzip压缩,压缩可以有效减少页面的大小,节省带宽
- compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启压缩默认为2048
- compressabldMimeType:指定对哪些类型的文件进行数据压缩
- noCompressionUserAgents=“gozilla,traviata” :对于一下的浏览器,不启动压缩
69 <Connector port="8080" protocol="HTTP/1.1"
70 connectionTimeout="20000"
71 redirectPort="8443"
72 minSpareThreads="50"
73 enableLookups="false"
74 disableUploadTimeout="true" //上传超时
75 acceptCount="300" //队列
76 maxThreads="500"
77 processorCache="500" //系统可以缓存对象的数量
78 URIEncoding="UTF-8"
79 compression="on" //压缩
80 compressionMinsize="2048"
81 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif, image/jpg,image/png"
82 />
8.nginx+tomcat
如何将前端收到的动态请求交转给后端多个tomcat处理 Tomcat1
[root@localhost ~]
[root@localhost ~]
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
动态页面 1,http://www.test1.com
</body>
</html>
Tomcat2与Tomcat1一样
[root@localhost ~]
[root@localhost webapps]
[root@localhost webapps]
docs examples host-manager manager ROOT test
[root@localhost webapps]
[root@localhost webapps]
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
[root@localhost test]
[root@localhost test]
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost test]
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
动态页面 2,http://www.test2.com
</body>
</html>
Nginx
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 82061/nginx: master
通过win10访问
总结
Container组件,是由一个Engine组件组成,组件结构如图1-3所示。 其中,Host对应相应的请求链接,Context对应相应的Web App,Wrapper对应相应的Servlet。 Tomcat只是一个服务,他的connector组件负责的监听即8080端口,交互也都由connector来完成,
|