第26章 Linux操作系统上轻松搭建企业级Tomcat Web服务器

1,383 阅读3分钟

Tomcat简介

Tomcat 是一个开源的Web应用服务器,由Apache软件基金会维护,是Jakarta项目的一部分。它主要作为Servlet容器使用,支持Servlet和JSP(JavaServer Pages)技术。Tomcat可以独立运行,作为Web服务器处理动态内容,同时也能与Apache或Nginx等传统Web服务器配合,前者处理静态内容,后者处理动态请求。

主要特点:

  • 免费与开源:Tomcat是免费的,基于Apache许可证2.0发布,这意味着任何人都可以使用、修改和分发它。
  • 支持Servlet和JSP:Tomcat实现了Java EE(现称Jakarta EE)的Servlet和JSP规范,允许开发者创建动态Web内容。
  • 轻量级:相较于其他全功能应用服务器,如WebLogic或WebSphere,Tomcat更轻量级,启动更快,占用资源更少。
  • 灵活性:Tomcat可以独立运行,也可以与其他Web服务器集成,如通过mod_jk或mod_proxy与Apache集成。
  • 跨平台:由于是用Java编写的,Tomcat可以在多种操作系统上运行,包括Windows、Linux、Mac OS等。
  • 易于配置:Tomcat的配置主要通过XML文件完成,提供了灵活的配置选项,便于调整以适应不同的需求。
  • 活跃的社区支持:作为Apache项目的一部分,Tomcat拥有一个庞大的开发者和用户社区,提供了丰富的文档、教程和技术支持。

适用场景:

  • 开发与测试:Tomcat因其轻量级特性和易用性,是开发和测试JSP和Servlet的理想选择。
  • 中小型项目:对于并发用户数不是特别高的中小型项目,Tomcat可以提供足够的性能和稳定性。
  • 教育用途:Tomcat常用于教学环境,帮助学生理解和实践Java Web开发技术。

任务准备

  • 安装好JDK 1.8+:确保JDK已正确安装并配置。

任务描述

某企业想架设一台Tomcat Web服务器,通过Tomat控制台部署Web应用程序。

任务实施

1、apache官网tomcat.apache.org/

下载apache-tomcat-9.0.29.tar.gz

2、解压tomcat至/opt目录

[root@localhost /]# tar -zxvf  apache-tomcat-9.0.29.tar.gz -C /opt

3、验证JDK是否安装成功。如果未安装JDK请参照本章项目实训一安装和配置JDK即可。

[root@localhost /]# java -version

(1)、修改catalina.sh,在第二行添加如下内容:

4、配置Tomcat加大tomcat虚拟机内存

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m"

备注说明:
-server参数:表示以服务模式启动,启动速度会稍微慢一点,但性能会高很多。

不加这个参数,默认是以客户端模式启动。
java.awt.headless=true参数:与图形操作有关,适用于linux系统。

如生成验证码,含义是当前使用的是没有安装图安装图形界面的服务器,
应用中如果获取系统显示有关参数会抛异常。
-XX:PermSize设置永久代初始值,默认是物理内存的1/64。java1.8以后不起作用了,

改成了元空间,对应参数-XX:MetaspaceSize
-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,

同时GC会对该值进行调整:如果释放了大量的空间,
就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。java1.8以后不起作用了,

改成了元空间,对应参数 -XX:MaxMetaspaceSize
-Xms、-Xmx:JVM内存设置(堆内存)。
这两个参数最好设置成一样的,避免上下文切换消耗资源。JDK8+版本以上,

PermSize MaxPermSize这两个参数没用了。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path oom时打印dump文件到指定路径

(2)、修改http端口号为80,tomcat默认是8080

可以修改apache-tomcat-9.0.29/conf/server.xml文件 

(3)、优化tomcat 并发线程数maxThreads、地址编码URIEncoding="UTF-8"、

启用压缩compression="on"其他参数视具体tomcat版本定

参照如下:根据实际情况调整,不能直接复制

<Connector
port="80"   
maxThreads="1000"              
minSpareThreads="100"                            
acceptCount="5000"              
disableUploadTimeout="true"             
connectionTimeout="30000"              
URIEncoding="UTF-8"                          
redirectPort="8443"              
compression="on"             
compressionMinSize="1024"
useSendfile="false"
noCompressionUserAgents="gozilla, traviata"           
compressibleMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"/>

备注说明:

maxThreads:最大线程数,默认150。增大值避免队列请求过多,导致响应缓慢。

minSpareThreads:最小空闲线程数。

acceptCount:当处理请求超过此值时,将后来请求放到队列中等待。

disableUploadTimeout:禁用上传超时时间

connectionTimeout:连接超时,单位毫秒,0代表不限制

URIEncoding:URI地址编码使用UTF-8

enableLookups:关闭dns解析,提高响应时间

compression:启用压缩功能

compressionMinSize:最小压缩大小,单位Byte

compressibleMimeType :压缩的文件类型

noCompressionUserAgents: 对 gozilla, traviata 这两个浏览器不启用压缩。

useSendfile:默认为true。如果启用此功能,则发送会优先于压缩。

[root@localhost /]# vi /opt/apache-tomcat-9.0.29/conf/server.xml

修改apache-tomcat-9.0.29/conf/tomcat-users.xml替换成如下内容:

5、去掉,修改配置tomcat管理员(admin)控制台

<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui"/>
[root@localhost conf]# vim tomcat-users.xml

Tomcat的bin目录执行启动(startup.sh)和停止(shutdown.sh)命令;

如果是使用./Catalina.sh run 启动服务,对应可以使用ctrl+C停止服务。

6、启动/停止tomcat

[root@localhost bin]# ./startup.sh  --后台运行

[root@localhost bin]# ./catalina.sh run  --控制台打印日志,方便调试,使用ctrl+C停止tomcat

[root@localhost bin]# ./shutdown.sh --关闭tomcat服务器

7、访问tomcat管理控制台:前提确保tomcat已正常运行,可以通过ps -ef|grep tomcat查看进程。

如果是端口冲突,使用netstat -tnlp查看端口情况

http://localhost:80/manager/html

8、如果远程操作tomcat控制台,则需要修改

webapps/manager/META-INF/目录下context.xml文件,不是conf/目录下的context.xml文件,

我们将里面的内容注释掉这段 

<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1|d+.d+.d+.d+" />
  <Manager sessionAttributeValueClassNameFilter="java.lang.(?:Boolean|Integer|Long|Number|String)|org.apache.catalina.filters.CsrfPreventionFilter$LruCache(?:$1)?|java.util.(?:Linked)?HashMap"/>
-->
</Context>

保存,然后重启tomcat,重新访问manager app页面就可以实现远程操作控制台了。

实验实训

Tomcat安装并实现开机自启

1、安装Tomat步骤同上使用压缩包安装的模式

2、设置开机自启方法

2.1.创建setenv.sh环境变量文件

进入到/opt/apache-tomcat-9.0.52\bin目录下,新建setenv.sh文件

vim setenv.sh

写入的内容如下:注意修改对应的tomcat路径与自己服务器一致

export CATALINA_HOME=/opt/apache-tomcat-9.0.52
export CATALINA_BASE=/opt/apache-tomcat-9.0.52
#设置Tomcat的PID文件
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
#添加JVM选项
JAVA_OPTS="-server -Xms2048M -Xmx2048M"

2.2.编写tomcat.service文件

在/usr/lib/systemd/system路径下添加tomcat.service文件。
注意:文件中目录路径必须是绝对路径

vim /usr/lib/systemd/system/tomcat.service

内容如下:

[Unit]
Description=Tomcat9
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/apache-tomcat-9.0.52/tomcat.pid
ExecStart=/opt/apache-tomcat-9.0.52/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#说明

[unit]配置了服务的描述,规定了在network启动之后执行,
[service]配置服务的pid,服务的启动,停止,重启
[install]配置了使用用户

2.3 设置服务开机自启

systemctl enable tomcat

2.4 重启服务器验证是否有效实现开机自启

systemctl status tomcat

出现active(running)字样说明成功