Web应用服务器Tomcat

news2024/9/22 17:19:18

一、tomcat

        Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。

同步
交互式网页,用户提交了请求,就是想看到查询的结果。服务器响应到来后是一个全新的页面内容,哪怕URL 不变,整个网页都需要重新渲染。例如,用户填写注册信息,只是 2 次密码不一致,提交后,整个注册页面重新刷新,所有填写项目重新填写( 当然有办法让用户减少重填 ) 。这种交互非常不友好。从代价的角度看,就是为了注册的一点点信息,结果返回了整个网页内容,不但浪费了网络带宽,还需要浏览器重新渲染网页,太浪费资源了,影响了用户体验和感受。上面这些请求的过程,就是同步过程,用户发起请求,页面整个刷新,直到服务器端响应的数据到来并重新渲染。
异步
传统的网页如果需要更新内容,必需重载整个网页面。 Ajax 的出现,改变这一切,同时极大的促进了Javascript的发展。 Ajax "Asynchronous Javascript And XML" (异步 JavaScript XML ),是指一种创建交互式、快速动态网页应用的网页开发技术,最早起源于1998 年微软的 Outlook Web Access 开发团队。Ajax 通过在后台与服务器进行少量数据交换, 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Javascript 通过调用浏览器内置的 WEB API 中的XMLHttpRequest 对象实现 Ajax 技术。早期 Ajax 结合数据格式 XML ,目前更多的使用 JSON 。利用 AJAX 可实现前后端开发的彻底分离,改变了传统的开发模式。

安装

1.安装jdk

[root@tomcat-node1 ~]# yum install -y java-1.8.0-openjdk.x86_64

2.解压tomcat

[root@tomcat-node1 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/

3.设置软连接

[root@tomcat-node1]# cd /usr/local
[root@tomcat-node1 local]# ln -s apache-tomcat-9.0.93 tomcat

4.开启tomcat

[root@tomcat-node1 ~]# /usr/local/tomcat/bin/startup.sh

5.生成tomcat主配置文件

[root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk

6.创建用户

[root@tomcat-node1 ~]# useradd -s /sbin/nologin -M tomcat

7.生成启动文件

# 修改权限
[root@tomcat-node1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat-node1 ~]# 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
[root@tomcat-node1 ~]# systemctl daemon-reload 

8.重启tomcat

[root@tomcat-node1 ~]# systemctl restart tomcat

 另一台主机同上

[root@tomcat-node2 ~]# yum install -y java-1.8.0-openjdk.x86_64
[root@tomcat-node2 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
[root@tomcat-node2 ~]# useradd -s /sbin/nologin -M tomcat
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
# 修改权限
[root@tomcat-node2 ~]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat-node2 ~]# 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
[root@tomcat-node2 ~]# systemctl daemon-reload 
[root@tomcat-node2 ~]# systemctl restart tomcat

二、反向代理实现Tomcat

2.1 常见部署方式

准备一台安装好nignx的服务器

2.2 Nginx反向代理

反向代理单台web服务器

[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf 
server {
    listen *:80;
    server_name www.lm.org;
    root /data/wb/html;
    index index.html;
    location ~ \.jsp$ {
        proxy_pass http://172.25.254.10:8080;
    }
}
[root@nginx-node1 ~]# systemctl restart nginx

2.3 负载均衡

1.ip_hash

[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf 
upstream tomcat {
    ip_hash;
    #hash $cookie_JSESSIONID;
    server 172.25.254.10:8080;
    server 172.25.254.20:8080;
}
server {
    listen *:80;
    server_name www.lm.org;
    root /data/wb/html;
    index index.html;
    location ~ \.jsp$ {
        proxy_pass http://tomcat;
    }
}
[root@nginx-node1 ~]# systemctl restart nginx

源地址哈希,后端服务器不会改变 

2.cookie哈希

[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf 
upstream tomcat {
    #ip_hash;
    hash $cookie_JSESSIONID;
    server 172.25.254.10:8080;
    server 172.25.254.20:8080;
}
server {
    listen *:80;
    server_name www.lm.org;
    root /data/wb/html;
    index index.html;
    location ~ \.jsp$ {
        proxy_pass http://tomcat;
    }
}
[root@nginx-node1 ~]# systemctl restart nginx

三、session 共享服务器

msm

msm memcached session manager )提供将 Tomcat session 保持到 memcached 可以实现高可用。项目早期托管在google code, 目前在 Github github网站链接 : https://github.com/magro/memcached-session-manager
部署:

1.解压

[root@tomcat-node1 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/

2.复制

[root@tomcat-node1 ~]# cp test.jsp /usr/local/tomcat/webapps/
[root@tomcat-node1 ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/
root@172.25.254.20's password: 
test.jsp                                                         100%  968   409.9KB/s   00:00  

3. 修改tomcat

172.25.254.10

[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/context.xml
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
      failoverNodes="m1"
      requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
[root@tomcat-node1 ~]# systemctl restart tomcat.service

172.25.254.20

[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
      failoverNodes="m2"
      requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
[root@tomcat-node2 ~]# systemctl restart tomcat.service

4.下载

[root@tomcat-node2 ~]# yum install -y memcached

 

[root@tomcat-node1 ~]# yum install -y memcached

测试

1. 在两台 tomcat 都开启的情况下:
2. n1 被停止后继续提交信息看是否可以读取到之前的会话信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微信小程序】自定义组件 - 数据监听器

1. 什么是数据监听器 2. 数据监听器的基本用法 组件的 UI 结构如下&#xff1a; 组件的 .js 文件代码如下&#xff1a; 3. 监听对象属性的变化 数据监听器 - 案例 案例效果 2. 渲染 UI 结构 3. 定义 button 的事件处理函数 4. 监听对象中指定属性的变化 5. 监听对象中所…

Vite + Vue 3 项目中实现路由自动化完整步骤。

下面是从创建项目到实现路由自动化的完整步骤 在 Vite Vue 3 项目中实现路由自动化可以通过使用文件系统路由生成器来简化路由管理过程。以下是实现路由自动化的完整步骤&#xff1a; 1.创建 Vite Vue 3 项目 如果你还没有一个 Vite Vue 3 项目&#xff0c;可以使用以下命令…

Oracle开始严查Java许可!

0x01、 前段时间在论坛里就看到一个新闻&#xff0c;说“Oracle又再次对Java下手&#xff0c;开始严查Java许可&#xff0c;有企业连夜删除JDK”&#xff0c;当时就曾在网上引起了一阵关注和讨论。 这不最近在科技圈又看到有媒体报道&#xff0c;Oracle再次严查&#xff0c;对…

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 应用开发安全(含闯关习题)

学完时间&#xff1a;2024年8月23日 学完排名&#xff1a;第1748名 一、安全设计理念 以硬件TCB作为安全信任基础,软硬结合的安全设计 HarmonyOS系统安全设计基础: 基于最小的可信计算基础TCB;硬件主密钥,加解密引擎关键安全组件基于TEE可信运行环境;TEE&#xff08;Truste…

自编码器(Autoencoder, AE):深入理解与应用

自编码器&#xff08;Autoencoder, AE&#xff09;&#xff1a;深入理解与应用 引言 自编码器&#xff08;Autoencoder, AE&#xff09;是一种通过无监督学习方式来学习数据有效表示的神经网络模型。其核心思想是通过编码器将输入数据压缩成低维潜在表示&#xff0c;然后通过…

Element-UI自学实践(二)

因上篇 Element-UI自学实践&#xff08;一&#xff09; 文字过多&#xff0c;不便于观看&#xff0c;故另起一篇。 5. 反馈组件 反馈组件用于与用户进行交互&#xff0c;提供即时反馈&#xff0c;包括警告&#xff08;Alert&#xff09;、消息提示&#xff08;Message&#x…

Datawhale X 李宏毅苹果书 AI夏令营task1-3笔记

1.1 通过案例了解机器学习 机器学习基础 首先简单介绍一下机器学习&#xff08;Machine Learning&#xff0c;ML&#xff09;和深度学习&#xff08;Deep Learning&#xff0c;DL&#xff09;的基本概念。机器学习&#xff0c;顾名思义&#xff0c;机器具备有学习的能力。具体…

[笔记] 某振动分析软件的可能侦测范围

1.可检测量【部分】 后面有图例&#xff0c;很好找&#xff0c;其实。可以在bing.com搜索image. {"type": "sdc-application-types","version": 1,"data": [{"name": "Disabled ","type": "disa…

<数据集>遥感船舶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;15047张 标注数量(xml文件个数)&#xff1a;15047 标注数量(txt文件个数)&#xff1a;15047 标注类别数&#xff1a;25 标注类别名称&#xff1a;[Aircraft Carrier, Auxiliary Ships, Other Ship, Other Warship,…

实车测试的目的和作用 (Purpose and function of real vehicle test)

实车测试的目的和作用主要在于验证整车控制器软件的功能&#xff0c;确保其在实车环境下的安全性和稳定性。实车测试是整车控制器软件发布前不可或缺的一个测试环节&#xff0c;主要目的是在实车环境上验证VCU最常规的功能&#xff0c;对HIL测试台架无法模拟的工况进行补充测试…

孤独症托养无需家长陪护中心:守护每一份独特的星光

在星贝育园&#xff0c;作为一所专业的孤独症寄宿学校&#xff0c;我们致力于为孤独症儿童提供最全面、最专业的康复与成长环境。以下是我们的主要优势&#xff1a; 一、专业的师资团队 星贝育园拥有一支经验丰富、专业素养极高的教师团队。我们的教师不仅具备深厚的…

【杨辉三角】打印杨辉三角前10行

杨辉三角&#xff08;Pascals Triangle&#xff09;是一个由数字组成的三角形&#xff0c;具有许多有趣的数学性质。每个数字是其上方两个数字之和。它的第一行和第一列都是1&#xff0c;形成的结构如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 …

TCP 粘包问题

TCP是一个面向字节流的传输层协议。“流” 意味着 TCP 所传输的数据是没有边界的。这不同于 UDP 协议提供的是面向消息的传输服务&#xff0c;其传输的数据是有边界的。TCP 的发送方无法保证对方每次收到的都是一个完整的数据包。于是就有了粘包、拆包问题的出现。粘包、拆包问…

为什么最近多模态大模型工作中用Q-Former结构的变少了?

前言 训练资源有限的情况下&#xff08;有限的 GPU、训练数据等&#xff09;&#xff0c;Q-former 也只是一个“低效”压缩器。如果想减少图片 token 数量来降低训练代价&#xff0c;简单的 AdaptiveAveragePooling 就够了。 转载自丨PaperWeekly 我们组最近的工作 DeCo: De…

Eagle 4.0:强大插件加持的素材收集管理工具

期待很久的全新 Eagle 4.0 现已正式推出了&#xff01; Eagle 是一款 Win / Mac 双平台素材收集管理工具&#xff0c;它可以帮你高效整理电脑中的图片、字体、视频、音频等各种素材&#xff0c;是众多设计师、美图收集爱好者的信赖之选。 4.0 版是一次全面的革新&#xff0c;从…

二十三设计模式速记

文字版 Java设计模式通常被分为三大类&#xff1a;创建型模式&#xff08;Creational Patterns&#xff09;、结构型模式&#xff08;Structural Patterns&#xff09;和行为型模式&#xff08;Behavioral Patterns&#xff09;。每种类型包含若干种具体的设计模式。 创建型模…

Unity URP Shader 修改深度让人物不再被地面遮挡

Unity URP Shader 修改深度让人物不再被地面遮挡 前言项目场景布置代码编写 前言 遇到一个小问题&#xff0c;人物总是被XY平面的地面遮挡&#xff0c;于是在Shader中改一下深度输出&#xff0c;这样地面再也不会挡住人物了。 项目 场景布置 将人物放到XY平面的后面 配置S…

在ubuntu22.04上部署RagFlow一个深度文档理解的开源 RAG

RAGFlow 是一个基于深度文档理解的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。它为任何规模的企业提供简化的 RAG 工作流程&#xff0c;结合 LLM&#xff08;大型语言模型&#xff09;以提供真实的问答功能&#xff0c;并由来自各种复杂格式数据的有…

微服务——远程调用

为什么需要远程调用&#xff1f; 在微服务架构中&#xff0c;每个服务都是独立部署和运行的&#xff0c;它们之间需要相互协作以完成复杂的业务逻辑。因此&#xff0c;远程调用成为微服务之间通信的主要方式。通过远程调用&#xff0c;一个服务可以请求另一个服务执行某些操作或…

Ubuntu 22安装和配置PyCharm详细教程(图文详解)

摘要&#xff1a;本文提供了在 Ubuntu 22 上通过官方 .tar.gz 文件安装 PyCharm 的详细教程。包括从 JetBrains 官方网站下载适合的 PyCharm 版本&#xff08;Community 或 Professional&#xff09;&#xff0c;在终端中解压并将其移动到 /opt 目录&#xff0c;配置适当的权限…