RHEL——web应用服务器TOMCAT

java 全栈(前端+后端),用户想要访问java程序需要通过nginx,但nginx处理不了java,需要TOMCAT来处理java程序后将数据返回给nginx

#nginx(构建响应报文)------中间件------java(程序)

#中间件

  • 企业版:Oracle WebLogic、Red Hat JBoss EAP等

  • 社区版:Apache Tomcat等

一、WEB技术

1. 架构

C/S架构

客户端(应用)------服务

B/S架构

浏览器(网页)------服务


2. 前端三大核心技术

(1) HTML

HTML(HyperText Markup Language)是网页的骨架,用标签来定义网页有哪些内容

  • 不是编程语言(没有逻辑判断、循环)

  • 是标记语言(用一对对标签包裹内容)

  • 浏览器能直接识别和渲染


(2)css

CSS(Cascading Style Sheets)是网页的皮肤,控制 HTML 元素的外观(颜色、大小、位置、动画等)

  • 也是标记语言(不是编程语言)

  • 通过选择器找到 HTML 元素,然后设置样式

  • 支持层叠和继承


(3)JavaScript

JavaScript 是网页的灵魂(能做什么动作),让页面从"静态展示"变成"动态交互"

  • 是编程语言(有变量、循环、判断、函数),不是标记语言

  • 运行在浏览器端(也可以运行在服务器端,如 Node.js)

  • 可以动态操作 HTML 和 CSS(增删改查页面元素和样式)

  • 事件驱动(响应用户的点击、输入、滚动等操作)

  • 支持异步通信(AJAX/Fetch,不刷新页面获取数据)

用户和服务器进行交互时有同步和异步两种模式

同步:用户发来请求时,在网页中按顺序编写内容,如果上一行内容有错或者整个网页有一行错误,想要修改则会直接刷新整个网页,用户又要重新编写内容

异步:用户发来请求编写内容时,是不需要按顺序编写的,也不会因回到上一行修改而导致整个网页重新刷新


(4)JSP后端技术

HTML、CSS、JavaScript ------ 都是静态的,它们是浏览器直接运行的,内容写死在文件里,不会变化

JSP ------ 是动态的

  • JSP(JavaServer Pages)是 Java Web 技术

  • 运行在 服务器端(如 Tomcat)

  • 可以连接数据库、处理业务逻辑,动态生成 HTML 返回给浏览器


二、web框架

1. web资源和访问

用户通过电脑或手机来访问服务器


2. 后台应用架构

(1)单体架构

传统架构(单机系统),一个项目就是一个工程

all in one的架构方式,所有功能都放在一个应用里

Java实现:jsp、Servlet,打成一个包jar、war部署

易于开发和测试

如果某个功能模块出问题。需要修改就得重新打包


(2)微服务

SOA

  • 将功能分配到多个模块
  • 某个模块出问题就修复某个模块就行,不用重新修复整个应用

Microservice

  • 在SOA的基础是更加细化更多模块
  • 多人开发低,维护成本高

优点

  • 每个服务足够小,代码容易理解
  • 开发简单、效率高,可以由小团队(2-5)单独开发
  • 可以使用不同语言开发

缺点

  • 一个项目被拆分成多个工程,增加开发、测试、运维和监控等复查度
  • 要保证不同服务之间的数据一致,引入了分布式事务和异步补偿机制

微服务架构:Dubbo、Spring cloud


三、TOMCAT

1. TOMCAT实验环境

安装中间件TOMCAT要看企业用的最多的是哪个版本,不一定要下最新的版本

实验环境至少需要三台虚拟主机,一台用来做高新能web服务器(Nginx),两台用来做web应用服务器(rs1和rs2,用来部署TOMCAT)

安装Nginx:RHEL------高性能Web服务器-CSDN博客(三、Nginx源码编译)

下载TOMCAT9版本(目前企业用最多):Apache Tomcat® - Apache Tomcat 9 软件下载


2. 下载tomcat并部署

在rs1主机上下载tomcat和安装Java环境

root@rs1 \~\]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz \[root@rs1 \~\]# yum install java-1.8.0-openjdk.x86_64 -y

部署tomcat

root@rs1 \~\]# ls \[root@rs1 \~\]# tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local/ \[root@rs1 \~\]# cd /usr/local/ \[root@rs1 local\]# ls \[root@rs1 local\]# mv apache-tomcat-9.0.115/ tomcat \[root@rs1 local\]# cd tomcat/ \[root@rs1 tomcat\]# ls \[root@rs1 tomcat\]# cd bin/ \[root@rs1 bin\]# ./startup.sh \[root@rs1 bin\]# netstat -antlupe \| grep 8080


3. 制作tomcat启动脚本

编写启动脚本

root@rs1 bin\]# vim /lib/systemd/system/tomcat.service \[Unit

Description=Tomcat

#After=syslog.target network.target remote-fs.target nss-lookup.target

After=syslog.target network.target

Service

Type=forking

EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf

ExecStart=/usr/local/tomcat/bin/startup.sh

ExecStop=/usr/local/tomcat/bin/shutdown.sh

PrivateTmp=true

User=tomcat

Group=tomcat

Install

wantedBy=multi-user.target

设置tomcat环境,创建tomcat用户并进行测试

root@rs1 bin\]# vim /usr/local/tomcat/conf/tomcat.conf 1 JAVA_HOME=/etc/alternatives/jre \[root@rs1 bin\]# useradd -s /sbin/nologin -M tomcat \[root@rs1 bin\]# chown tomcat.tomcat /usr/local/tomcat/ -R \[root@rs1 bin\]# systemctl daemon-reload \[root@rs1 bin\]# systemctl enable --now tomcat.service \[root@rs1 bin\]# systemctl restart tomcat.service \[root@rs1 bin\]# netstat -antlupe \| grep java


4. 在rs2上部署tomcat

###注意:在rs1上部署完tomcat后,在rs2上执行rs1一样的操作部署tomcat

将rs1上的tomcat程序和tomcat启动脚本拷贝到rs2上

root@rs1 local\]# scp -r tomcat/ root@192.168.153.20:/usr/local/ \[root@rs1 local\]# scp /lib/systemd/system/tomcat.service root@192.168.153.20:/lib/systemd/system/tomcat.service

在rs2上安装Java环境,并创建tomcat用户,启动tomcat服务

root@rs2 \~\]# yum install java-1.8.0-openjdk.x86_64 -y \[root@rs2 \~\]# useradd -s /sbin/nologin -M tomcat \[root@rs2 \~\]# chown tomcat.tomcat /usr/local/tomcat/ -R \[root@rs2 \~\]# systemctl daemon-reload \[root@rs2 \~\]# systemctl enable --now tomcat \[root@rs2 \~\]# systemctl restart tomcat.service \[root@rs2 \~\]# netstat -antlupe \| grep 8080 \[root@rs2 \~\]# netstat -antlupe \| grep java


四、nginx与tomcat整合

1. 单体架构

在nginx主机上配置,反向代理,单机运行

root@Nginx \~\]# vim /usr/local/nginx/conf/conf.d/vhosts.conf \[root@Nginx \~\]# nginx -s reload


在rs1的tomcat默认发布目录/usr/local/tomcat/webapps/ROOT/上编写测试文件test.jsp

root@rs1 \~\]# vim /usr/local/tomcat/webapps/ROOT/test.jsp \<%@ page contentType="text/html; charset=GBK" %\> \<%@ page import="java.util.\*" %\> \\\Cluster App Test\\ \ Server Info: \<% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"\");%\> \<% out.println("\ ID " + session.getId()+"\"); String dataName = request.getParameter("dataName"); if (dataName != null \&\& dataName.length() \> 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.print("\Session list\"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"\"); System.out.println( name + " = " + value); } %\> \

name:\ \ key:\ \ \ \ \ \


将测试文件test.jsp也拷贝到rs2的默认发布目录上

root@rs1 \~\]# scp /usr/local/tomcat/webapps/ROOT/test.jsp root@192.168.153.20:/usr/local/tomcat/webapps/ROOT/test.jsp

 2026-02-14   19:44.59   /home/mobaxterm  vim /etc/hosts

127.0.0.1 localhost

::1 localhost

192.168.153.100 www.timinglee.org lee.timinglee.org bbs.timinglee.org login.timinglee.org www.lee.org www.lee.com php.timinglee.org app.timinglee.org

在浏览器上访问app.timinglee.org/test.jsp


2. tomcat负载均衡

root@Nginx \~\]# vim /usr/local/nginx/conf/conf.d/vhosts.conf \[root@Nginx \~\]# nginx -s reload


再次访问app.timinglee.org/test.jsp,填写表格是不会乱跳到另一个服务器上,真正实现负载均衡


五、session共享服务器

1. msm介绍

msm(memcached session manager)提供将Tomcat的session保持到memcached可以实现高可用

通过tomcat+memcache实现session会话领丢失


2. 下载模块

下载模块,将模块放到/usr/local/tomcat/lib目录下

下载链接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

打不开github可以下载瓦特工具箱(Steam++官网) - Watt Toolkit加速github


将模块拷贝到rs1和rs2的tomcat的/lib目录下

root@rs1 \~\]# ls \[root@rs1 \~\]# unzip jar.zip \[root@rs1 \~\]# cp jar/\* /usr/local/tomcat/lib/ \[root@rs1 \~\]# ls /usr/local/tomcat/lib/ \[root@rs1 \~\]# scp jar/\* root@192.168.153.20:/usr/local/tomcat/lib/ # 到rs2查看/usr/local/tomcat/lib/目录下是否有下好的模块 \[root@rs2 \~\]# ls /usr/local/tomcat/lib/


3. 安装memcache

在rs1和rs2上安装memcache,并开启memcache服务

root@rs1 \~\]# dnf install memcached -y \[root@rs1 \~\]# vim /etc/sysconfig/memcached \[root@rs1 \~\]# systemctl restart memcached.service \[root@rs1 \~\]# netstat -antluple \| grep memcached


4. 配置tomcat

在rs1和rs2的/usr/local/tomcat/conf/context.xml

参考模板:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

root@rs1 \~\]# vim /usr/local/tomcat/conf/context.xml 29 \ \[root@rs1 \~\]# systemctl restart tomcat.service \[root@rs2 \~\]# vim /usr/local/tomcat/conf/context.xml 29 \ \[root@rs2 \~\]# systemctl restart tomcat.service


5. 测试共享服务器

rs1和rs2都在线的情况下访问app.timinglee.org/test.jsp


当rs2挂掉后,再次访问app.timinglee.org/test.jsp到rs1上是否有之前rs2的会话数据

root@rs2 \~\]# systemctl stop tomcat.service


激活rs2的tomcat服务,关闭rs1的tomcat服务,在rs2上查看是否有rs1的会话数据

root@rs2 \~\]# systemctl restart tomcat.service \[root@rs1 \~\]# systemctl stop tomcat.service


相关推荐
v沙加v2 小时前
Java Rendering Engine Unknown
java·开发语言
识君啊2 小时前
Java双指针 - 附LeetCode 经典题解
java·算法·leetcode·java基础·双指针
java1234_小锋2 小时前
分享一套优质的SpringBoot4+Vue3学生信息管理系统
java·vue.js·spring boot·学生信息
g***27992 小时前
knife4j+springboot3.4异常无法正确展示文档
java
weisian1512 小时前
JVM--10-JVM实战部署全指南:从`java -jar`到生产级高可用
java·jvm·jar·gc
人道领域2 小时前
Maven多模块开发:高效构建复杂项目
java·开发语言·spring boot·maven
myFirstName2 小时前
离谱!React中不起眼的[]和{}居然也会导致性能问题
前端
手握风云-2 小时前
JavaEE 进阶第十九期:MyBatis-Plus,让 CRUD 飞起来
java·java-ee·mybatis
我是伪码农2 小时前
Vue 2.11
前端·javascript·vue.js