tomcat

1.什么是Tomcat?

简单理解:Tomcat就是一个"Java网站运行容器"。你写的JSP页面、Servlet代码,需要放在Tomcat里才能被其他人访问。它免费、开源,是学习Java Web开发的首选服务器。

2.Tomcat安装

2.1 检查并安装Java环境

Tomcat是用Java写的,必须先装JDK。打开终端,先看看系统有没有Java:

java -version

如果显示"command not found"或者版本低于11,需要安装:

sudo dnf install -y java-17-openjdk java-17-openjdk-devel

装完再验证一下:

java -version

javac -version

出现版本信息就说明Java准备好了。

2.2 下载Tomcat

去Tomcat官网找到下载链接。把软件放在/目录下

cd /

sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.34/bin/apache-tomcat-10.1.34.tar.gz

下载完成后解压:

sudo tar -zxvf apache-tomcat-10.1.34.tar.gz

为了方便管理,改个简短的名字:

sudo mv apache-tomcat-10.1.34 tomcat10

2.3 配置环境变量

编辑当前用户的bash配置文件 :

vi ~/.bashrc

在文件末尾加上:

export CATALINA_HOME=/tomcat10

export PATH=PATH:CATALINA_HOME/bin

保存退出,让配置生效:

source ~/.bashrc

2.4 启动Tomcat

进入Tomcat的bin目录:

cd /tomcat10/bin\

启动服务:

./startup.sh

看到"Tomcat started"就说明成功了。

这时可以在浏览器输入:http://你的服务器IP:8080。如果是本机,输入http://localhost:8080

看到那只猫的欢迎页面了吗?恭喜,Tomcat已经跑起来了!

2.5 防火墙设置

RHEL 9默认防火墙是开启的,需要放行8080端口:

sudo firewall-cmd --permanent --add-port=8080/tcp

sudo firewall-cmd --reload

查看端口是否开放:

sudo firewall-cmd --list-ports

这时候再用浏览器访问,应该就能看到Tomcat首页了。

2.6 创建自己的第一个Web应用

/tomcat10/webapps目录下新建一个文件夹,比如myapp

cd /tomcat10/webapps

sudo mkdir myapp

在myapp里建一个最简单的网页:

cd myapp

sudo vi index.html

随便写点内容:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>我的第一个Tomcat应用</title>

</head>

<body>

<h1>Hello Tomcat on RHEL 9!</h1>

<p>2026年,马年大吉!</p>

</body>

</html>

保存文件。不用重启Tomcat,浏览器访问http://你的IP:8080/myapp/,就能看到你写的页面了。

2.7 可能遇到的坑及解决方法

  • 端口被占用 :如果8080被其他程序占了,可以修改/tomcat10/conf/server.xml,把8080改成其他端口(比如8081),然后重启。

  • 启动时权限报错:解压后的Tomcat文件属主是root,如果用普通用户启动会报错。可以修改目录属主:

sudo chown -R 你的用户名:你的用户组 /tomcat10

  • Manager页面403 :默认不允许远程访问管理界面。如果需要远程管理,编辑conf/tomcat-users.xml,添加用户和角色,同时编辑webapps/manager/META-INF/context.xml,把IP限制注释掉(生产环境不推荐)。

2.8 常用命令

  • 启动:/tomcat10/bin/startup.sh
  • 关闭:/tomcat10/bin/shutdown.sh
  • 查看日志:tail -f /tomcat10/logs/catalina.out
  • 重启:先关闭,再启动

3.Tomcat + Memcached 双机集群会话共享实验

两台Tomcat + 两台Memcached,互相备份,任意一台宕机,Session零丢失。

实验环境

主机名 IP地址 角色
RS1 172.25.254.10 Tomcat节点1 + Memcached节点1
RS2 172.25.254.20 Tomcat节点2 + Memcached节点2

3.1 准备Tomcat的Session共享JAR包

RS1上操作,将所需JAR包解压并分发到两台服务器的Tomcat库目录:

在RS1上

root@RS1 \~\]# unzip jar.zip -d jar \[root@RS1 \~\]# cd jar/ 复制到本地Tomcat \[root@RS1 jar\]# cp \* /usr/local/tomcat/lib/ 复制到RS2的Tomcat \[root@RS1 jar\]# scp \* root@172.25.254.20:/usr/local/tomcat/lib/ #### 3.2 安装并配置Memcached 两台服务器都要安装: RS1和RS2都要执行 \[root@RS1 \~\]# dnf install memcached -y \[root@RS2 \~\]# dnf install memcached -y 修改Memcached配置文件,允许外网访问: \[root@RS1 \~\]# vim /etc/sysconfig/memcached \[root@RS2 \~\]# vim /etc/sysconfig/memcached 内容如下: PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 0.0.0.0,::1" 启动Memcached并设置开机自启: \[root@RS1 \~\]# systemctl start memcached \[root@RS1 \~\]# systemctl enable memcached \[root@RS2 \~\]# systemctl start memcached \[root@RS2 \~\]# systemctl enable memcached 验证服务是否正常监听: \[root@RS1 \~\]# netstat -antluple \| grep memcached tcp 0 0 0.0.0.0:11211 0.0.0.0:\* LISTEN 988 142615 35756/memcached tcp6 0 0 ::1:11211 :::\* LISTEN 988 142616 35756/memcached 防火墙放行Memcached端口(两台都做): \[root@RS1 \~\]# firewall-cmd --permanent --add-port=11211/tcp \[root@RS1 \~\]# firewall-cmd --reload \[root@RS2 \~\]# firewall-cmd --permanent --add-port=11211/tcp \[root@RS2 \~\]# firewall-cmd --reload #### 3.3 配置Tomcat的Session共享 ##### RS1的配置 \[root@RS1 \~\]# vim /usr/local/tomcat/conf/context.xml 在``标签内添加: \ ##### RS2的配置 \[root@RS2 \~\]# vim /usr/local/tomcat/conf/context.xml 在``标签内添加: \ #### 3.4 重启服务 两台服务器分别重启Tomcat: \[root@RS1 \~\]# systemctl restart tomcat.service \[root@RS2 \~\]# systemctl restart tomcat.service #### 3.5 验证Session共享与故障转移 ##### 3.5.1 准备测试页面 在RS1的`/usr/local/tomcat/webapps/ROOT/`下创建`session.jsp`: \<%@ page contentType="text/html;charset=UTF-8" language="java" %\> \ \ \双机Session共享测试\ \ \ \Tomcat节点:\<%= request.getLocalAddr() %\>:\<%= request.getLocalPort() %\>\ \Session ID: \<%= session.getId() %\>\ \服务器时间: \<%= new java.util.Date() %\>\ \<% Integer count = (Integer) session.getAttribute("count"); if (count == null) { count = 1; } else { count++; } session.setAttribute("count", count); %\> \您在本会话中已访问 \\<%= count %\>\ 次。\ \存入Memcached测试属性:马年大吉2026\ \ \ 把文件复制到RS2: \[root@RS1 \~\]# scp /usr/local/tomcat/webapps/ROOT/session.jsp root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/ ##### 3.5.2 测试正常情况 浏览器访问http://172.25.254.10:8080/session.jsp,刷新几次,count值累加。 直接访问http://172.25.254.20:8080/session.jsp,注意观察:Session ID没有变!count值继续累加!说明两台Tomcat读取的是同一个Session。 ##### 3.5.3 测试故障转移 **RS1的Memcached宕机** \[root@RS1 \~\]# systemctl stop memcached 刷新RS2上的session.jsp,Session依然有效,访问次数继续累加。因为RS2的failoverNodes设的是n2,正常情况下写n1,n1挂了自动切换到n2。 **RS1的Tomcat宕机** \[root@RS1 \~\]# systemctl stop tomcat.service 此时只用RS2提供服务。刷新页面,Session ID不变,count值继续+1。 **两台Memcached全宕** \[root@RS1 \~\]# systemctl stop memcached \[root@RS2 \~\]# systemctl stop memcached 此时Session无法写入缓存,但Tomcat会降级为本地Session,用户不会直接被踢出,服务依然可用。Memcached恢复后自动重新同步。

相关推荐
Predestination王瀞潞1 小时前
SQL 片段的提取与复用机制
java·sql·mybatis
炸炸鱼.1 小时前
linux系统安全及应用_扫描版
linux·运维·系统安全
brucelee1861 小时前
芋道 Spring Boot 框架 + AWS S3 图片上传显示
java·开发语言·数据库
艾文-你好1 小时前
深信服SSL aTrust设备密码重置及管理密码重置
linux·服务器·ssl
七夜zippoe1 小时前
Java项目CI/CD实战:Jenkins与GitLab CI深度解析
java·ci/cd·gitlab·jenkins·groovy·pipline
拾贰_C1 小时前
【idea | knife4j | springboot2/3|接上篇】knife4j版本号与spring boot版本不兼容问题
java·spring boot·intellij-idea
蜡台1 小时前
IDEA 安装 Alibaba cloud toolkit 及配置使用
java·ide·intellij-idea
百结2141 小时前
Linux系统安全
linux·运维·服务器
吴声子夜歌1 小时前
小程序——转发API
java·前端·小程序
利来利往1 小时前
skynet call可能引发的bug
java·junit·bug