简介

Tomcat环境部署

Tomcat 是 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 软件会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些及个人共同开发而成。

Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 这些 Web 服务器一样,具有处理 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。

 

Tomcat核心组件

Web 容器:完成 Web 服务器的功能。

Servlet 容器:名字为 catalina,用于处理 Servlet 代码。

JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。

因此 Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。

Web容器

web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以有多个容器。

什么是 servlet?

Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

什么是 JSP?

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。

标签通常以 <% 开头,以 %> 结束。

JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。

JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

Container 结构分析

每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器:

4个子容器的作用分别是:

Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;

Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;

Context:代表一个 Web 应用,包含多个 Servlet 封装器;

Wrer:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。

Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。 容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 封装器。

Tomcat 请求过程:

用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;

Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;

请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。

执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。

这里选择手动搭建tomcat环境.JDK选择yum仓库的openJDK,大家也可以在官网下载RPM包安装 http://www.oracle.com/tecwork/java/javase/downloads/jdk8-downloads-2133151.html

 

一:安装JDK

1:检查yum仓库中openjdk的版本

[root@localhost ~]# yum list |grep ^java

 

这里选择安装java-1.8.0-openjdk

[root@localhost ~]# yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y

 

2:查看Java-Openjdk是否安装成功

[root@localhost ~]# java -version

 

显示已经安装成功

二:安装配置Tomcat

1:检查yum仓库中tomcat的相关包

[root@localhost ~]# yum list |grep tomcat

 

[root@localhost ~]# yum install tomcat -y 直接选择在线安装

也可以在官网下载源码包 wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.83/bin/apache-tomcat-8.5.83.tar.gz

如果是下载源码安装就需要配置:配置 Tomcat 环境变量配置 Tomcat pid 文件和相关参数配置 Tomcat 服务脚本

Tomcat 环境变量

[root@localhost ~]# wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.83/bin/apache-tomcat-8.5.83.tar.gz

[root@localhost ~]# tar xf apache-tomcat-8.5.83.tar.gz -C /usr/local

[root@localhost ~]# cd /usr/local/

[root@localhost java]# ln -sv apache-tomcat-8.5.83/ tomcat

‘tomcat’ -> ‘apache-tomcat-8.5.83/’

配置变量:

[root@localhost local]# vim /etc/profile.d/tomcat.sh

# TOMCAT

export CATALINA_HOME=/usr/local/tomcat

# PATH

export PATH=$PATH:$CATALINA_HOME

配置 Tomcat pid 文件和相关参数

[root@localhost local]# vim /usr/local/tomcat/bin/setenv.sh

# add tomcat pid

CATALINA_PID="$CATALINA_HOME/tomcat.pid"

# add java opts

JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=512m -Xms512M -Xmx512M -XX:MaxNewSize=256m"

配置 Tomcat 服务脚本

[root@localhost]# vim /usr/lib/systemd/system/tomcat.service

[Unit]

Description=Apache Tomcat Web Application

ContainerAfter=syslog.target network.target

[Service]

Type=forking

PIDFile=/usr/local/tomcat/tomcat.pid

ExecStart=/usr/local/tomcat/bin/catalina.sh start

ExecReload=/bin/kill -s HUP MAINPID

ExecStop=/bin/kill−s QUIT MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

启动服务:

[root@localhost]# systemctl daemon-reload

[root@localhost]# systemctl status tomcat.service

[root@localhost]# systemctl enable tomcat.service

[root@localhost]# systemctl is-enabled tomcat.service

enabled

[root@localhost]# systemctl start tomcat.service

# 查看 Tomcat 开启端口状态

[root@localhost ~]# netstat -lnutp | grep :8080

tcp6 0 0 :::8080 :::* LISTEN 3060/java

2:这里我选择的是在线安装:

[root@localhost ~]# yum install tomcat -y

 

[root@localhost ~]# systemctl start tomcat 启动tomcat

 


 

[root@localhost ~]# rpm -ql tomcat 查看yunm安装的tomcat生成文件的路径

 

tomcat默认端口是8080,接下来浏览输入地址:http://ip:8080/。这个页面暂时是无法访问

由于tomcat的web页面是需要安装插件的,这里继续用 tomcat-webapps 和 tomcat-admin-webapps 两个插件包

[root@localhost ~]# yum install tomcat-webapps tomcat-admin-webapps -y

 

[root@localhost ~]# systemctl restart tomcat 重启服务

在浏览器中输入http://10.0.0.101:8080/

 

3:提升 Tomcat 启动速度

●tomcat 启动慢的原因是随机数产生遭到阻塞,遭到阻塞的原因是 熵池大小 。

●/dev/random:阻塞型,读取它就会产生随机数据,但该数据取决于熵池噪声,当熵池空了,对/dev/random 的读操作也将会被阻塞。

●/dev/urandom:非阻塞的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

# 查看是否有足够的熵来用于产生随机数

[root@localhost ~]# cat /proc/sys/kernel/random/entropy_avail

1418

# 安装rngd服务(熵服务,增大熵池)

[root@localhost ~]# yum install rng-tools

# 开机自启动服务

[root@localhost ~]# systemctl enable --now rngd

# 再次查看

[root@localhost ~]# cat /proc/sys/kernel/random/entropy_avail

2835

 

我们也可以在编辑/etc/tomcat/tomcat-users.xml配置文件来查看跟详细的状态页面,但是这种配置不要使用在生产环境中

[root@localhost ~]#vim /etc/tomcat/tomcat-users.xml

# 添加如下内容

[root@localhost local]# vim /etc/tomcat/tomcat-users.xml

<role rolename="admin-gui"/>

<role rolename="admin-script"/>

<role rolename="manager-gui"/>

<role rolename="manager-jmx"/>

<role rolename="manager-script"/>

<role rolename="manager-status"/>

<user username="tomcat" pass="tomcat" roles="admin-gui,manager-gui,managerjmx,manager-script,manager-status,admin-script"/>

# 允许访问 Manager App

[root@localhost local]# vim /var/lib/tomcat/webapps/host-manager/META-INF/context.xml

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />

# 允许访问 Host Manager

[root@localhost local]# vim /var/lib/tomcat/webapps/manager/META-INF/context.xml

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />

# 重启 Tomcat 服务

[root@node01 local]# systemctl restart tomcat

4:Tomcat 虚拟主机配置

修改 server.xml

[root@localhost ~]# systemctl stop tomcat

[root@localhost /]# cd /etc/tomcat

[root@localhost ]# cp server.xml{,.bak}

# 添加虚拟主机配置

[root@localhost]# vim server.xml

</Host>

<Host name="www.a.com" appBase="webapps"

unpackWARs="true" autoDeploy="true">

<Context docBase="/web/a" path="" reloadable="flase" />

<Valve className="org.apache.catalina.valves.AccessLogValve"

directory="logs"

prefix="www.a.com_access_log" suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

</Host>

<Host name="www.b.com" appBase="webapps"

unpackWARs="true" autoDeploy="true">

<Context docBase="/web/b" path="" reloadable="flase" />

<Valve className="org.apache.catalina.valves.AccessLogValve"

directory="logs"

prefix="www.b.com_access_log" suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

</Host>

虚拟主机目录及文件准备

[root@localhost]# mkdir -p /web/{a,b}

[root@localhost]# vim /web/a/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP a page</title>

</head>

<body>

<% out.println("Welocome to test site,http://www.a.com");%>

</body>

</html>

[root@localhost]# vim /web/b/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP a page</title>

</head>

<body>

<% out.println("Welocome to test site,http://www.b.com");%>

</body>

</html>

配置 hosts 解析

[root@localhost]# vim /etc/hosts

# 添加:

10.0.0.101 www.a.com www.b.com

重启 Tomcat

[root@localhost]# systemctl restart tomcat.service

测试

[root@localhost]# curl www.a.com

5: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】压缩类型,指定对哪些类型的文件进行数据压缩。

【noCompressionUserAgents="gozilla, traviata"】对于以下的浏览器,不启用压缩

胜象大百科