Tomcat介绍
自从JSP发布之后,推出了各式各样的JSP引擎,Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet,这样Tomcat就诞生了。
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache, Sun和其他一些公司及个人共同开发而成。其被JavaWorld杂志的编辑选为2001年度最具创新的Java产品,同时它又是sun公司官方推荐的Servlet和JSP容器,因此其越来越多的受到软件公司和开发人员的喜爱。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现, Tomcat 5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
Tomcat核心组件
通常意义上的Web服务器接受请求后,只是单纯地响应静态资源,如HTML文件,图片文件等,不能在后端进行一定的处理操作。Tomcat是Apache下的一个子项目,它具备Web服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的Java代码Servlet,同时将执行的结果以HTML代码的形式写回客户端。
Tomcat由一系列的组件构成,其中核心的组件有三个:
- Web容器:完成Web服务器的功能。
- Servlet容器:名字为catalina,用于处理Servlet代码。
- JSP容器:用于将JSP动态网页翻译成Servlet代码。
Tomcat处理请求过程
1)请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/11.1Connector获得。
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应。
3) Engine获得请求localhost/yy/index.JSP匹配它所拥有的所有虚拟主机Host.
4) Engine匹配到名为localhost的Host,即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机。
5) localhost Host获得请求/yy/index.JSP,匹配它所拥有的所有Context。
6) Host匹配到路径为/yy的Context,如果匹配不到,就把该请求交给路径名为Context去处理。
7) path=" /yy"的Context获得请求/index.JSP,在它的mapping table中寻找对应的Servlet。
8) Context匹配到URL PATTERN为*.JSP的Servlet,对应于JSPServlet类。
9)构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JSPServlet的doGet()或doPost()方法。
10) Context把执行完了之后的HttpServletResponse对象返回给Host,
11) Host把HttpServletResponse对象返回给Engine。
12) Engine把HttpServletResponse对象返回给Connector。
13) Connector把HttpServletResponse对象返回给客户browser。
案列实施
JDK
在部署Tomcat之前必须安装好jdk,因为jdk是Tomcat运行的必要环境.而jdk的安装也相对比较简单,版本有很多,这里我们选择rpm版本即可!
##将jdk软件包上传到/root目录下安装jdk
[root@localhost -]# rpm-ivh jdk-8u201-linux-x64.rpm
##设置JDK环境变量
[root@localhost ~]# vi /etc/profile ##下面参数新增#
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/ib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost ~]# source /etc/profile
[root@localhost ~]#java -version ###查看java版本##
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
安装启动Tomcat
##执行下面的命令, 从 Tomcat 官网下载 apache-tomcat-9.0.16.tar.gz 稳定版本
##将安装包apache-tomcat-9.0.16.tar.gz上传到/root目录下
##将安装包移动Tomcat目录到/usr/local下
[root@localhost ~]# tar xzvf apache-tomcat-9.0.16.tar.gz
[root@localhost ~]# mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
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.
##浏览器中输入http://192.168.100.42:8080 ##访问时会出现Tomcat的默认主页
优化tomcat启动速度
##第一次启动查看日志会发现 Tomcat 启动很慢,默认情况下都需要几十秒,可以修改jdk参数进行改。
[root@localhost ~]# vi /usr/java/jdk1.8.0 201-amd64jre/lib/security/java.security
securerandom.source=file:/dev/urandom
##关闭tomcat
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
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
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
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.
虚拟主机配置
可能有时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat服务,这样会消耗太多的系统资源。此时,就需要使用到Tomcat虚拟主机。例如:
现在新增两个域名 www.51xit.top 和www.52xit.top ,希望通过这两个域名访问到不同的项目内容。
执行下面的命令, 可以创建 51xit 和 52xit 项目目录和文件。
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/51xit
[root@localhost ~]# echo "This is 51xit page\!" > /usr/local/tomcat/webapps/51xit/index.jsp
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/52xit
[root@localhost ~]# echo "This is 52xit page\!" > /usr/local/tomcat/webapps/52xit/index.jsp
##修改Tomcat主配置文件
[root@localhost ~]# vi /usr/local/tomcat/conf/server.xml
<Host name="www.51xit.top" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false"
xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/51xit"
path=""reloadable="true" />
</Host>
<Host name="www.52xit.top" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true"xmlValidation="false"
xmlNamespaceAware= "false">
<Context docBase="/usr/local/tomcat/webapps/52xit"
path=""reloadable="true" />
</Host>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
更改hosts文件
宿主机C:\Windows\System32\drivers\etc 改hosts文件
192.168.100.42 www.51xit.top www.52xit.top
测试
1、使用浏览器访问 http://www.51xit.top:8080 页面显示This is 51xit page!
1、使用浏览器访问 http://www.52xit.top:8080 页面显示This is 52xit page!
Tomcat优化
Tomcat的缺省配置并不适合生产环境,它会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要有三方面,分为操作系统优化(内核参数优化) , Tomcat配置文件参数优化, Java虚拟机(JVM)调优。
关于 Tomcat 主配置文件 server.xml 里面很多默认的配置项,但并不能满足业务需求,常用的优化相关参数如下
[maxThreads] Tomcat 使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,默认值是200。
[minSpareThreads]最小空闲线程数, Tomcat启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10
[maxSpareThreads]最大备用线程数,一旦创建的线程超过这个值, Tomcat就会关闭不再需要的socket线程。默认值是-1 (无限制) 。一般不需要指定
[URIEncoding]指定Tomcat容器的URL编码格式,语言编码格式这块倒不如其它Web服务器软件配置方便,需要分别指定
[connnectionTimeout]网络连接超时,单位:毫秒,设置为0表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以
[enableLookups]是否反查域名,以返回远程主机的主机名,取值为: true 或 false ,如果设置为 false , 则直接返回 IP 地址,为了提高处理能力, 应设置为false.
[disableUploadTimeout]上传时是否使用超时机制。应设置为true.
[connectionUploadTimeout]上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调, 以使 Servlet 有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效
[acceptCount]指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度, 超过这个数的请求将不予处理, 默认为 100 个。
[compression]是否对响应的数据进行GZIP压缩, off: 表示禁止压缩; on: 表示允许压缩(文本将被压缩) 、force: 表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小, 一般可以减小 1/3 左右,节省带宽
[compressionMinSize]表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048
[compressableMimeType]压缩类型,指定对哪些类型的文件进行数据压缩。
[noCompressionUserAgents="gozilla, traviata"]对于以下的浏览器,不启用压缩